首页|嵌入式系统|显示技术|模拟IC/电源|元件与制造|其他IC/制程|消费类电子|无线/通信|汽车电子|工业控制|医疗电子|测试测量
首页 > 分享下载 > 消费类电子 > ARM中C和汇编混合编程及示例

ARM中C和汇编混合编程及示例

资料介绍
ARM中C和汇编混合编程及示例ARM 中 C 和汇编混合编程及示例
在嵌入式系统开发中,目前使用的主要编程语言是C 和汇编,C++已经有相应的编译器,但是现 在使用还是比较少的。在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用 C 编写的, 主要是因为 C 语言的结构比较好,便于人的理解,而且有大量的支持库。尽管如此,很多地方还是要 用到汇编语言,例如开机时硬件系统的初始化,包括 CPU 状态的设定,中断的使能,主频的设定, 以及 RAM 的控制参数及初始化,一些中断处理方面也可能涉及汇编。另外一个使用汇编的地方就是 一些对性能非常敏感的代码块,这是不能依靠 C 编译器的生成代码,而要 手工编写汇编, 达到优化的 目的。而且,汇编语言是和 CPU 的指令集紧密相连的,作为涉及底层的嵌入式系统开发,熟练对应 汇编语言的使用也是必须的。 单纯的 C 或者汇编编程请参考相关的书籍或者手册,这里主要讨论 C 和汇编的混合编程,包括 相互之间的函数调用。下面分四种情况来进行讨论,暂不涉及 C++。 1. 在 C 语言中内嵌汇编 在 C 中内嵌的汇编指令包含大部分的 ARM 和 Thumb 指令,不过其使用与汇编文件中的指令有些不 同,存在一些限制,主要有下面几个方面: a. b. c. d. 不能直接向 PC 寄存器赋值,程序跳转要使用 B 或者 BL 指令 在使用物理寄存器时,不要使用过于复杂的 C 表达式,避免物理寄存器冲突 R12 和 R13 可能被编译器用来存放中间编译结果, 计算表达式值时可能将 R0 到 R3、 R12 及 R14 一般不要直接指定物理寄存器,而让编译器进行分配

用于子程序调用,因此要避免直接使用这些物理寄存器 内嵌汇编使用的标记是 __asm 或者 asm 关键字,用法如下: __asm { instruction [; instruction] ... [instruc
标签:和汇编混合编程及示例
ARM中C和汇编混合编程及示例
本地下载

评论