飞凌OK6410流水灯程序AXD2.2编译过程
飞凌OK6410流水灯程序AXD2.2编译过程
程序
1.1 init.s
IMPORTMain
AREA |C$$code|,CODE,READONLY
globalstart
start
blMain
END
1.2main.c
#define rGPMCON(*(volatile unsigned*)(0x7F008820))
#define rGPMDAT(*(volatile unsigned*)(0x7F008824))
#define rGPMPUD(*(volatile unsigned*)(0x7F008828))
void msDelay(int time)
{
volatile unsigned int i,j;
for(i=0;i<2000000;i++)
for(j=0;j
}
void GPIO_Init(void)
{
rGPMCON=0x11111;
rGPMPUD=0x00;
rGPMDAT=0x1F;
}
void LedTest(void)
{
volatile unsigned int i;
while(1)
{
for(i=0;i<4;i++)
{
rGPMDAT=~(1<
msDelay(10);
}
}
}
void Main(void)
{
GPIO_Init();
LedTest();
}
打开CodeWarrior forRVDS
2.1File->new,图1所示。
图1
2.2new project 图2所示。
图2
新建文件init.s,main.c。图3所示
图3
添加文件到工程,图4所示。
图4
添加源文件后的视图,图5所示。
图5
工程设置,编译,链接。
3.1Debug Settings… 图6所示。
图6
Debug Settings对话框。图7~图13所示。
图7
图8
图9
图10
图11
图12
图13
剩余步骤这里不再给出,详情请看《飞凌6410裸机调试教程.pdf》
5、知识扩展:ARM映像文件EDN电子技术论坛>博客 >tengjingshu博客 >ARM Linux学习笔记1:ARM映像文件什么是arm的映像文件arm映像文件其实就是可执行文件,包括bin或hex两种格式,可以直接烧到rom里执行。在axd调试过程中,我们调试的是axf文件,其实这也是一种映像文件,它只是在bin文件中加了一个文件头和一些调试信息。可以参考pdf:ARM映像文件及执行机理映像文件的组成ARM映像文件是一个层次性结构的文件,包括了域(region),输出段(output section)和输入段(input section)。
所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。
加载域就是映像文件被静态存放的工作区域,一般来说flash里的 整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在 flash里执行,一般都会搬到sdram里运行工作,它们在被搬到sdram里工作所处的地址空间就是运行域。
ARM映像文件一开始总是存储在ROM/Flash里面的,其RO部分既可以在ROM/Flash里面执行,也可以转移到速度更快的RAM中执行;而RW和ZI这两部分是必须转移到可写的RAM里去,其实RW包括ZI区域。
什么是RO段、RW段和ZI段
一个ARM程序包含3部分:RO,RW和ZIRO就是ReadOnly,程序中的指令和常量RW就是Read/Write,程序中的已初始化变量ZI就是Zero Init,程序中的未初始化的变量Image文件包含了RO和RW数据。 之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。Q:为什么Image中必须包含RO和RW?A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。ARM程序的执行过程从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。实际上,RO中的指令至少应该有这样的功能:1. 将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。2. 将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中