预备
1、
ROM主要指:NAND
Flash,Nor
Flash
RAM主要指:PSRAM,SDRAM,SRAM,DDRAM
2、arm的映像文件
arm映像文件其实就是可执行文件,包括bin或hex两种格式,可以直接烧到rom里执行。axd调试中,是axf文件,也是一种映像文件,只是在bin文件中加了一个文件头和一些调试信息。
映像文件一般由域组成,域最多由三个输出段组成(RO,RW,ZI)组成,输出段又由输入段组成。
Ø
所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。
加载域就是映像文件被静态存放的工作区域,一般来说flash里的
整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在
flash里执行,一般都会搬到sdram里运行工作,它们在被搬到sdram里工作所处的地址空间就是运行域。
Ø
我们输入的代码,一般有代码部分和数据部分,这就是所谓的输入段,经过编译后
就变成了bin文件中ro段和rw段,还有所谓的zi段,这就是输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。在运行域中这些输出段并不连续,但rw和zi一定是连着的。zi段和rw段中的数据其实可以是rw属性。
3、LPC2300存储器映射
http://s11/mw690/658bb27ftdfdff0613a7a&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
正文
目的:将ADS下的LPC2378例程转换到keil
平台下,并利用keil平台下的JLINK实现调试下载。
平台:
Keil
http://s7/mw690/658bb27f07cc99a744296&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
Jlink
http://s5/mw690/658bb27f4dfe009d74da4&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
1、
在keil下新建工程,选择LPC2378
http://s13/mw690/658bb27f07cc99a956c1c&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
2、
会提示是否加载LPC2300.S可以选择加载后可以删除,这个文件相当于ADS里面的Startup.s是程序启动文件(就是复位、中断、main跳转之类的),由于将ADS工程移到这边可以不需要keil自带的LPC2300.S
3、
将ADS工程文件全部考到Keil
工程文件夹下,后在工程中将文件都加入(除了scf文件)
ADS
keil
http://s15/mw690/658bb27f4dfe009dfc91e&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
http://s12/mw690/658bb27f4dfe009ea566b&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
注意:
(1)、不要将scf文件加入到keil工程下,不然编译会将其一起加入编译导致出错,scf文件在工程配置中设置
http://s2/mw690/658bb27f4dfe009f3b801&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
(2)LPC2378例程
有三个分散加载模式,分别是直接加载到RAM中,加载到flash,发布模式(与加载到flash一致)。
三种模式
分别对应上述 mem_b.scf、mem_c.scf、mem_a.scf(与c是相同的)。
三个文件的区别主要是根据不同的板子的flash、ROM、RAM地址决定的,这里根据前面LPC2300存储器映射决定。
不同的分散加载模式对最后的Jlink
设置也有影响,后面会详述。
4、
keil工程配置
,主要注意以下几点
Ø
Target下配置如图,注意不要选Use MicroLIB。http://s13/mw690/658bb27f4dfe009f96dec&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
Ø
Output主要是要选create HEX file
http://s5/mw690/658bb27f4dfe009fe9b84&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
Ø
Link
配置如下
要配置entry point
,R/Obase
与R/Wbase(就是flash base
地址和 RAM默base
地址
默认一般是正确的)
http://s7/mw690/658bb27f4dfe00a0819a6&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
Ø Debug配置
选择Jlink后点设置,如果板子与Jlink已连,这时点Jlink
或者Target应该会显示响应的信息(Jtag speed不要选太高最好(<200)是选ADAPTIVE CLOCKING)http://s2/mw690/658bb27f4dfe00a0f3ca1&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
http://s1/mw690/658bb27f4dfe00a1062f0&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
Ø
Utilities
选择Jlink
点设置
最重要的是设置好RAM base地址和size
以及Flash base
地址与size
LPC2378
选择的是LPC2000IAP2 512Kb
Flash
注意要在下面要重新设置base
地址与size。
http://s7/mw690/658bb27f4dfe00a1d9b96&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
http://s12/mw690/658bb27f07cc99a937c0b&690 ADS——KEIL——Jlink" TITLE="LPC2378 ADS——KEIL——Jlink" />
这样keil工程配置与Jlink配置基本就可以了。
5、
编译连接错误解决
主要是Startup.s中的错误
Ø
warning: A1876W: Use of '|' as a synonym
for the :OR: operator is deprecated.
解决方法:把"|"修改为":OR:"
Ø
warning: A1608W: MOV pc, instruction used,
but BX is preferred
解决方法:把MOV
pc,
替换为 BX
Ø
Error: L6238E: os_cpu_a.o(subr) contains
invalid call from '~PRES8 (The user did not require code to
preserve 8-byte aligment of 8-byte data objects)' function to 'REQ8
(Code was permitted to depend on the 8-byte aligment of 8-byte data
items)' function OSIntExit.
解决方法:在汇编程序前面加上PRESERVE8
PRESERVE8(不要顶格)
AREA |subr|, CODE, READONLY
IMPORT OSIntExit
参考http://blog.sina.com.cn/s/blog_67ed0acc0101c825.html
加载中,请稍候......