文档详情

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

发布:2016-12-28约3.12万字共73页下载文档
文本预览下载声明
* 应用示例: 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语言程序代码段:
显示全部
相似文档