嵌入式系统原理与应用教学课件作者魏权利第4章嵌入式微处理器编程课件.pptVIP

嵌入式系统原理与应用教学课件作者魏权利第4章嵌入式微处理器编程课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 应用示例: AREA global_exp,CODE,READONLY EXPORT asmsub ;在汇编中声明一个全局标号 IMPORT globv ;声明在C中定义的全局变量globv asmsub LDR R1,= globv ;将内存地址读入到R1中 LDR R0,[R1] ;将globv数据读入到R0中 ADD R0,R0,#2 ;R0=R0+2 STR R0,[R1] ;加2后再将值赋予变量globv MOV PC,LR ;程序返回 END ;汇编结束 在该程序中,变量globv是在C程序中声明的全局变量,在汇编程序中首先使用IMPORT伪指令声明该变量,再将其内存地址通过伪指令LDR读入到寄存器R1中,将其值装载到寄存器R0中,修改后将寄存器R0的值赋予变量globv。 ? * 4.3.6 嵌入式C语言中的几个特殊关键字 1. 用于声明函数的关键字 用于声明函数的关键字是告诉C编译器对被声明的函数给以特别的处理,这是对ANSI C语言的扩充。 ⑴关键字__irq(注意是双下划线) 双下划线前缀关键字__irq用于对中断处理函数的声明,包括IRQ中断函数和FIQ中断函数。它可以保存除浮点寄存器外被该函数破坏的寄存器,包括ATPCS标准要求的寄存器。该函数在调用前需要保存CPSR到SPSR_irq,设置CPSR[7:0]位,保存当前的PC指针到LR(R14_irq),然后将IRQ异常中断向量地址0给PC开始执行中断程序;执行完中断函数返回时通过将SPSR_irq的值赋给CPSR,将LR-4的值赋给PC等实现函数的返回。其语法格式如下: static void __irq 中断函数名(void){…} 注意:中断函数一般是没有输入参数和返回值的。 ⑵ 关键字__swi 双下划线前缀关键字__swi用于对软中断函数SWI 的声明,它是在用户模式下通过软件进入到特权模式的唯一方法。在特权模式运行的程序可通过改变CPSR寄存器的值轻松地实现CPU的工作模式切换。同样它在执行软中断函数之前同__irq关键字一样,也要进行现场保护等操作;执行软中断函数调用后,也需要恢复现场,具体内容请参见3.3.4节的SWI 指令介绍。使用语法格式如下: __swi(软中断号)void 软中断函数名(形参表); 说明:软中断号与SWI指令后的24位立即数相对应;软中断函数可以有返回值和形参,此时遵循ATPCS规则传递参数和返回值。 * 2. 用于声明变量的关键字 也是告诉C编译器对这些变量给予特别的处理,是对ANSI C语言的扩充。 ⑴ 关键字volatile 使用关键字volatile声明的变量,告知C编译器没有必要对它进行优化操作,使用时每次都必须重新读取这个变量的值,而不是使用保存在寄存器中的备份,常用来声明访问I/O接口寄存器。 汇编语言程序代码选段: GPBCON EQU 0 ;定义I/O端口B控制寄存器地址 GPBDAT EQU 0 ;定义I/O端口B数据寄存器地址 … LDR R0, =GPBCON ;使用伪指令LDR将端口B控制寄存器地址送R0 LDR R1, =0 ;控制字送R1,设置端口B的b0为输出端口 STR R1, [R0] ;控制字写入控制寄存器 LDR R0, =GPBDAT ;使用伪指令LDR将端口B数据寄存器地址送R0 LDR R1, =0 ;置端口B的b0为1 STR R1, [R0] ;写入B端口数据寄存器 C语言程序代码段:

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档