- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二十二 ARM异常处理程序
实验二十二 ARM异常处理程序
1、实验目的
使用SWI异常设计字符串输出程序
设计SWI异常处理程序
2、实验内容
任务一:使用SWI异常设计字符串输出程序
请按以前实验要求创建项目,并添加exp11_1_1.s源文件,文件内容如下:
程序解读:本程序利用SWI异常输出字符串“Hello World”,采用ARMualtor方式调试,选用ARM7TDMI作为目标处理器。
上述程序中SWI 0x123456是对semihost的软中断调用,有关semihost的解释,请参见文档最后的注解
(2)然后阅读代码手工计算每一步的执行结果,并填入表1中(注意只需完成START部分的代码即可)。完成后再通过F10单步运行程序,观察相关寄存器和存储器相应地址上的值的变化情况(注意在遇到BL跳转指令时,用F8进到跳转部分程序)。核对和之前你在表上填的值是否一致。
表1 Exp9_1_1.s 单步运行结果
序号 执行指令 指令执行后的变化情况(用十六进制表示) 寄存器 存储空间 工作模式 R0 R1 R13_svc R14_svc R13_usr R14_usr R15 CPSR 0xF0000000 0 ------- 1 2 3 4 5 6 7 8 9 10 11 12 13
程序正常运行将在Console打印出Hello World字符串。
任务二:设计SWI异常处理程序(ARM9)
此部分程序已提供示例代码,项目位于C:\Program Files\ARM\ADSv1_2\Examples\swi文件夹下
本实验设计的SWI异常处理程序分为两级:第一级SWI异常处理程序获得SWI的功能号,由汇编程序实现;
第二级SWI异常处理程序完成具体的SWI异常操作,由C程序实现。具体实验程序结构如下图所示:
请根据示例代码,分步运行程序,并结合结构图,理解整个程序的流程以及SWI异常的调用,特别是参数的提取,可结合教科书P65关于SWI中断指令的介绍。
附录:
ARM编译器的semihosting(半主机)
Semihosted环境(semihosting是针对ARM目标机的一种机制,它能够根据应用程序代码的输入/输出请求,与运行有调试功能的主机通讯。这种技术允许主机为通常没有输入和输出功能的目标硬件提供主机资源)
在semlhosted环境下用来实现C库函数与目标相关的函数。
可以在你的Application Code中使用printf等stand IO Function in C Library! 方便调试!更多的你可以参考ARM DUI 0058D(Debug Target Guide!)
1、ARM公司对Semihosting的中文解释是半主机机制。为什么叫半主机呢?主要是指应用程序的代码运行在目标系统上,当需要类似PC平台下的控制台输入输出时,会调用Semihosting去利用PC上的控制台输入输出设备:如打开关闭文件,PC显示器输出,键盘输入等等。
2、Semihosting在ADS1.2的开发环境下,只能在以下调试代理上运行,ARMulator, RealMonitor, Multi-ICE以及Angle。这就是为什么周工的EasyJTAG不支持Semihosting的原理,因为它不属于上述四种调试代理中的任何一种。
3、Semihosting是一段功能代码,这段功能代码主要运行在PC上,并由调试工具上的固件来激活调用。而周工的EasyJTAG没有实现这个激活调用功能。
4、对于开发用户来说,Semihosting是目标系统通过调用SWI 0x123456或 SWI 0xAB来调用的。前者ARM状态下的专用操作号,后者是THUMB状态的专用操作号。当开发者的软硬件调试工具配置正确时,可以正确执行Semihosting功能。打个比方说,你在ARMulator下仿真指令
MOV R1, 0x18
SWI 0x123456
ARMulator会正确终止你的程序执行。
而在EasyJTAG下仿真时,却会跳入0x08的异常向量入口处。
您可能关注的文档
最近下载
- 模具模型涂色.pdf VIP
- 《高质量数据集检验检测指标体系要求》.docx VIP
- GB-5023-2008电缆国家标准.docx VIP
- SourceTree:SourceTree基础操作与界面介绍.docx
- 专题07 一元一次方程的解法的五类综合题型(压轴题专项训练)数学人教版2024七年级上册(解析版).docx VIP
- 八年级上册文言文古诗及翻译.doc VIP
- 内蒙古呼和浩特市2024-2025学年七年级上学期期末地理试题(含答案).docx VIP
- 伊莱斯ES2系列伺服驱动器详细说明书(V2.00).pdf
- 监理安全教育记录.docx VIP
- 2026年新版冲刺阶段考公刷题资料.doc
原创力文档


文档评论(0)