《武汉创维特ARM教学系统08嵌入式软件系统设计》由会员分享,可在线阅读,更多相关《武汉创维特ARM教学系统08嵌入式软件系统设计(98页珍藏版)》请在金锄头文库上搜索。
1、酉嘶汀迪否喘玲纷逢谜补岳杠巡赫鸣鸟伸常详坪耸稀蝎匹咐麻欺橇搏尔馆武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计嵌入式系统教案嵌入式系统教案嵌入式系统教案嵌入式系统教案武汉创维特信息技术有限公司武汉创维特信息技术有限公司 7/24/2024础羹忧肛粒所韶骚刊隆尊竿疚缓猴洞好臆怎众羽卵魂佳香昔槛刀绣善代节武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计提纲1 13 32 24 45 5嵌入式软件开发过程ARM软件设计与代码分析ARM软件开发工具ADTIDE简介6 67 7第六章嵌入式软件系统设计静戎材茂般瓣铺
2、诺袖傻桨络虎哥诌蓉饱弛慷脖僻借伍箔酗凰健汲舔护舵防武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计2嵌入式系统软件开发流程q软件需求分析:确定设计任务和目标,并软件需求分析:确定设计任务和目标,并提炼出设计规格说明书,作为正式设计指导提炼出设计规格说明书,作为正式设计指导和验收的标准。和验收的标准。嵌入式软件开发过程q概要设计:描述系统如何实现所述的需概要设计:描述系统如何实现所述的需求,包括软件模块的划分、系统的软件开发求,包括软件模块的划分、系统的软件开发工具选择以及关键问题的论证等。工具选择以及关键问题的论证等。q详细设计:详细描述各个模块的实
3、现方详细设计:详细描述各个模块的实现方法与过程,模块间接口等问题,以作为编码法与过程,模块间接口等问题,以作为编码人员的编码准则。人员的编码准则。q编码编码城脱盔沿侍使唁紫吱宅刊氦汪右症绊誉柿庇误搬序渐峻溢唱惜争碘蜗本绍武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计3嵌入式系统的开发流程q单元调试:编码完成后,对各个模块进行单元调试,单元调试:编码完成后,对各个模块进行单元调试,以保证模块正常工作。以保证模块正常工作。嵌入式软件开发过程q集成调试集成调试吗筐草蒙姬粹九蒜孽纱睁绊变咐喂砚舶佬恃斩狠襄崭氰皑汁噬嗽兄侠涟师武汉创维特ARM教学系统08嵌入
4、式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计4ARM主流开发工具qWindows操作系统ARMADS/SDT+调试器GNU+Cygwin+调试器ARMSDT+简易电缆qLinux操作系统GNU+GDBARM软件开发工具ADT IDE简介谷杀妆炳秩旨导异凳坚汇臂抿拴挖烯咒靡乔项秉陡门姥烃羹瑶我浚霜铭毫武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计5常用调试方法q软件仿真q驻留监控程序硬件要求高,一般在硬件稳定之后进行需要占用目标板上的一部分资源不能对程序的全速运行进行完全仿真qJTAG仿真器完全非插入式调试,不使用片上资源,无需目标存
5、储器,不占用目标系统的任何端口仿真效果更加接近于目标硬件q在线仿真器ARM软件开发工具ADT IDE简介某妙哥即翰荐种贩槽弥吩菠腥逛哪挞哉党时援轻哀字荆释窍无喧邓瓣内梭武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计6ADTforARM集成开发系统ARM软件开发工具ADT IDE简介闰记欣镐氏删抨旦掳垮漓过贮抵锑建田哨病堂衔搅剿字于士朴疹壤骂奋褒武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计7ADT1000EmulatorforARMARM软件开发工具ADT IDE简介墩茹兑笆痢征迈尚仔霜阿陌屿租启矾寐逢
6、鸦谅谴抑恰句塌艳瞩之菜新呕诱武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计8ADT1000EmulatorforARMARM软件开发工具ADT IDE简介qADT Emulator for ARMADT Emulator for ARM是连接主机核目标机之间的硬是连接主机核目标机之间的硬件设备,它实现件设备,它实现ADT IDE for ARMADT IDE for ARM与目标机之间的连接。与目标机之间的连接。q它具有如下特征:它具有如下特征:支持支持ARMARM核核CPUCPU非插入式调试,无需目标存储器,不占用目标系统的任何端非插入式调试,无
7、需目标存储器,不占用目标系统的任何端口口2.5V/3.3V/5V2.5V/3.3V/5V兼容电平接口兼容电平接口支持标准的支持标准的14/2014/20针针JTAGJTAG接口接口运行状态指示运行状态指示与主机之间通过并口连接与主机之间通过并口连接下载速度达到下载速度达到25Kbytes/S25Kbytes/S录啄窿求搪淄琵泊泊饱隙购捅贝冬三爱柔塞青愉先司腊宽炭戚撤变使漳特武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计9ADTIDEforARMARM软件开发工具ADT IDE简介殃莲恬殊晨捻爹启潞辟毖纷喀团茅薪季晚品梆划栖慨矮遇雍夯木邱梯春浮武汉创
8、维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计10ADTIDEforARM主要特征可视化编程环境ARM软件开发工具ADT IDE简介q支持支持ARM7ARM7、ARM9ARM9、SecurCoreSecurCore等。等。q运行于运行于Windows98 Windows98 、NTNT、20002000、XPXP等平台。等平台。q中文、英文版本支持中文、英文版本支持q可视化的源码编辑和工程管理功能可视化的源码编辑和工程管理功能q界面友好,使用方便:类似界面友好,使用方便:类似MS Visual StudioMS Visual Studio的用户的用户界面
9、,支持打印功能,支持文件内查找功能和界面,支持打印功能,支持文件内查找功能和Find in Find in FilesFiles功能功能威门棵谦让锭令巧误辛兰缆泵婶祭绦妆梳校希纲坛茫系档魔泼肥飘舰豌谢武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计11ADTIDEforARM主要特征可视化编程环境ARM软件开发工具ADT IDE简介q工程管理器:工程管理器:ADT IDEADT IDE提供图形化的工程管理工具,提供图形化的工程管理工具,实现文件级、文件目录级、工程级的多级编译连接选项实现文件级、文件目录级、工程级的多级编译连接选项管理以及工程级的调试
10、参数管理管理以及工程级的调试参数管理q源码编辑器:支持标准的文本编辑功能,支持源码编辑器:支持标准的文本编辑功能,支持C C语言、语言、汇编语言语法高亮显示汇编语言语法高亮显示q辅助编辑工具:提供一系列辅助编辑工具,方便开发辅助编辑工具:提供一系列辅助编辑工具,方便开发人员。包括:多剪贴板工具、代码模板工具、头文件和人员。包括:多剪贴板工具、代码模板工具、头文件和源文件切换工具、注释工具、符号配对书写工具等多种源文件切换工具、注释工具、符号配对书写工具等多种辅助编辑工具。辅助编辑工具。奢补饿儒酬淀嵌尧迫惟艳哲岸脆碎谎腥硼钟捕汝诅姑伊豪量咒窿躺锅嚣本武汉创维特ARM教学系统08嵌入式软件系统设计
11、武汉创维特ARM教学系统08嵌入式软件系统设计12ADTIDEforARM主要特征交叉编译功能ARM软件开发工具ADT IDE简介q支持开发语言:支持开发语言:ANSI CANSI C;Embedded C+Embedded C+;汇编语言;汇编语言q编译工具:使用著名优秀自由软件编译工具:使用著名优秀自由软件GNUGNU的的GCCGCC交叉编译交叉编译工具,并经过优化和严格测试,支持工具,并经过优化和严格测试,支持C C语言、汇编语言等语言、汇编语言等q编译参数设置:完全图形界面方式的编译参数设置,编译参数设置:完全图形界面方式的编译参数设置,提供可视化的设置功能。支持工程级、文件目录级、文
12、提供可视化的设置功能。支持工程级、文件目录级、文件级编译参数设置件级编译参数设置蜜鞍耍保揭忙十枯胯缆近屁滓涤划吝瓦慧踞史磺秩古颊辟皮裴紫缠番友痛武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计13ADTIDEforARM主要特征调试功能ARM软件开发工具ADT IDE简介q同时提供了图形和命令行两种调试方式同时提供了图形和命令行两种调试方式q程序的单步执行程序的单步执行q程序下载程序下载q存储区下载和上载功能。存储区下载和上载功能。q工程级调试参数管理工程级调试参数管理q支持源程序、反汇编程序和混合窗口显示,支持支持源程序、反汇编程序和混合窗口显示,
13、支持ARM/THUMBARM/THUMB方式显示方式显示q具有与具有与MS Visual StudioMS Visual Studio类似的调试菜单功能:类似的调试菜单功能:GoGo,StopStop,ResetReset,RestartRestart,Step intoStep into,Step overStep over,Step Step outout,Run to CursorRun to Cursor等等q丰富的示例程序丰富的示例程序错肌验会嘲谗篆炎棺冕桥郸碎迫糜鹃疏既簿毯捡彰圈镊弛泳唉蠕斯姬蛤氛武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系
14、统设计14ADTIDEforARM主要特征调试功能ARM软件开发工具ADT IDE简介q断点功能:支持软件断点和硬件断点,实现断点设置、断点功能:支持软件断点和硬件断点,实现断点设置、断点屏蔽、断点取消、断点列表等功能断点屏蔽、断点取消、断点列表等功能q变量监视功能:随程序运行同步更新变量,即时修改变量监视功能:随程序运行同步更新变量,即时修改变量值,可设置自动变量值,可设置自动/ /手动刷新方式、十进制手动刷新方式、十进制/ /十六进制十六进制显示显示qARMARM各种模式的寄存器即时查看与修改,当前模式指各种模式的寄存器即时查看与修改,当前模式指示,寄存器值修改时红色突显示,寄存器值修改时
15、红色突显q存储器查看与修改,可设置自动存储器查看与修改,可设置自动/ /手动刷新方式、字手动刷新方式、字节节/ /双字节双字节/ /四字节显示、大四字节显示、大/ /小端方式显示,存储器值修小端方式显示,存储器值修改时红色突显改时红色突显屑悍猩镊业垮麻鳞狠紧丧乌蒂晚宗彩誓啪屑崔除领唆忽锈兄沤蚤跑车蒜缘武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计15ADTIDEforARM主要特征调试功能ARM软件开发工具ADT IDE简介q函数堆栈显示,可设置自动函数堆栈显示,可设置自动/ /手动刷新方式、十进制手动刷新方式、十进制/ /十六进制显示、参数值显示
16、,参数类型显示十六进制显示、参数值显示,参数类型显示q板上寄存器板上寄存器(On Board Register)(On Board Register)的查看和修改,可的查看和修改,可以查看支持以查看支持CPUCPU的所有板上寄存器的具体意义、当前值、的所有板上寄存器的具体意义、当前值、各个位的意义,可设置自动各个位的意义,可设置自动/ /手动刷新方式、二进制手动刷新方式、二进制/ /十十进制进制/ /十六进制显示、大十六进制显示、大/ /小端方式显示,支持十进制小端方式显示,支持十进制/ /十十六进制方式修改寄存器值,寄存器值修改时红色突显。六进制方式修改寄存器值,寄存器值修改时红色突显。qf
17、lashflash在线编程器,支持对多种在线编程器,支持对多种flashflash芯片的空白检查、芯片的空白检查、擦除、编程、校验等操作,支持单一操作和自动操作两擦除、编程、校验等操作,支持单一操作和自动操作两种操作方式,支持种操作方式,支持8/16/328/16/32位位flashflash访问宽度,支持多片访问宽度,支持多片flashflash同时编程,编程速度达同时编程,编程速度达15Kbytes/s15Kbytes/s。提供统一的。提供统一的flashflash编程接口,可以方便地添加编程接口,可以方便地添加flashflash编程方案。编程方案。而钵宫宣赔线曲展斤谆严月玛伪隔制捕涉胁
18、算玉憋母敦祟茵誊苦般人拒无武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计16ADTIDEforARMARM软件开发工具ADT IDE简介ADTIDE(Arm7Lpt、Arm9Lpt、SoftSim、Arm7Simple)用户手册、编程指南丰富例程团让汲怜痘傈篓汛缺妹矮松腰态嵌竟衬船身恍夸松谷根移驯杜哨瘫牧戮区武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计17多版本支持ARM软件开发工具ADT IDE简介软件仿真版本软件仿真版本ARM7ARM7版本版本ARM9ARM9版本版本简易仿真版本简易仿真版本睁掇潍
19、盂勋娇峪黄畸貌韭扮规裁咸焰评剐酚舔果淫泊药御防染亲忧痢残忻武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计18多工程管理ARM软件开发工具ADT IDE简介工程工程当前活动工程当前活动工程嘿险穗歌痕峙魔刷欲民盒捣娃汝粹袖迪侍辆咯蜕除敬愁倘旦胞宠掠啸啡手武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计19可视化编辑器ARM软件开发工具ADT IDE简介编辑菜单编辑菜单语法高亮编辑器语法高亮编辑器辅助编辑工具条辅助编辑工具条书签蟹耿慷钦破碉怜佑脐册其瘫丽遵寐跃闲东支料阎炮迅骄苫虑钧癌脓任灌泊武汉创维特ARM教学
20、系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计20GCC交叉编译ARM软件开发工具ADT IDE简介编译菜单编译工具条编译结果输出错误定位债莹奏齐狱谆栏溉侮罕勘淬臀捞基抱甸末怒之薛槐懒匪转轻财盆北较缉您武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计21编译器设置ARM软件开发工具ADT IDE简介多配置管理多工程设管理多参数配置脉胎孩竞棠枚淤斩馒势退嘎洞滓肆琉迟疑竭中怒箔皑迎零危行停堂应膘锹武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计22汇编器设置ARM软件开发工具ADT I
21、DE简介多配置管理多工程设管理多参数配置蛰祷脱屿职屹咖京拣待侨必语帖霄洛赔该遮励喧草涩奢半统速窝仍栗削哎武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计23连接器设置ARM软件开发工具ADT IDE简介多配置管理多工程设管理多参数配置爽测引躲敛遁九昼辅政逗冰蔗闻感掉浴昭缠悉嗓涡联兜寝算祝由倡捅归涅武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计24调试功能ARM软件开发工具ADT IDE简介调试菜单调试工具条命令行调试窗口捻谗祖切咀引珐疆漆旱酉诸抹囚蛮喊木矗溉津帖查矗允吞杂鲤健讯丽封鼻武汉创维特ARM教学系
22、统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计25多种调试模式ARM软件开发工具ADT IDE简介源码模式混合模式汇编模式坚麦准寨九啮敛掏懂二卞瓦砖伏灼省赞氯疲氯蔫筏饺妻涅挺钮控侦郁迭儿武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计26断点ARM软件开发工具ADT IDE简介断点列表断点绦诅碳援隋煤陪街乓娄粟买后面抵挥榷碱狸沾柏卷篇倍驴举莫邯爆酿斜艾武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计27存储器窗口ARM软件开发工具ADT IDE简介字模式半字模式字节模式修改凸显标记六
23、示垦垫歉暴罐及迅红糕毙执辖憨匡聘拒铃邀汾追舶遗辛罢源枣员讲宛卵武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计28存储区上载下载功能ARM软件开发工具ADT IDE简介存储区上载存储区下载页凝贿同谰荣穗领狡明筹彰杰凸枯沽滴框审疮若地蔷鲍陀牙驹立函赊瘴烷武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计29寄存器观察窗口ARM软件开发工具ADT IDE简介多模式寄存器显示修改凸显标记郴麓恐短豢汲死希芹娘絮渍裁窍顾脯得慕绎贪磕堡苟进沮簿瞩植捡叮洲癸武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学
24、系统08嵌入式软件系统设计30函数调用栈窗口ARM软件开发工具ADT IDE简介函数调用栈闯部盐剁月律淫撅边帝旷陡揽座酸峰荡栅丁呆辆镭劣矫镁谆内链办孕帽驳武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计31变量观察窗口ARM软件开发工具ADT IDE简介局部变量全局变量多个观察窗口朵晦袄胜聘法米向棕拿挑赣武懊迟亢钩厘横景戍突聊褪哎尿殊幕溺蛹技整武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计32命令窗口ARM软件开发工具ADT IDE简介姻鸭锭冉毫惕而茨子兢骋仍水剐惜衙族裂攀基恋瓤足抵裳肩睁泳己娶勋牟武汉创
25、维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计33单步调试STEPINTOARM软件开发工具ADT IDE简介牧文呢言呵闰栈气稗液惟括荧负鸦纯糖休足拨绥靡迹浚踢妆悍狼葬闷恐烃武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计34单步调试STEPOVERARM软件开发工具ADT IDE简介蓟堆脉止庆洽弱务瘫瓢击餐着图惯双蔽梗殷旗替撬善校攒顺霸棠羔摩愤镑武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计35单步调试STEPOUTARM软件开发工具ADT IDE简介次赚舒嘴如略
26、桔奄茹口滋次勿斜狙去锑蒋泪景娠枪窗沧吟峦黄哲啃绢皂茅武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计36单步调试RUNTOCURSORARM软件开发工具ADT IDE简介灯艳秽拂敬之羽口戏际伯尉外析接诡较碘狡槐逃掸岭驮存贬氓饼尚载曰琼武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计37板上寄存器ARM软件开发工具ADT IDE简介寄存器组寄存器寄存器位域热点描述信息修改凸显标记之掀提浩债桃扳御值县闹郊庐诧勉菏站椿拙焉萝土较柱三肉谩计行灾仁苑武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系
27、统08嵌入式软件系统设计38板上寄存器ARM软件开发工具ADT IDE简介雍倾琴哲柯大腰贮番赶持争般孪篮肖绦娄愿劲饼辑由起霹肯谷稻杰舔邓宫武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计39FLASH在线编程器ARM软件开发工具ADT IDE简介浓犊孽缠纬芦喉沧帝仗泳薪警秃盼易伪琼焊睫铀亭证惭黔脱蔫苟厚致峨炕武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计40工具菜单ARM软件开发工具ADT IDE简介可自定制俭鲸垢剪换巧情骄车巳温猖樟徘稽茅菜抬它焕佯苟缝上妮葫雏劈新刁条瓤武汉创维特ARM教学系统08嵌入式
28、软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计41在线帮助ARM软件开发工具ADT IDE简介舷经不涩彰泅达协踏虞淘转早嚎哑萨滚拎列炼爱板口腰泞愤做雀母附苯家武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计42嵌入式软件开发q无操作系统的软件开发启动代码应用程序q基于操作系统的软件开发bootloader操作系统移植BSP板级支持包应用程序开发ARM软件设计与代码分析焙塘辽嘶荐粳挠娘庞显猩贼囱龙焚旭蓬炉快习智困书哉撒舍做蹿撅棍板炽武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计43启动代码q功能
29、硬件初始化引导C代码q特征通常用汇编语言编写程序复位运行入口点代码量非常小q程序流程设置中断、异常入口关中断硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)初始化栈指针数据区初始化C入口函数调用BLMainARM软件设计与代码分析囱氢猜洛污魄别沽闰净肢抑损显丘陡尖织返酶瘤彰裤茄润辑卷牺散椎砌饿武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计44应用程序(无操作系统)q功能硬件驱动应用q特征通常用C语言或者嵌入式汇编语言编写程序较复杂,代码量较大ARM软件设计与代码分析驴蠢缨杜揩绚沸服夯这泞蚁整谋腹擞微缨裙扔跳魏奏挟选趾炙克纶盔掐冬武汉创维特AR
30、M教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计45bootloaderq功能硬件初始化引导操作系统下载程序(串口、网口、USB)烧写flashq特征程序复位运行入口点通常用汇编语言+C语言编写代码量较小ARM软件设计与代码分析兰槐全傀是字嘿亩得降蝗墙墒叁裔皱污意凛配赛日藐佛窗铣戍妖厅虐门迭武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计46嵌入式操作系统移植qLinuxqWindowsCEquC/OSIIquClinuxqNucleusARM软件设计与代码分析粮衍戊闲眼染校佯洪鱼蚤差向咨趁傅衍炊终辰净兢揭垛垛藻娜侧贰阳
31、辛捞武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计47BSP板级支持包q功能为应用程序提供统一的硬件操作接口q特征高度硬件相关高度依赖于具体硬件平台各种操作系统各异ARM软件设计与代码分析颗虏再逾守桔郡霉思计孪躺粕柄檀茫姻生颤险械谗呈划呢费雹磅剩晌砒资武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计48应用程序开发(操作系统)q功能GUI图形、人机交互控制算法q特征硬件依赖程度小部分可仿真调试各种操作系统各异ARM软件设计与代码分析晨挝坑蜂溺欠领精钓连包嘴早护郊绑肛需穗吸刻凹凌榴搜捷皿镰仅禽汞镜武汉创维特
32、ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计49嵌入式软件设计和调试流程q编辑创建工程添加文件、编写程序汇编语言加C语言q编译配置编译、汇编和连接参数编写连接脚本文件编译q调试连接调试器下载程序运行、调试q固化通过仿真器烧写flash专用或通用的编程器通过bootloader烧写flashARM软件设计与代码分析豌榜字谅锻驼肘拉忌绢置苛夺狸斧头酬配拓舀除芒刁遁檬巾显耗监碳份单武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计50交叉编译qGNU交叉编译编译.carm-elf-gcc汇编.Sarm-elf-gas连接
33、.oarm-elf-ldq操作文件汇编文件.SC文件.c链接脚本文件ldscript库文件.o.lib.aq生成调试格式文件.elfDWARF-1DWARF-2q生成bin文件elf2binarm-elf-objcopyARM软件设计与代码分析阅趟佯怂郧舜鸵剂笑始峻柏竹藉油每定哀帆炭迢拙州荫往彪战捧揩命您撬武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计51链接脚本q段Text段rodata段data段bss段q符号Image_RO_LimitImage_RW_BaseImage_ZI_BaseImage_ZI_LimitqGCC库专用q调试信息AR
34、M软件设计与代码分析章陛亩垛搅撬班衫巴左菱框奴栓涉戌接蕾谴叫狭邻台鱼茂芝州岸装辞浓糙武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计52链接脚本示例q程序在SDRAM中运行q程序在FLASH中运行ARM软件设计与代码分析棚刺海碗滴旦洪短羹俏伍厢疟扇殆肘伙丑稚了辣酝明执拜吩米谚笔诈谰瞬武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计53GCC库qGCC库标准C函数库lib.a-lc标准数学函数库libm.a-lm标准函数库的支持库libg.a-lgGCC的支持库libgcc.a-lgccq链接排列顺序-lml
35、clgcc-lgARM软件设计与代码分析乃腥撕年飘藏丫焚溉捞腿糕捉蜒昧搏缅芝丛溺等卓姆枣估狱缘俩公聊笼淮武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计54JX44B0启动代码分析ARM软件设计与代码分析q在基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。q它通常也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。q用汇编语言编写。q启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始化硬件设备、建立内存空间的
36、映射图(JX44B0不需要),从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。瓦实拉顺沁日殴途院享耕栈徊烦画镐盐奏折魄烬怖溅谭孽犁奈缄团盏治犹武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计55启动代码的移植和修改ARM软件设计与代码分析q启动代码除了依赖于CPU的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。q对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在
37、另一块板子上,也还是需要作一些必要的修改。勘具膜略务瑞篙毫馁宙蝗鲤臣呕熊馆脂噶曰砒姬押棚凿茂硫糠渣我嵌貌太武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计56启动代码流程图q启动代码的功能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。q注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;ARM软件设计与代码分析赛莹流炼玻炼漂挤宽线改轰阜桥炭莲藉手疹蛔坛辛镶蕾咐厌喀远瘫硬激佩武汉创维特ARM教学系统08嵌入式软件系统设计武汉
38、创维特ARM教学系统08嵌入式软件系统设计57设置中断向量表q该段向量表除了复位异常外,只有位于0地址处有效,也就是必须将该段代码烧写到FLASH中。q复位异常直接跳转到ResetHandler处,它是相对跳转,位置无关。q其余的异常将跳转到0c000008+向量地址的位置,使用绝对跳转。ARM软件设计与代码分析强羽面恢拇闸器孕瑶睹面碳猩议摘横狮瓮姓次焙恫呆赎耗娇野柜蓉哀乙惹武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计58复位入口:切换到超级模式q系统复位成功后,将自动进入SVC模式q在初始化之前必须关闭中断,以免引起异常LOCKOUT:0xc0
39、Bit6,7=1MODE_MASK:0x1fSUP_MODE:0x13ARM软件设计与代码分析止轿妒嘶俞降埔辐惟闹硒行阳叶扭刃社柜挪软甩敛癣花括奸唉剩琉苫撬婉武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计59设置中断模式并禁止中断q设置S3C44B0INTCON寄存器q缺省值为0x07,可以不作该工作0x01e000000x01e00000ARM软件设计与代码分析差穷豢孔免意密暑汝兴宛秘炒棱爬狗贾储撂烯虽豢氟撵讽孰杉档烬台糟悲武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计60关闭看门狗q设置S3C44B
40、0WTCON寄存器q必须设置0x01e000000x01d30000ARM软件设计与代码分析萝盔妮凯揍巍虐喇速腻适牵刘颂豌俘水艺秦挥劣绪默时谱烤肪芒甭泌主炕武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计61系统配置寄存器q使能回写bufferq打开Cache0x01e000000x01c00000ARM软件设计与代码分析抨角获譬键滑舌目剐影简厦绅牡脆蒲狄挎虾忆熬暗澳柯野克钡粥柞嗡搅踪武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计62设置非Cache区域q使能回写bufferq打开Cache00x0b00
41、00000c70000000xc7320000ARM软件设计与代码分析篱脂昏披杀丁易胶掳菌猾螟柒物娜窟侥懈拦博缮旭阐星任庄祝浇互瀑扳链武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计63端口设置ARM软件设计与代码分析闲饰溪业春捡卉易恿梗恋思毙置颂厨鬃舱焕尚设层涛稗俘剔氯沃心潞迪呸武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计64设置外部中断的触发方式0x01e000000x01d20050ARM软件设计与代码分析放裔平辉体酷饵窃镁枫蜕抡严亡勇经蛊目瓤瞅税真报鲤硝项碱早跃穴颇事武汉创维特ARM教学系统08
42、嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计65配置总线访问宽度ARM软件设计与代码分析竟凌鹿毡咕白缅盆初袋窃腥瞄兰摸季米胯奢坑仲渠欣撼惜总衡戊粒亨肄硕武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计66配置总线访问时序ARM软件设计与代码分析般出介瞪淖褒诛劝拇娜拜彪胸假裤私月砖毫尧照夺穗掩廓掇岛姑驶寸烈察武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计67C代码初始化ARM软件设计与代码分析鱼糙已员较率妹储武坊牛掇促聋公迫牧宵偷熙俘嫁想蛹订租介候牌酶躇辗武汉创维特ARM教学系统08嵌入
43、式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计68堆栈初始化ARM软件设计与代码分析榨债钱挥旨持绦依坍席达冲出览托懈抱顽益蹋刑韦蒜丹暖霹店穿殖策贴咸武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计69跳转到C入口函数ARM软件设计与代码分析蔑霓汐慢灵睫播迸文献煮春哲线胜简示起废荷擞哪撂摈多岳档觅透坍届寂武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计70JX44B0BOOTLOADER分析ARM软件设计与代码分析qBootLoader是在启动代码的基础之上,通常启动代码包含于BootLoade
44、r之中qBootLoader常用于引导操作系统或者应用程序qBootLoader可以包含一些简单的调试手段臀卤垛裤坪妄幽泛抨婚析猎暖困幼允咽恨例藐曹阂泻涅率纹灸猴宾绳豢旋武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计71BootLoader的基本概念qBootLoader是系统加电后运行的第一段软件代码。q嵌入式系统中,整个系统的加载启动任务完全由 BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。q
45、简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如S3C44B0),从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。q通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的 BootLoader 是很困难的。ARM软件设计与代码分析峦足贸负绰由惧盐锐宁蝶淌邀带汐丑宫喳录聋密戈鸡埂蓝磐豢合卧砸澈谩武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软
46、件系统设计72BootLoader的移植和修改qBootLoader除了依赖于 CPU 的体系结构外,BootLoader 实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。q对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。 ARM软件设计与代码分析孩阜畜熬涝男往撮太旁欺酋仪各亏哟荡慕瑶芬阜茬戌晚廉宣旺淋两科湿招武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式
47、软件系统设计73BootLoader的安装q系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C44B0在复位时都从地址 0x00000000 取它的第一条指令。q嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。q也就是说对于基于S3C44B0的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。ARM软件设计与代码分析式居理珍铡嚼骑超势梅戴虏昔以汝耀荚残看扣辅辨全操父突肉胯巡我漳串
48、武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计74用来控制BootLoader的设备或机制q串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader 程序在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。ARM软件设计与代码分析抖保呜退最埃渔寝泻矫敝觅毒食硫孙尊桥长眼幕荤拭萤痊锑辨匙蜕沂栽艾武汉创维特ARM教学系统08
49、嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计75BootLoader的操作模式q启动加载模式:这种模式也称为自主(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。 q下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被 BootLoader写到目标机上的固态存储设备中。B
50、ootLoader 的这种模式通常在系统更新时使用。工作于这种模式下的 BootLoader 通常都会向它的终端用户提供一个简单的命令行接口。 q在教学系统中提供的BootLoader中没有实现自主模式,可以通过修改代码来实现该功能。ARM软件设计与代码分析烦饼冻齐龄诣荤贞磷蔷丁戏稀兽镀帖喊莆剪涨砌箍永积茅袄肘植漓矾碰嗓武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计76BootLoader与主机间文件传输的通信设备及协议q最常见的情况就是,目标机上的 Boot Loader 通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口
51、上也可以采用xmodemymodemzmodem 协议以及q在以太网上采用TFTP协议。ARM软件设计与代码分析磅矛匪略刹胃瓮舅踢定棵爸改逞岁肄淮箭寻啸忍碎这励伶馏驮奢喻皂均疡武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计77BootLoader的主要任务与典型结构框架q从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。 q大多数BootLoader都分为stage1和stage2两大部分。q依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前
52、面说的启动代码。q而stage2 则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。 ARM软件设计与代码分析极终赌扔耀瞒硕刃之锄浸枣妻橱哈肃蕊嘛万围吊败冲诌记叶阴目付孜会或武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计78BootLoader的主要任务与典型结构框架qBootLoader的stage1通常包括以下步骤为加载 BootLoader 的 stage2 准备 RAM 空间拷贝 BootLoader 的 stage2 到 RAM 空间中设置好堆栈跳转到 stage2 的 C 入口点qBootLoader的
53、stage2通常包括以下步骤初始化本阶段要使用到的硬件设备调用应用程序或启动内核ARM软件设计与代码分析灵硷侮唯俊惺赘娠松蕊凳袖籍尚痈纤拳缚拉友砷荫厂靳前疡菜妄重能逗脯武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计79Stage1初始化流程图qstage 1的功能: RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage 2。q注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;ARM软件设计与代码分析孤佯簿涝弄访蛆晒锈凿厉刊来
54、绢群久棋慑刮一突禁好竣止刑鞠探轴榴重展武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计80Stage2流程图qstage 2的功能:初始化串口,显示菜单,通过菜单获取用户输入,并执行相应的操作。ARM软件设计与代码分析皖向荐本眼之巧婴欣衣刘哀翱斡雹蒋溅干朴苔剐涉闹桃锨壁套酗绣妖滴喉武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计81Bootloader更新程序流程图q通过BootLoader更新程序的流程。注意为了使用Bootloader更新FLASH中的程序,需要首先将Bootloader搬迁到RAM中运
55、行。ARM软件设计与代码分析豁嫌柑禄身跌汉扑榷蛙咒凌鼓瑞隋枣鬼零伪祭砧昨卖圃杜决洼炎郡火役酋武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计82嵌入式实时操作系统ARM软件设计与代码分析q将在后面介绍炯瞪从延恍坍树凸侍撬醒程妒刃轿缅泻堆川养嵌绸虱董赌斤兔恶膏哼樟缝武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计83板级支持包ARM软件设计与代码分析qBSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。剥脚味
56、底冗易蓝肖和禁递兹唇际斜案奔堰须均归抚呢咙业浪胺誓尊惶这嗡武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计84板级支持包的特点ARM软件设计与代码分析q硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。q操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。锄船疆棉暂娇馏风扩函搂腹或小喘籍店拐惦开讯补蝇拭锗至态危勿盐轿砰武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计85板
57、级支持包的功能ARM软件设计与代码分析亨聪狭敏发以杉镇譬喂瘁缚擞熏荒橱侯俊桃齿衫上内珍寨役沃蛔麻蟹妹褥武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计86板级支持包的功能ARM软件设计与代码分析q嵌入式系统初始化v片级初始化v板级初始化v系统级初始化q硬件相关的设备驱动程序 和BootLoader存在一定的重叠讲忿邵融瘫嫉谤景甘菜饵痢钡屑嘱温碳浙浴途猜捎幸绊锣祸括嚷尾热锌孰武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计87系统级初始化ARM软件设计与代码分析q这是一个以软件初始化为主的过程,主要进行操作系
58、统初始化。BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。历你班钩惕快锦废服谢绅折俗宙烤腻甜瘩熬徐哩篙隧榜赚疙哪蹲棒鄙绦信武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计88硬件相关的驱动程序ARM软件设计与代码分析q与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。q尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不
59、直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。狰豁赠叮蔼乳蹭笑黔冬奶垛澎霹田倒皖曝辑小纂绒昭逆骤拭肺煌钨华慷疾武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计89JX44B0应用代码设计及中断处理ARM软件设计与代码分析q连接脚本连接脚本授努慨雇雌棠柳昭铱琴卧闺商述孽坝拌栗本卿左劫幕乍珠荣窗双捐鸣驴值武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计90JX44B0应用代码中断向量ARM软件设计与代
60、码分析q起始地址起始地址0x0c0000080x0c000008q除复位异常外,其余异常入口地址由除复位异常外,其余异常入口地址由FLASHFLASH跳跳转得到转得到致狈兜吞及掂已停混蛀烽哺抹袖意乳娜素禄奇安保桔确腋胸郝妆混泰竣熔武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计91JX44B0中断处理流程执行0x18处指令:LDR pc, = 0x0c000020,由Bootloader控制执行0x0c000020处指令:HandlerIRQ,ramstart.s执行HandlerIRQ,ramstart.s执行HandleIRQ处保存的中断分发例程
61、,ramstart.s中初始化为IsrIRQARM软件设计与代码分析坡渡询啤苟政亭吁伦屹英陌佬歼仆浸侨慢虏棱隧剑馈赂皂身丁驮妖翱音凌武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计92用汇编代码编写的中断分发例程q保护现场IsrIRQ:/*usingI_ISPRregister.*/sublr,lr,#4stmfdsp!,lr/*保存中断返回的PC值*/stmfdsp!,r0-r4/*备份寄存器R0-R4*/subsp,sp,#4/*为PC预留栈空间*/stmfdsp!,r8-r9/*备份寄存器R8-R9*/ldrr9,=I_ISPR/*读取中断状态
62、*/ldrr9,r9qR9中保存中断状态ARM软件设计与代码分析御澜砌凉侗驭氏腿拨舞岩阎树滴珐鸯控低钱漱磕升翅伊关弘掂月仇赊矽敞武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计93用汇编代码编写的中断分发例程q寻找中断源cmpr9,#0x0/*检查中断状态*/beqi2movr8,#0x0/*R8保存中断表的偏移*/i0:/*逐位检查中断状态*/movsr9,r9,lsr#1bcsi1/*如果该位等于1,则处理这一中断*/addr8,r8,#4/*修改当前的中断偏移*/bi0/*处理下一比特*/q找到中断则跳转到i1,R8保存找到的中断偏移q未找到中
63、断则跳转到i2ARM软件设计与代码分析将栓竞氧块咎域谬彪棺靴抒赎挎蘑杆恢数半做蚊缆妓露巨赛诵够笼雷萤棵武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计94用汇编代码编写的中断分发例程q处理中断并返回i1:ldrr9,=HandleADC/*HandleADC位于中断向量表起始位置,我们将该地址用作是中断向量表的基地址*/addr9,r9,r8/*计算入口地址指针:中断基地址加上偏移*/ldrr9,r9/*从地址向量表中获取入口地址*/strr9,sp,#8/*将入口地址保存到堆栈,并移动堆栈指针*/movlr,pc/*保存当前PC*/ldmfdsp!
64、,r8-r9,pc/*调用中断例程*/ldmfdsp!,r0-r4,pc/*中断返回,并恢复中断前的处理器模式*/i2:ldmfdsp!,r8-r9/*如果当前没有任何中断,直接返回*/addsp,sp,#4/*移动堆栈指针,该空间由第4句指令预留*/ldmfdsp!,r0-r4,pc/*中断返回,并恢复中断前的处理器模式*/ARM软件设计与代码分析器肪赶追谢刑删看集框栏侮济牛壳侧证信话膀事肚穗涩谴烘桃纸杜嘴助悠武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计95用C代码编写的中断分发例程q函数声明typedef(*ISR_ROUTINE_ENTRY
65、)(void);voidIsrIRQ()_attribute_(interrupt(IRQ);ARM软件设计与代码分析腐觅摹债敌乏陈从糖涟道质残刽侗凿描芬激茸滑却锦胳惶嫡你后伐泞悉做武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计96用C代码编写的中断分发例程q函数实现voidIsrIRQ()intcount=0;unsignedintisr_pending;unsignedintisr_mask=0x00000001;unsignedintisr_mask_set=rINTMSK;/*读取中断掩码*/ISR_ROUTINE_ENTRYisr_rou
66、tine_entry=(ISR_ROUTINE_ENTRY)0x0;isr_pending=(rINTPND&isr_mask_set);/*读取中断状态*/*查表*/while(isr_mask)if(isr_pending&isr_mask)/*找到中断源,获取中断例程入口地址*/isr_routine_entry=(ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count);break;count+=4;isr_mask=1;/*调用中断服务例程*/if(isr_routine_entry)(*isr_routine_entry)();ARM软件设计与代码分析任强蹲灌向英嚏幢蝗茹绷搁每焦馁戏递邱剪赦故无懈端章搪梁怨豁扬狐冻武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计97中断处理例程q注册例程*(unsignedint*)(HandleEINT0)=(unsignedint)EINT0_Isr;q函数实现voidEINT0_Isr()rI_ISPC=BIT_EINT0;/*清除中断标志*/ARM软件设计与代码分析厕舀豆仪析觅窃址扼蒋邮序屠切岔粮赫前咖秽木且暇隋邑誓散价瑶巾寺钧武汉创维特ARM教学系统08嵌入式软件系统设计武汉创维特ARM教学系统08嵌入式软件系统设计98