ARM 的KEIL 工程建立及编译过程 精简:1)添加:Ext_RAM.ini 和RuninRAM.sct; 2)选中,去掉3)注意LOAD 1.axf INCREMENTAL // Download program 这个名要与工程名保持一致。
第一步:新建工程点击Project-new uvision Project 新建工程,注意工程名没有后缀。
点是,自动生成启动代码,否,要自己写启动代码。
第二步:自己写c 程序(用户程序):点击File-New 新建文件:注意文件名尾缀为.c。
Un Re gi st er ed第三步:添加C 文件选中Source Group1点击右键,进行文件添加。
第四步:COPY 三个文件:(第一个是用户程序,自己写就不需要添加,最后一个如果自动生成启动代码也不需要添加)Ext_RAM.ini 和RuninRAM.sct必须添加。
Ext_RAM.ini :J-LINK 初始化脚本,必须添加。
代码执行前必须要初始化CPU 内部的一些寄存器。
该文件就是做初始化工作,给J-LINK 用。
J-LINK 通过读取该配置文件,初始化目标板主CPU 相关的寄存器。
RuninRAM.sct:代码编译时需要的链接文件,其主要作用就是组织代码的到该脚本指定的地址。
S3C2440A.s:初始化代码(启动代码) 小知识点:RuninRAM.sct:代码分析Un Re gi st er ed; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAMLR_ROM1 0x30000000 {; load region 程序运行起始地址。
内存起始地址固定0x30000000 ER_ROM1 0x30000000 0x0040000 { // 0100; load address = execution address 程序的下载地址,及程序容量 *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) }RW_RAM1 0x30040000 0x0040000 { ; RW data RW 段起始地址 .ANY (+RW +ZI) }RW_IRAM1 0x40000000 0x00001000 {//芯片内部4k sram 空间,固定式0x40000000开始。
.ANY (+RW +ZI) } }第五步:配置Un Re gi st er ed点击在target 选项中如图进行设置,注意Xtal:设置的时钟频率只是仿真时有用。
在OUTPUT 选项中选中HEX FILE。
Listing、User、C/C++、Asm 选择默认即可 Linker 安装如下进行设置Debug 安装如图进行设置Un Re gi st er ed点击Utilities:安装如下进行设置。
Update target before debugging:选中每次自动更新flash,如果程序在内存中运行要去掉。
第六步:通过keil 下载程序到norflash:如果要烧写到flash 需要点击setting 后点击ADD 进行添加响应的norflash 型号。
Un Re gi st e r ed注意:不建议用该方法进行程序烧写,因为有时候可能导致程序经常复位,可能是keil 自身编译器问题。
第七步:如果用J-LINK 仿真调试时需要将:Ext_RAM.ini 里面的:Init(); // Initialize memoryLOAD 1.axf INCREMENTAL // Download program 这个名要与工程名保持一致。
PC = 0x30000000; // Setup for Running// g, main // Goto MainUn Re gi st er ed第八步:如果要烧写程序,需要先将keil的修改如下:; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAMLR_ROM1 0x30000000 { ; load regionER_ROM1 0x30000000 0x0200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) }RW_RAM1 0x30800000 0x0800000 { ; RW data .ANY (+RW +ZI) }RW_IRAM1 0x40000000 0x00001000 { .ANY (+RW +ZI) } }修改为:; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAMLR_ROM1 0x00000000 { ; load region 程序存放到norflash 中。
ER_ROM1 0x00000000 0x0200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) }RW_RAM1 0x30800000 0x0800000 { ; RW data .ANY (+RW +ZI) }RW_IRAM1 0x40000000 0x00001000 { .ANY (+RW +ZI) } }然后再编译生成hex 烧录代码,然后通过J-LINK 烧写即可。
Un Re gi st er edADS 到KEIL 过程:第一步:新建工程:点击 "否"第二步:修改工程名及分组名、添加文件在添加文件前需要将ads 目录下的inc 、lib 、main.c 复制到新建的KEIL 工程中。
然后编译。
Un Re gi st er e d第三步:配置:Listing 默认:U n Re g i st er edderetsigeRnUderetsigeRnU在2440init.s 中修改修改原因:因为ads 和keil 编译环境不一样,所以要修改,声明这些变量的来源 IMPORT |Image$$ER_ROM1$$RO$$Base| ; Base of ROM code 代码段起始地址 IMPORT |Image$$ER_ROM1$$RO$$Limit| ; End of ROM code (=start of ROM data)代码段结束地址 IMPORT |Image$$RW_RAM1$$RW$$Base| ; Base of RAM to initialise ;rw 段起始地址 IMPORT |Image$$RW_RAM1$$ZI$$Base| ; Base and limit of area zi 起始地址 IMPORT |Image$$RW_RAM1$$ZI$$Limit| ; to zero initialise zi 结束地址 IMPORT:这些变量在其它文件声明,然后通过该符号导入到该文件中。
(这些变量是在KEIL 编译器中)U n Re gi st e r ed使用这些变量将Init 修改为RESET (目的是与runinram.sct 里面的保持一致)。
KEIL 常见小技巧:怎样恢复默认界面:点击WINDOW---Reset View to Defaults 即可。
U n R e gi st er ed自动隐藏编译窗口:点击小喇叭,即可隐藏,再点击就固定。
如果隐藏了想看可以将鼠标移到左下脚即可自动弹出,鼠标移开编译窗口自动隐藏。
Un Re gi st er ed。