tag 标签: 松江嵌入式linux

相关博文
  • 热度 29
    2014-7-9 19:44
    2136 次阅读|
    0 个评论
     GDB 调试文档                       作者:下家山 前言:···· 1 一:what is GDB·· 1 二:从哪里可以获取···· 1 三:make ready·· 1 四:configure·· 2 五:debug hello example·· 2 六:run gdbserver·· 3 七:run client·· 3 八:碰到的问题···· 4 九:结束语···· 5   前言:      因GDB这部分我做得很不理想(不能debug module,也不能debug kernel),所以心得和调试经验就比较少。 一:what is GDB      GDB-即GNU-Project-Debugger; 二:从哪里可以获取 我用的是gdb-6.4,官方下载地址:http://ftp.gnu.org/gnu/gdb/ 官方相关文档:http://sourceware.org/gdb/current/onlinedocs/gdb_toc.html 三:make ready      因为我的环境是:      Host:一台装有ubuntu的PC(192.168.110.77)      Target:LYTs3c2410开发板(192.168.110.9)      Host上的目录结构为:           root@pc-ubuntu:/home/cgm/gdb/                 (总目录)                                  gdb-6.4               (即解压后的源码)                                  build/                 (build目录)                                      client/             (gdb-6.4 build相关信息)                                      server/             (gdbserver build相关信息)                                  gdb_client_install/    (gdb-6.4 make install 安放目录)                                  gdb_server_install/  (gdbserver make install 安放目录) 四:configure Configure client root@pc-ubuntu#cd /home/cgm/gdb/build/client   #/home/cgm/gdb/gdb-6.4/configure --target=arm-linux –prefix=/home/cgm/gdb/gdb_client_install/ #make #make install Configure GDBServer #cd /home/cgm/gdb/build/server #CC=arm-linux-gcc /home/cgm/gdb/gdb-6.4/gdbserver/configure –host=arm-linux –prefix =\ Home/cgm/gdb/gdb_server_install/ #make #make install 五:debug hello example      准备hello.c文件      如:      /*Hello.c*/ #include int a=9; int main(void) {        char *hello="hello!\n";        unsigned short i;        for(i=a;i16;i++)        {               printf("%s",hello);        }        return 0; } #arm-linux-gcc –g hello.c –o hello 将会得到名为hello的可执行文件 六:run gdbserver copy gdbserver 和hello到target nfs 目录下 #cp / Home/cgm/gdb/gdb_server_install/bin/gdbserver  home/cgm/Linux/root_nfs/ #cp /home/cgm/gdb/hello/hello  /home/cgm/Linux/root_nfs/ 通过NFS方式加载kernel zImage #ls类容如下: #./gdbserver 192.168.110.77:1234 hello 现象如下: 这样gdbserver就处于listen状态,等待client的链接. 七:run client #cd /home/cgm/gdb/gdb_client_install/bin/ #./arm-linux-gdb /home/cgm/Linux/root_nfs/hello现象如下 #target remote 192.168.110.9:1234 将会看到 在target端则可以看到 接下来就可以在client端输入各种gdb的命令了 如: #list 结果如下: 还有break,info all-registers,info locals,print a(a为变量)等命令。 (gdb)break 11  (即在11行处设置断点,程序运行到此处则停下) (gdb)info all-register (显示左右register值) (gdb)info locals(显示所有局部变量的值) (gdb)print a (a即为hello.c里面的一个全局变量,此命令即显示当前a的值) 八:碰到的问题 问题一: # ./gdbserver 192.168.110.77:2345 hello ./gdbserver: error while loading shared libraries: libthread_db.so.1: cannot open shared object file: No such file or directory 到相关的toolchain (我用的是arm-3.4.1)里面找到需要的库,考到root_nfs的lib下面即可。 问题二: Run命令不能执行 在host上,run命令不能执行,必须用C。具体原因我还不知道。 九:结束语 调试可加载模块(.ko)还没有实现,哪位实现了,可否与我联系,本人一定请教。        2008-6-13   下家山     写于上海.松江               Email:ximenpiaoxue4016@sina.com           
  • 热度 56
    2012-11-25 16:51
    4682 次阅读|
    32 个评论
      今天偶然翻到我原来工作的盘,发现一个很好的文档,现在不是流行“云”么,前几天见了个朋友,说到他们的wifi module可以集成tcp/ip协议栈,很方便连到云端,呵呵,想起自己刚毕业时一天到晚看到的诺基亚白皮书里WAP协议中的很多参考图),就把外网画成一朵云的样子(大笑想起当年如日中天的NOKIA,今天也有没落的一天,真是感叹三十年河东,三十年河西,一个公司的决策层如果不能高瞻远瞩,就离没落越来越近了,google有“云电视”,中国很多公司在做“云存储”!其实,很多IT者也不知道“云”到底什么概念,与天上的云有什么关系!              我一般不喜欢转载别人的东西,希望搞原创(魔鬼搞原创真的很累,而且别人转载也不注明出处和作者,就像这篇讲云的文档一样,我原来从同事那里考过来的时候就没有看到出处,我今天想注明都不可能,),但是,这篇云的文章写的诙谐幽默,在此向作者致敬!!!强大        下家山转载(各位找到作者出处的请补个贴,谢谢!)   云里雾里的云计算 【1】   有一次去开会,台上的人在讲云计算。我问身边的听众,“听懂了吗?感觉如何?” 听众答,“云里雾里的,感觉特神秘。” 我说,“这说明讲员讲得好。有没有注意到寺庙里的气氛也很神秘?不神秘,就没有崇拜。不崇拜,你怎么肯掏钱买香火?”   【1】云计算要解决什么问题? 1997年,Google的两位创始人,Larry Page和Sergey Brin,找Andy Bechtolsheim募集投资。 Andy问,“你们打算做什么?” Larry和Sergey答,“打算把互联网上所有网页都下载,然后建一个搜索引擎。” Andy说,"把互联网上所有网页统统下载?!需要多大空间?   几个Giga不行吧,几个Tera也不行吧,几个Peta,几个Zetta?。。。嗯,我看几个Googol也许才能撑得住。知道Googol吗?就是10的100次方,就是一个1后面拖100个0!" 估计是Andy觉得这个项目不太靠谱,所以给的钱不多,只有1百万美元。只有这么一点钱,如果去买高端的存储系统,显然是不够的。走投无路的情况下,Larry和Sergey决定用PC之类便宜的机器,组建一个机器集群。先凑合着用,等以后数据量增加以后,再购买更多的PCs,扩大集群的容量。 这个故事的真实性,有待考证。但是从中可以看到Google集群,也就是Google云计算的核心,要解决的四个问题。 1. 大规模的存储空间,用于存储海量的数据。 2. 随着业务的发展,新的数据源源不断地增加,存储空间需要相应扩大。用术语讲,这叫可扩展性,scalability。 3. 系统的硬件设备必须便宜,通常使用大宗产品(commodity),譬如PC,或者价格便宜,中等性能的Dell server。 4. 便宜的硬件设备,经常死机。所以在设计这个集群的时候,必须保证不能因为个别机器死机,导致整个系统的崩溃。也就是系统的稳定性要好,reliability。   【2】从Google集群到云计算,云计算的商业模式 起初Google集群是供内部使用的系统。Google为什么要开放这个系统,包装成云计算平台,给外界使用呢? 这要从Google的商业模式说起。Google的绝大多数收入来自于广告,其它产品与服务的收入十分有限。其它产品包括Google盒子,这是给企业内部网用的搜索引擎。把Google盒子安装到企业内部网,企业员工就可以搜索企业内部的文档,包括可以公开的文档,也包括仅供企业内部查阅的资料。虽然技术很新颖,但是卖得并不好。据ZDNet的报道 ,2008年度,Google盒子的收益,占Google总利润的份额,不到2%。       Google search appliance, 俗称Google盒子。 Courtesy http://mytwentyfive.com/blog/wp-content/uploads/byme/Google%20Search%20Appliances.jpg 单一的收入来源,抗风险的能力差。譬如经济危机一来,各个企业的广告预算缩减,势必影响到Google的利润。怎么办?挖掘自身的优势,发现更多卖点,搞多种经营。 Google的技术优势在哪里?有人说,Google的搜索结果精确,所以PageRanking算法是其精髓。其实,算法容易模仿复制,即使几年前PageRanking是Google的独家秘籍,但是今日各大搜索引擎,都有类似算法。 让Google独步天下的是它的集群。2006年,Google集群的规模 是45万台机器。两年过去了,有人推测现在的规模又翻了一番。由于Google从不公布准确数字,所以大家只能靠Google给硬件厂商下的订单推测。 推测虽然不准确,但是即便是10万台机器的规模,在历史上也是从无古人的,在当代也是独一无二的。而且,更重要的,是这个超大规模的集群系统已经经历了10年的实际运行,在实践中被证明,它是可靠的,是可扩展的,每台机器的价格也是低廉的。完全符合上一节列举的四个要求。   但是如何依靠这个独门神器挣钱呢?思路有两条。   1. 做hosting,数据托管。其它企业不用建自己的数据中心了,把数据存在Google的集群里得了,每个月交点托管费。 2. 不少Google的应用服务很有人气,譬如Gmail,Gtalk,Reader,Online docs,Picasa,Google earth还有YouTube等等。这些服务对于个人用户而言,完全是免费的。但是Google从来没有说给企业用户使用,也是免费的。譬如某家商店,开了一个网站,网站上需要贴很多照片,还要给个地图给顾客引路。这个商店不需要自己动手建照片存储中心,也不需要开发技术难度更高的地图软件,只要调用 Google提供的相关服务就好。商店建网站是为了赢利,所以Google当然要向商店收钱。 第二个思路还有个副产品,那就是给Google创造更高的流量。流量越大,说明观众越多。对于广告商来说,哪里观众多,就愿意在哪里投放广告。所以,如果第二个思路能给Google带来更高流量,那么会吸引更多的广告,给Google带来更多的广告收入。 Google的高管们一合计,觉得有钱途。于是乎,大张旗鼓地制造舆论,educate the market。 造舆论,讲究的是措辞的简练,气势的磅礴。这个新的服务叫什么? 用工程师的语言,准确地定义,应当是“超大规模的,可扩展的,低成本但是高可靠性的服务器集群系统”。Google市场部的人一听,头摇得像拨浪鼓。不行不行,既不简练,也没有气势。 研究来研究去,于是乎,“云计算cloud computing” 这个概念粉墨登场了。   【3】Google云计算的矛头指向谁? 有一次听一位IT业长者指点江山。长者说,“Google像一个阳光少年,一路顺风顺雨,张张扬扬。让人羡慕,招人喜欢。而微软像一个稳健的中年人,一路风吹雨打,过五关斩六将,毁誉参半。对于它的支持者而言,它是令人敬重的领袖,对于它的竞争者而言,它是令人敬重的对手,无论如何,微软是令人敬重的。” 问及电脑的killer applications,长者说了三个,1. Email,2. Office产品系列,包括Word,Excel和PPT等,3. Web。Email和Web都是泛称,不特指某家公司的产品,但是Office系列是微软公司的产品。长者这样的表述,足见他对微软的推崇。 很少有人不知道微软,但是很少有人很了解微软。随便问两个问题,1. 微软哪一年成立的,2. 微软在哪个城市成立的,有多少人答得上来? 微软是在1975年4月,于新墨西哥州的Albuquerque市成立的,后来搬到了华盛顿州的西雅图市郊。从那时到2008年6月30日,Bill Gates掌舵了33年。然后把CEO的宝座让给了Steve Ballmer,自己则专心致志去散钱搞慈善去了。 Bill Gates舍得捐出自己绝大部分家产,这个心胸让所有地球人叹服。但是Bill为了保证他的基金会平稳运转,自己退休的同时,让微软一员老将,Jeff Raikes跟着他离开微软,出任基金会的CEO。Jeff Raikes离职,对于微软而言,是不可估量的损失。为什么这么讲?   微软有三个产品系列, 1. 大家熟悉的XBox游戏机,是微软the Entertainment and Devices Division的拳头产品。这个部门是微软从单纯的软件公司,扩张到家电行业的触角。虽然XBox的成功毋庸置疑,但是它能不能给微软带来丰厚的利润,是摆在这个部门,尤其是其掌门人,Robbie Bach面前的巨大挑战。 2. The Platforms and Services Division,去年7月份被一分为二。一个专注于改善Windows操作系统,另一个负责在线服务。原来的掌门人,Kevin Johnson,挥挥衣袖离开微软,去Juniper Networks出任CEO。 新的两位掌门人中,有一位是我们中国人,毕业于复旦大学的陆奇。从复旦毕业后,陆奇留学美国CMU,攻读博士学位。博士学位拿到后,经历了短暂的动荡,1998年陆奇加盟Yahoo。他从工程师干起,扎扎实实,一路升到副总裁。2009年1月,陆奇学长离开Yahoo,出任微软Online Services Group的president。他的职责是,领导微软对抗Google。 2009年,争夺互联网霸主的大戏正式开演。     陆奇博士   Courtesy http://news.cnet.com/i/bto/20080619/qi_lu_mugshot_cred_yahoo_sm_300x422.jpg 3. 对于Windows操作系统的评价,好坏参半。但是对于Microsoft Office系列产品,业界基本上交口称赞。负责Office部门的原掌门人,就是刚才提到的Jeff Raikes。           Jeff Raikes Courtesy http://i2.sinaimg.cn/IT/it/2008-01-11/U58P2T1D1967790F13DT20080111134704.jpg 2009年上演互联网争霸赛,微软与Google双方的战略意图相当明显。 1. 微软以陆奇为主帅,强攻Google的核心业务,网络搜索。 2. Google砸重金推广云计算,挑战微软的拳头产品,Outlook email系统,和Office产品系列。 攻防战的关键,在于寻找对方的软肋。   Microsoft Outlook vs Google Gmail Microsoft outlook email系统的软肋,在于它的后台系统不够稳定,容量也不容易扩展。对于用户而言,经常会遇到Outlook服务器联系不上,以及存储空间不够的麻烦。 看准这两点,Google把Gmail系统的号召力定位在,1. 稳定性,2. 无限的存储空间。Google之所以敢于这么叫阵,本钱就在于云计算平台。 当然微软也不会示弱,它们反制的着力点在于保密性。 譬如有一家企业叫foobar,Google的销售人员游说到,“别用Outlook了吧,那玩意儿经常掉线,而且隔三岔五地骚扰你说,存储空间没有了,请立刻删除不必要的emails。你的emails都很重要,怎么能删呢?用我们的gmail吧。”  Foobar公司的IT主管说,“我们公司的邮箱地址是@foobar.com,换成@gmail.com,不仅不方便,而且也有损于我们公司技术实力的形象。” Google的销售人员说,“不用换邮箱地址,表面上看仍然是@foobar.com,用户也可以继续使用Outlook桌面工具,但是后台服务器被悄悄地换成了Gmail的云计算平台。” Foobar公司的IT主管心思有点动摇。 这时候,微软的销售人员上门,说到,“听说你们想把email后台系统换成gmail?这可需要一点勇气。你们把公司所以emails,存放在Google的平台上,万一Googler与服你们的emails,贵公司的商业机密,。。啊,哈哈。” 所以,为Google进言,欲挑战微软outlook,必先解决gmail的保密性。也就是其它公司的emails虽然存放在Google的云计算平台,但是Google能够提供足够的技术保证,即便是Googler有意与服,他们也看不到。   Microsoft Office vs Google Docs Microsoft office 产品的软肋,在于所有文件存放在电脑本地。 譬如我在办公室写了一个设计草稿,通过email把文本发给一个同事审阅。晚上回家后,查看email,收到同事回复,说他做了一些文字上的改正,修订版本放在email的附件中,同时建议多加几个插图。我加了几个插图后,文件尺寸变得很大,email发了很久,还是没有顺利发出。于是我把文件存在U盘上,第二天上班后,拿给同事看,然后进一步修改。 Google的销售人员游说到,“你这样左一个文本,右一个文本,不仅不容易找,而且修改过的内容很容易遗漏。用Google Docs,就可以省掉所有这些麻烦。文本放在Google云计算平台上,无论你是在办公室里,还是在家里,你都可以对同一份文本进行修改。而且你可以与你的同事共享这个文本,他也可以对同一份文本进行修改。” 我问,“万一我不同意同事的修改怎么办?” Google的销售人员回答,“没关系,就像wiki一样,所有修改都有记录。如果需要,你可以恢复旧版本。还有,如果你需要查找几年前你写的另一份文件,你不必记住名字,只要一搜索就可以从故纸堆里找出来。” 于是我心旌动摇,准备建议领导把公司的设计文档全部放到Google Docs里去。这时候,微软的销售人员上门了。“听说你要建议把公司所有机密设计文件,转移到Google Docs中去?不怕Googler偷看呀?” 我说,“Google已经提供了解决方案,给我们所有文件加了密,密钥掌握在我们手里。即便Googler想偷看,他们也看不到。” 微软的销售人员说,“这样就好,安全第一。另外,你们的设计文档格式很简单吗?示意图怎么画,Google Docs有类似于微软Visio那样的工具吗?还有,如果你要比较两份不同的文件有什么差异,Google Docs有没有微软Word那样‘比较与合并’ 等等功能?” 微软反制的着力点在于,Google Docs的所有操作都在浏览器里完成,所有功能都通过Ja分隔vaScript实现。受制于Ja分隔vaScript的限制,Google Docs在功能上,不仅目前赶不上Microsoft Office,而且预计在相当长的未来,也不可能与之抗衡。   【4】云计算大战,Google出招   两军对垒,通常双方阵线连绵数十公里。在发动进攻的时候,很少出现全线推进的情况。相反,进攻往往出现在有限几个突击口上。集结强大兵力,在几个突击口上猛烈打击,期望在敌方阵线撕开缺口,然后向敌方纵深挺进,分割敌人阵线,再逐个合围,各个击破。   巴巴罗萨战役 Operation Barbarossa Courtesy http://upload.wikimedia.org/wikipedia/commons/3/34/Operation_Barbarossa.png 大公司之间竞争也有类似特点,双方都有很多产品与服务,而且功能类似,这就像战争中两军对峙的阵线。当一个公司向对手发动竞争攻势的时候,往往选择少数几个产品,大做广告和其它市场推销活动,以期迅速扩大在相关市场的占有率。这类似于在战争中,选择突破口,集结兵力,发动冲击,企图撕开敌军阵线。 譬如Google Docs,虽说它上线已有相当时日,但是从没有见到Google大规模宣传这个服务。所以Google Docs与Microsoft Office,是对峙的阵线,而不是发动进攻的突击口。 Google在云计算战役中,选择的突破口是什么产品与服务呢?答案,Google gadgets。   Google gadgets Courtesy http://www.elanso.com/U/Db3/b3a49166ba7dcceb2221664c2e6181f1/128317955143437500.gif Google gadgets简化了建网站的工作。每个网页可以视作多个元素集成,譬如上面显示的网页包含6个元素,从左上到右下分别是天气,时钟,日历,YouTube视频,生活小窍门,以及搜索。网页元素,portlet,这个概念早在1999年就已经出现。Google gadgets是portlets的一种实现方式,与其它实现方式相比,Google gadgets的优势是使用方便。 譬如某人想建一个网站,在网站的首页的下方,想插入一个搜索框。他不用担心如何去实现隐藏在页面背后的搜索引擎,他要做的,仅仅是在网页的HTML里,插入几行 Ja分隔vaScript。这几行Ja分隔vaScript,不仅在页面上显示了一个搜索框,而且更重要的是把这个网页与Google的云计算平台联系在一起。每当用户输入搜索请求时,这段Ja分隔vaScript就把用户的请求,转发给Google搜索引擎,然后接收Google搜索到的结果,并显示在网页上。 Google gadgets的意义在于,不再像以往的产品那样,在电脑本地获取服务和内容。Google gadgets的服务和内容,来自于Google云计算平台。譬如以往的时钟,显示的时间是由电脑自己演算出来的。如果系统设置错误,时钟就有可能出错。但是Google gadget的时钟,它的时间不是电脑本地演算的,而是从Google云计算平台索取的。只要Google云计算平台不出错,只要网络链接正常,即便电脑本身的设置出了问题,Google gadget时钟也照样准确。   Google gadgets不仅可以给建网站的人提供便利,基于同样原理,Google又推出了Google desktop gadgets。它给千千万万普通的电脑使用者,带来多样化的,时尚的服务。       Google desktop gadgets Courtesy http://vishnus.name/blog/files/vishnu_yahoowidgetmemoryuse.jpg   有人说,Google gadgets让电脑弱智。因为一旦Google gadgets大行其道,电脑就无需强大的CPU和存储空间,它所需要的无非是浏览器,接收用户的请求,转发给Google云计算平台,云计算平台提供内容与服务,然后浏览器接收这些来自云计算平台的内容与服务结果,并且把它们显示给用户。   其实,企图让电脑弱智的,不仅仅是Google云 计算,早在1996年,Oracle总裁Larry Ellison就提出过网络电脑(Network computer)的构想。网络电脑的功能,仅限于浏览器,而内容与服务来自于网络服务器端。与Google云计算平台不同的是,Larry的构想是,网络服务器端最好是Oracle的数据库以及Oracle的应用服务器。     十多年过去了,Larry的构想没有成为现实,原因有三,   1. Network computer的卖点是便宜,因为与传统PC相比,NC无需昂贵的CPU,内存和硬盘。但是近十年来,PC的价格迅速下跌,NC的卖点失去了吸引力。   2. Larry Ellison设想的,以Oracle Database为核心的网络服务器,没有提供很好的可扩展性,也没有提供大量的有吸引力的应用。   3. 网络带宽的发展,没有超过PC计算能力的发展。   十年后的今日,以Google云计算平台为代表的网络服务器集群,比Oracle Database有了长足的改进。不仅可扩展性更好,而且Google提供了很多能吸引人的服务,譬如搜索,视频(YouTube),地图等等。   同时,虽然网络带宽的发展没有超越PC计算能力的发展,但是至少在很多地区,网络带宽不再是制约网络服务发展的瓶颈。   Network computer失败的三条原因中,两条发生了变化,所以,Google拾起老概念,换上新包装,向微软发起攻势。其战略目标,无非是弱化PC本地计算能力的重要性,增强对Google云计算平台的依赖性。   下一步Google gadgets的发展方向是什么?   请注意,目前绝大多数gadgets都是单向使用Google云计算平台所提供的内容与服务,而缺少促进用户上传新的内容和新的服务的gadgets。   所以,不妨大胆预测一下,Google下一步将非常热衷推出像论坛(forum),维基网页(wikipage)这样的gadgets。通过它们,促进用户给Google云计算平台上传用户生成的数据。   进一步,Google将投入巨大资源,发展AppEngine。AppEngine的用处是方便用户开发新的服务逻辑,并且在云计算平台上运行这些新的服务。但是AppEngine的开发,势必遇到很多技术上的困难。详细分析,我们留给下一篇来讨论。   【5】是云计算,还是云存储?   Gadgets的目标是方便大家建网站。但是单靠gadgets,建网站的工作还是不够方便。   通常网站有三个组成部分,1. 网页,2. 业务逻辑, 3. 数据存储。如果说网页相当于商店,那么业务逻辑相当于车间,而数据存储相当于仓库。商店,车间和仓库三者中,技术含量最高的,当属车间。   因为文件太大,无法让各位看官即刻饱眼福!见谅!各位下附件   吧!各位有查到作者出处,补个贴吧!
  • 热度 28
    2012-8-10 13:42
    3616 次阅读|
    9 个评论
    作者:下家山 (请尊重原创,转载请注明:上海索漫科技培训教材http://www.xiajiashan.com ) 我们这里以LPC2136为例。          Lpc2136中有22个中断源,中断控制器提供了16个向量IRQ控制器,分别可以设置16个中断优先级!          其实,要真正体现中断优先级(当低优先级中断服务程序正在执行时,高优先级中断事件到来了,先执行高优先级中断服务程序代码,即高优先级中断会中断低优先级中断服务程序),必须实现中断嵌套!          很多裸奔的arm7或者arm9产品,并没有做中断嵌套,这种产品存在着隐患,而这种隐患常让工程师(开发或维护)无法解释!所以,就出现了,客户把有问题的产品拿到原厂,原厂却说在他哪里是好的,并且当场测试却怎么也测试不出来! ================================================== 假设,我们这里有两个外部中断 EINT1==KEY1===P0.3和EINT3===KEY3====P0.30 而且,我们这里EINT3的中断优先级高于EINT1 当EINT1正在执行的时候,EINT3来了,按照惯例,EINT1会停下来,去执行EINT3的中断,等EINT3的中断服务程序执行完毕,再回头执行EINT1的服务程序。如果我们不用中断嵌套,事情并非如此。 下面是实验代码: #define KEY1  13 #define KEY3  130 #define LED1  116 #define EINT1_NUM  15 #define EINT3_NUM  17 #define P03_FUN_EINT1  36 #define P030_FUN_EINT3  228 #define EINT1_ENABLE  115 #define EINT3_ENABLE  117   /****************************************** 【By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城 上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训】***********/ void __irq IRQ_Eint3(void) {   while(1) {                 IO0SET = BEEPCON; } EXTINT = 13; // 清除EINT3中断标志, VICVectAddr=0x00;                         // 清除中断逻辑, } /*===============================================*/ void __irq IRQ_Eint1(void) {            while(1){                  IO1CLR = LED1; } EXTINT = 11; // 清除EINT3中断标志, VICVectAddr=0x00;                         // 清除中断逻辑 } /*************************************************************/ void Init_EXT(void) { PINSEL0 = P03_FUN_EINT1 | P030_FUN_EINT3; // 设置管脚连接,P0.3设置为EINT1, P0.30设置为EINT3 EXTMODE  |=  13; // 设置EINT3中断为边沿触发模式 EXTPOLAR  =  ~(13);// 设置EINT3中断为上升沿触发模式 EXTMODE  |=  11; // 设置EINT1中断为边沿触发模式 EXTPOLAR  =  ~(11);// 设置EINT1中断为上升沿触发模式 EXTINT  =  0xF;   VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断   VICVectAddr0 = (uint32)IRQ_Eint3; // 设置中断服务程序地址向量 VICVectCntl0 =  0x20 | EINT1_NUM; // 定时器中断通道分配最高优先级(向量控制器) VICVectAddr1 = (uint32)IRQ_Eint1; // 设置中断服务程序地址向量 VICVectCntl1 = 0x20 | EINT1_NUM; // 定时器中断通道分配最高优先级(向量控制器) VICIntEnable  =  EINT1_ENABLE  |  EINT3_ENABLE; // 使能EINT1EINT3中断,EINT3在Bit17,EINT1在bit15上 } ======================================================================================= By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城    上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 /*************************************/ void BEEFON(void) { IO0SET =BEEPCON; } /*************************************/ void BEEFOFF(void) { IO0CLR =BEEPCON; } /*************************************/ void init_system() {  IO0CLR = BEEPCON; IO0DIR = BEEPCON; IO1SET =  LED1; IO1DIR = LED1 ; } /*************************************/ int main (void) { init_system(); Init_EINT(); while(1); return 0; } 上述程序执行结果是,我们先按下KEY1,LED1会亮,当我们再按下KEY3时,蜂鸣器并不会响。 =========================================================================================================================================================改成中断嵌套 ======================================================================================================================================================================= #define KEY1  13 #define KEY3  130 #define LED1  116 #define EINT1_NUM  15 #define EINT3_NUM  17 #define P03_FUN_EINT1  36 #define P030_FUN_EINT3  228 #define EINT1_ENABLE  115 #define EINT3_ENABLE  117   /*************************************/ __inline void enable_IRQ(void) {   int tmp;   __asm   {     MRS tmp, CPSR     BIC tmp, tmp, #0x80     MSR CPSR_c, tmp   } } /*************************************/ /*****************************************************/ void __irq IRQ_Eint3(void) {       uint32 vic_enable_bak;     vic_enable_bak = VICIntEnable;     VICIntEnClr = (EINT3_ENABLE) | (EINT1_ENABLE); //清除自己及比自己优先级更低的中断,以便更高优先级中断响应                    VICVectAddr=0x00;                         // 清除中断逻辑, while(1) {                 IO0SET = BEEPCON; } EXTINT = 13; // 清除EINT3中断标志, VICIntEnable =   vic_enable_bak;//恢复中断 } ======================================================================================= By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城    上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 /*===============================================*/ void __irq IRQ_Eint1(void) {     uint32 vic_enable_bak;    vic_enable_bak = VICIntEnable;    VICIntEnClr =  EINT1_ENABLE;//清除自己以便更高优先级中断响应    VICVectAddr=0x00;     // 清除中断逻辑,以便VIC可以响应更高优先级IRQ中断       enable_IRQ(); while(1){//一般不会在中断服务程序里面做死循环,但为了更好说明问题使然。                  IO1CLR = LED1; } EXTINT = 11; // 清除EINT3中断标志, VICIntEnable =   vic_enable_bak; //恢复中断 } /*************************************************************/ void Init_EXT(void) { PINSEL0 = P03_FUN_EINT1 | P030_FUN_EINT3; // 设置管脚连接,P0.3设置为EINT1, P0.30设置为EINT3 EXTMODE  |=  13; // 设置EINT3中断为边沿触发模式 EXTPOLAR  =  ~(13);// 设置EINT3中断为上升沿触发模式 EXTMODE  |=  11; // 设置EINT1中断为边沿触发模式 EXTPOLAR  =  ~(11);// 设置EINT1中断为上升沿触发模式 EXTINT  =  0xF;   VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断   VICVectAddr0 = (uint32)IRQ_Eint3; // 设置中断服务程序地址向量 VICVectCntl0 =  0x20 | EINT1_NUM; // 定时器中断通道分配最高优先级(向量控制器) VICVectAddr1 = (uint32)IRQ_Eint1; // 设置中断服务程序地址向量 VICVectCntl1 = 0x20 | EINT1_NUM; // 定时器中断通道分配最高优先级(向量控制器) VICIntEnable  =  EINT1_ENABLE  |  EINT3_ENABLE; // 使能EINT1EINT3中断,EINT3在Bit17,EINT1在bit15上 } /*************************************/ void BEEFON(void) { IO0SET =BEEPCON; } /*************************************/ void BEEFOFF(void) { IO0CLR =BEEPCON; } /*************************************/ void init_system() {  IO0CLR = BEEPCON; IO0DIR = BEEPCON; IO1SET =  LED1; IO1DIR = LED1 ; } /*************************************/ int main (void) { init_system(); Init_EINT(); while(1); return 0; } 上述程序执行结果是,我们先按下KEY1,LED1会亮,当我们再按下KEY3时,即使EINT1中断进入了死循环,因为正确设置了中断嵌套,EINT3可以中断EINT1的服务程序运行自己的中断服务程序,蜂鸣器会响。  写于上海松江 作者:下家山(请尊重原创, 转载请注明)  http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com
  • 热度 20
    2012-8-10 12:16
    3869 次阅读|
    3 个评论
                     RTEMS , 即: 实时多处理器系统( Real Time Executive for Multiprocessor Systems ),是一个 开源的无版税实时嵌入操作系统 RTOS 。 它最早用于美国国防系统,早期的名称为实时**系统(Real Time Executive for Missile Systems),后来改名为实时军用系统 (Real Time Executive for Military Systems) ,现在由OAR公司负责版本的升级与维护。目前无论是航空航天、军工,还是民用领域RTEMS都有着极为广泛的应用。        RTEM是一个非常成功的RTOS,美国国防部开放RTEMS代码已经有10多年了,RTEMS已经在各个领域得到了广泛的应用,目前RTEMS的应用领域包括: 通信 PDA/GBA 航空航天 医疗 科学 机器人 音乐 军事 工业 医疗 下面是RTEMS.com公布的使用RTEMS的系统,可以看成是RTEMS 的经典应用(所有的这些都不是Demo,而是已经商业化的应用,并且经历了长时间的考验)。       通信 1 Zetron Simulcast Paging System 多通信终端同步设备,具体干啥用的我不清楚,反正是一个对时间要求极为严格的同步设备 2 FMVS FDDI-II Voice-Data Backbone FMVS百兆FDDI语音骨干网设备 3 Link Communications Tactical Communications Bridge TCB-2 TCB-2网桥设备 4 Loytec LISA 日本人的ARM通信接口板 6 Advent Networks UAG2xx cable modem 使用ARM构建的CableModem,支持Web管理,地址转换,端口转发等,每秒能处理70,000多个数据包。 PDA/GBA RTEMS GP32 Ports 移植了RTEMS的GBA,使用的处理器是三星的S3C2400系列ARM920T处理器。     航空航天 这个领域可是RTEMS的特长领域,听说中国的神州5号上面有RTEMS,虽然消息的可靠性有待商榷,但是航空工业部有很多项目是基于RTEMS的。 下面是公布的RTEMS应用。 1 Herschel Planck 红外空间望远镜 2008年即将升空的两台望远镜,其中Herschel将会是最大的一台红外空间望远镜。使用了2x4的处理器体系结构。 2 Saab Ericcson Spacecraft Management Unit 萨博-爱立信 飞行器管理单元(爱立信将其航天研发部分出售给了Saab) http://public.ccsds.org/sites/databases/Lists/CCSDSProducts/Attachments/30/Spacecraft_Management_Unit_Saab.pdf 3 金星飞行器 监控金星表层环境的飞行器 http://www.mps.mpg.de/projects/venus-express/vmc/ 。 4 Framing Camera for Dawn 图像处理飞行器。   5 飞行记录仪(黑匣子) 下面的黑匣子是PLR航空工业公司http://www.plris.com 开发的黑匣子,以及其他的飞行检测仪器。 6 EISCAT 欧洲雷达整列控制管理系统,可同时控制多个雷达 7 FedSat 使用RTEMS为核心系统的科学卫星(2002年升空) 8 芯片级卫星Chip Sat Surrey Space Centre 研究中心开发的SoC卫星系统 9 Surrey SSDR 卫星上的飞行记录仪,基于MPC开发,可记录8G的数据。     科学 EPICS EPICS是物理试验与工业控制系统的简称,为分布式的高能物理学试验提供了一系列的控制软件和应用,有vxWroks和RTEMS两个版本以及基于windows的终端界面。使用的设备包括原子加速器、射电望远镜等。通常需要上百个子系统协同工作。   机器人 Fire Marshall Bill 机器人大赛的获奖作品,两轮的机器人,使用M68K + RTEMS,使用两个轮子,能自动平衡,并且有光敏器件,可以趋光。 自动割草机 Hybrid-Z 自动导航系统公司的首创产品,在割草机里面移植了RTEMS,能设定割草的范围,然后他会自己规划割草路线,自动割草,老外也真会偷懒。 音乐 1 Smart Controller 电子音乐创作硬件平台 2 Soundart Chameleon 另一个音乐创作平台,基于冷火和DSP。 军事 防空火箭系统Avenger Forward Air Defense System 这个可是RTEMS的经典应用   工业 SCADA(监控与数据获取系统) 系统 Microsol 开发的SCADA模块使用了MPC处理器,支持远程检测,支持高精度时钟,现场总线等。本来用pSOS的,后来改为RTEMS了。 医疗 Fonix7000 听力测试设备,并可对助听器进行测试。      注明:以上内容,来自Ray的个人网站http://www.rtems.net,我曾经移植rtems到2410的时候还得到过Ray的帮助,这两年没有做rtems相关的项目,也不知rtems在如今发展如何?Ray为rtems在中国的宣传做了很多贡献!很感谢! ======================================================================================= By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城    上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训          
  • 热度 28
    2012-8-6 16:44
    2191 次阅读|
    0 个评论
    LPC1114 系统时钟原理( 作者:下家山(请尊重原创,转载请注明)    http://www.xiajiashan.com   ) 六:主时钟六路输出 主时钟有六路输出,这六路又归纳为四类: 第一类:给系统时钟分频器 第二类:有四路,分别给SSP0外设时钟分频器(SSP0_PCLK)                        UART外设时钟分频器(UART_PCLK)                        SSP1外设时钟分频器(SSP1_PCLK)                        SYSTICK定时器时钟分频器(SYSTICK_timer) 第三类:给看门狗时钟分频器(WDT_PCLK) 第四类:给CLKOUT引脚时钟分频器(CLKOUT pin) 6.1 系统时钟           这里的系统时钟,包括给CPU内核(AHB,APB,Cortex-M0/3 FCLK, HCLK、SysCon 和PMU),ROM,RAM,FLASH;及所有外设如:I2C,GPIO,timer,UART,AD,SPI等共19个。 那么cortex系统是怎么来设计这些时钟系统的呢? 首先,Cortex给这19种时钟的每个时钟设计了一个开关,那么,我们怎么操作这个开关呢?在lpc1114中是通过AHB时钟控制寄存器AHBCLKCTRL来操作的。                       那么,系统时钟从哪里来呢?由图,我们很容易知道,是从主时钟通过“系统时钟分频器”得到。但是,为什么要分频呢?给AHB,APB外设时钟有的不能太快,比如I2C,所以要分频,大家好理解,但是给cortex的核心频率(FCLK,HCLK等)是越快越好啊,为什么还要经过“系统时钟分频器”来分频呢? 我想是为了睡眠状态,低功耗状态,待机状态等需要吧!!!在这个问题上我希望有人加入更深入的研究与讨论,如果哪位有做过相关研究,请补充!!! 6.2外设时钟   这里的外设时钟,指 分别给SSP0外设时钟分频器(SSP0_PCLK)                   UART外设时钟分频器(UART_PCLK)                   SSP1外设时钟分频器(SSP1_PCLK)                   SYSTICK定时器时钟分频器(SYSTICK_timer) 这些外设时钟的输入时钟都来自于主时钟,因为,主时钟很高,有些外设接收不了这么高的时钟,所以要分频! 这里有个疑问,为什么I2C,A/D这些外设没有独立外设时钟分频器呢?(希望有人加入更深入的研究与讨论,如果哪位有做过相关研究,请补充!!!) 为什么UART有16位分频因子还要设计外设时钟分频器呢?(希望有人加入更深入的研究与讨论,如果哪位有做过相关研究,请补充!!!) ======================================================================================= By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城  8/6/2012   上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训        6.3 看门狗时钟   看门狗时钟有三个来源, IRC振荡器; 看门狗振荡器; 主时钟; 具体选择哪个,由WDT 时钟源选择寄存器(WDTCLKSEL)决定!   看门狗时钟源选择后,还要经过一个分频器,当然你可以选择1分频(就是不分频)。 6.4 CLKOUT pin       首先,要搞清楚,什么是CLKOUT pin。CLKOUT pin,就是时钟输出引脚,或者说,在这个引脚上(PIO0_1)引脚上有象晶振一样的波形输出,这个有什么用呢?这个功能太好了,当你要接摄像头,或者视频转换类的芯片,这些芯片的输入频率有时候要根据应用变化,那么我们就可以接到这个引脚,也就是说,我们这个cpu,lpc1114可以提供一个晶振源给外设。 CLKOUT pin的时钟源有四个,分别是: IRC振荡器; 系统振荡器; 看门狗振荡器; 主时钟; 具体选择哪个,由CLKOUT 时钟源选择寄存器(CLKOUTCLKSEL)决定。   选择时钟源后,CLKOUT pin的分频器就不用介绍了吧!!! 索漫赠言: 不要被这些错综复杂的关系搞糊涂,觉得很麻烦就不去理清楚,其实当你试着去理清晰的时候,你会发现很有意思!整个过程也增加了自己探索未知的兴趣!!! 当我把这篇文章写完时,Cortex的时钟系统已经非常清晰,而且已经觉得非常简单!!!   2012-6-19                                    写于上海松江 作者:下家山(请尊重原创, 转载请注明)  http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com