ARM的KEIL工程建立及编译过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM 的KEIL 工程建立及编译过程 精简:
1)添加:Ext_RAM.ini 和RuninRAM.sct; 2)选中
,去掉
3)注意LOAD 1.axf INCREMENTAL // Download program 这个名要与工程名保持一致。
第一步:新建工程
点击Project-new uvision Project 新建工程,注意工程名没有后缀。
点是,自动生成启动代码,否,要自己写启动代码。 第二步:自己写c 程序(用户程序):
点击File-New 新建文件:注意文件名尾缀为.c。
U
n R
e g
i s
t e
r e
d
第三步:添加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:代码分析
U
n R
e g
i s
t e
r e
d
; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAM
LR_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) } }
第五步:配置
U
n R
e g
i s
t e
r e
d
点击
在target 选项中如图进行设置,注意Xtal:设置的时钟频率只是仿真时有用。
在OUTPUT 选项中选中HEX FILE。
Listing、User、C/C++、Asm 选择默认即可 Linker 安装如下进行设置
Debug 安装如图进行设置
U
n R
e g
i s
t e
r e
d
点击Utilities:安装如下进行设置。
Update target before debugging:选中每次自动更新flash,如果程序在内存中运行要去掉。
第六步:通过keil 下载程序到norflash:如果要烧写到flash 需要点击setting 后点击ADD 进行添加响应的norflash 型号。
U
n R
e g
i s
t e r e
d
注意:不建议用该方法进行程序烧写,因为有时候可能导致程序经常复位,可能是keil 自身编译器问题。
第七步:如果用J-LINK 仿真调试时需要将:
Ext_RAM.ini 里面的:
Init(); // Initialize memory
LOAD 1.axf INCREMENTAL // Download program 这个名要与工程名保持一致。 PC = 0x30000000; // Setup for Running
// g, main // Goto Main
U
n R
e g
i s
t e
r e
d
第八步:如果要烧写程序,需要先将keil
的修改如下:
; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* ; Run in RAM
LR_ROM1 0x30000000 { ; load region
ER_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 RAM
LR_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 烧写即可。
U
n R
e g
i s
t e
r e
d