微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 做ARM裸机C与程序时的注意事项

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

时间:11-21 来源:互联网 点击:
在设置好芯片类型,弄好芯片寄存器的宏定义后,接下来的编程就是走C的标准程序设计了。想法正确,但是ARM程序设计与以前大家学的8051是有差别的。

以前在KeilC51里面,在建立完工程之后,Keil会提示是否加入startup.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转为汇编后,你要用的段在哪里,入口函数在哪里。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top