新闻中心

EEPW首页>嵌入式系统>设计应用> 做ARM裸机C与程序时的注意事项

做ARM裸机C与程序时的注意事项

作者: 时间:2016-11-21 来源:网络 收藏
在设置好芯片类型,弄好芯片寄存器的宏定义后,接下来的编程就是走C的标准程序设计了。想法正确,但是ARM程序设计与以前大家学的8051是有差别的。
以前在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
设置好自己程序的程序的开始的源地址后,再设置Layout菜单下的
Place at begining of image(放置镜像的起始文件)
这里用的是目标文件,用于链接时放在镜像文件的最开始,设置如下。意思是将init.o目标文件的init段放在镜像文件的最开始。
这些设置完成之后,还必须设置入口点,RealView Linker里面可以看到下面的命令行,加入
--entry=start 就可以了,现在编译链接后,在Axd里面就可以通过Jtag调试了。

如果start在汇编中不是设置的global,那么链接的时候,链接器会警告无法找到入口。
也可以不用加汇编作“引导”,但是在设置的时候,你要清楚C转为汇编后,你要用的段在哪里,入口函数在哪里。



评论


技术专区

关闭