做ARM裸机C与程序时的注意事项
以前在KeilC51里面,在建立完工程之后,Keil会提示是否加入sta
rtup.a51的文件,这个文件用来初始化51芯片的各个硬件资源。如果不加,往往程序会运行出错。
对于
ARM裸机,也一样,只不过RVDS编译器不会给你提供初始化的文件,都要自己写。一般工程文件为汇编和C的混合。因为现在的学习还不够深入,所以目前也只清楚一些简单的程序设计框架。
例如,一般在工程文件中加一个init.s的汇编文件。里面仅有一句用于跳转的汇编语句。假如你的C语言的入口函数为main,那么这句语句就是: BL main
init.s的写法,一般为如下;
AREA init , CODE ,READONLY
//段名,很重要,因为在设置起始段时有用
GLOBAL start
//应该设置为全局的,在设置入口点的时候有用,否则编译器找不到
IMPORT main
//由于main函数是外部函数,所以要用import来声明
ENTRY
start
BL main
//跳转到了C语言中的main函数了,也可以是其它函数
End
写好“引导”汇编程序及C语言程序后,还要进行设置。在Edit菜单下的 Debug setting 或者 Release setting(关键看你设置的是调试还生成)的
link选项中选择RealView Linker
![](http://editerupload.eepw.com.cn/fetch/20161101/319279_1_0.jpg)
![](http://editerupload.eepw.com.cn/fetch/20161101/319279_1_1.jpg)
这些设置完成之后,还必须设置入口点,RealView Linker里面可以看到下面的命令行,加入
--entry=start 就可以了,现在编译链接后,在Axd里面就可以通过Jtag调试了。
![](http://editerupload.eepw.com.cn/fetch/20161101/319279_1_2.jpg)
如果start在汇编中不是设置的global,那么链接的时候,链接器会警告无法找到入口。
也可以不用加汇编作“引导”,但是在设置的时候,你要清楚C转为汇编后,你要用的段在哪里,入口函数在哪里。
评论