找回密码
 注册
关于网站域名变更的通知
查看: 324|回复: 1
打印 上一主题 下一主题

ARM使用C语言编程基本规则

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-5-27 15:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不易移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。
' n7 _- z$ w% q$ h% K" ~在ARM程序的开发中,需要大量读写硬件寄存器,尽量缩短程序的执行时间,因此部分初始化代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。
( y6 W9 s, \4 u1 y5 }: D2 p( YC语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。4 W8 s$ ?$ U' B* M
在使用C语言时, 有时要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,将汇编程序以文件的形式加入项目当中,通过ATPCS(ARM/Thumb Procedure Call Standard)的规定与C程序相互调用与访问。
7 `8 z* D( _. W1 r; u3 P* n% g0 @" PATPCS,就是ARM、Thumb的过程调用标准,它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。8 ~9 @. `+ T  U" [% s7 j
在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件:
) q" v6 E, f1 [9 T# Q3 u- \1 m6 ^.  在子程序编写时,必须遵守相应的ATPCS规则;
6 t" f. ^# U' w+ S9 _" Z.  堆栈的使用要遵守相应的ATPCS规则;: U' _2 h2 ~2 a' P- V, w
.  在汇编编译器中使用-atpcs选项。, z0 F, N6 w$ j, @; L1 H
基本的ATPCS规定,详情请见相关PDF文档,简单说明就是:) K2 G3 \/ w* H! l8 {4 i
1. 汇编程序调用C程序
+ k3 _0 }* f% e! P! |+ _.  汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。
- L1 A4 Z& X( K8 w0 [.  在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。, r# w6 g% {9 b) N' m/ |/ l2 Z
.  在调用C程序时,要正确设置入口参数,然后使用BL调用。1 _9 h& p! y; n' }) B
2. C程序调用汇编程序1 o5 l( n( b2 F) n6 U% q& ?
.  汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。* s! X% B, Z9 @9 j0 P: h
.  在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。
3 e% D+ g/ m" a/ W. `.  在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。% Y, X% J- |- ]
在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里面定义了所有关于2410的硬件寄存器的宏,对宏读写,就能操作2410的硬件,具体的编程规则同标准C语言。+ V! t, I8 {2 Q4 T+ `5 u1 z* z
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-5-27 15:25 | 只看该作者
    C程序很重要,是基础
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-26 02:00 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表