网站大量收购独家精品文档,联系QQ:2885784924

第五章基于ARM的嵌入式程序设计ok.ppt

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内嵌的汇编指令的特点 操作数可以是寄存器、常量或C表达式。它们可以是char、short或者int类型,而且是作为无符号数进行操作 。 内嵌的汇编指令中使用物理寄存器有一些限制。 常量前的符号“#”可以省略 只有指令B可以使用C程序中的标号,指令BL不能使用C程序中的标号。 不支持汇编语言中用于内存分配的伪操作。 指令中如果包含常量操作数,该指令可能会被汇编器展开成几条指令。 内嵌汇编器与armasm汇编器的区别 内嵌汇编器不支持通过“·”指示符或PC获取当前指令地址; 不支持LDR Rn,= expression伪指令,而使用MOV Rn, expression指令向寄存器赋值; 不支持标号表达式; 不支持ADR和ADRL伪指令; 不支持BX和BLX指令; 不可以向PC赋值; 使用0x前缀替代“&”表示十六进制数。 内嵌汇编注意事项 必须小心使用物理寄存器,如R0~R3,LR和PC。 不要使用寄存器寻址变量。 使用内嵌汇编时,编译器自己会保存和恢复它可能用到的寄存器,用户无须保存和恢复寄存器。 LDM和STM指令的寄存器列表只允许物理寄存器。 汇编语言用“,”作为操作数分隔符 5.6.3C和ARM汇编程序间相互调用 在C和ARM汇编程序之间相互调用必须遵守ATPCS(ARM-Thumb Procedure Call Standard)规则。 C和汇编之间的相互调用可以从以下这三方面来介绍: 汇编程序对C全局变量的访问 在C语言程序中调用汇编程序 在汇编程序中调用C语言程序 汇编程序访问全局C变量 汇编程序可以通过地址间接访问在C语言程序中声明的全局变量。通过使用.import关键词引人全局变量,并利用LDR和STR指令根据全局变量的地址可以访问它们。 对于不同类型的变量,需要采用不同选项的LDR和STR指令,如下所示: unsigned char LDRB/STRB unsigned short LDRH/STRH unsigned int LDR/STR char LDRSB/STRSB short LDRSH/STRSH 在C语言程序中调用汇编程序 为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCS。在汇编程序中需要使用EXPORT伪操作来声明,使得本程序可以被其它程序调用。同时,在C程序调用该汇编程序之前需要在C语言程序中使用extern关键词来声明该汇编程序。 在汇编程序中调用C语言程序 为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCS。在C程序中不需要使用任何关键字来声明将被汇编语言调用的C程序,但是在汇编程序调用该C程序之前需要在汇编语言程序中使用IMPORT伪操作来声明该C程序。在汇编程序中通过BL指令来调用子程序。 5.7 基于Embest IDE for ARM 环境的软件开发实例 5.7.1 嵌入式软件开发流程 5.7.2 开发实例介绍 5.7.3 源文件解释 5.7.4 工程建立和配置 5.7.5 在RAM中调试软件 5.7.6 软件的固化 5.7.7 程序在Flash中调试 5.7.1嵌入式软件开发流程 编写代码仅是嵌入式软件开发的第一步,还要学会在具体的编程环境下完成工程创建、源文件的编写、编译、链接、调试、固化等一系列工作。这就涉及到程序编译、链接、调试的具体配置以及开发板上硬件的初始化、程序下载等问题。 下面通过一个具体的在Embest IDE for ARM开发环境下的实际开发例程,使读者熟悉嵌入式软件开发的整个过程,如下图所示: 5.7.2开发实例介绍 例程是一个基于S3C4510的完整的程序,可以在RAM中进行调试,固化在ROM中可以正常运行。正常运行时将间隔点亮一个发光二级管,按下按钮将点亮另外一个发光二级管。 整个软件只包含两个程序源文件:启动汇编文件 init.s 和C源程序文件 led_int.c 。 例程完整的演示了S3C4510处理器的启动过程,包括存储区配置、栈设置、中断向量设置,启动完成后演示了I/O端口的控制、中断的函数处理。 5.7.3源文件解释 启动汇编文件 启动汇编文件init.s,依次完成如下工作:中断向量的设置,系统配置寄存器的设置,存储区的配置,程序中使用到的数据段向RAM区的拷贝,栈空间的初始化,进入C语言程序入口。 C主程序文件 C主程序文件 led_int.c完成I/O端口和中断的初始化、中断函数实现,本程序中未完成快速中断的处理,但作为链接的需要保留了一个快速中断处理的空函数。 5.7.4工程的建立和配置 建立工程 选择菜单项File New Work

文档评论(0)

zxiangd + 关注
实名认证
内容提供者

本人从事教育还有多年,在这和大家互相交流学习

1亿VIP精品文档

相关文档