基于SmartARM2300开发板的ADS工程移植keil5工程

需求描述:

最近在用LCP2378做项目,需要用到此芯片上的CAN接口,官方给的例程中,是ADS平台下的,根据我个人习惯,想在keil下进行开发,所以就需要将源码转换到keil平台上,根据需要搭建好keil5的软件环境(需要能支持LPC2XXX系列芯片支持包)。

1.新建keil工程,选择LCP2378芯片:

2、 会提示是否加载LPC2300.S可以选择加载后可以删除,这个文件相当于ADS里面的Startup.s是程序启动文件(就是复位、中断、main跳转之类的),由于将ADS工程移到这边可以不需要keil自带的LPC2300.S


3、 将ADS工程文件全部考到Keil 工程文件夹下,后在工程中将文件都加入(除了scf文件),keil工程文件加载后如下图:

注意:
(1)、不要将scf文件加入到keil工程下,不然编译会将其一起加入编译导致出错,scf文件在工程配置中设置
 

(2)LPC2378例程 有三个分散加载模式,分别是直接加载到RAM中,加载到flash,发布模式(与加载到flash一致)。
三种模式 分别对应上述 mem_b.scf、mem_c.scf、mem_a.scf(与c是相同的)。
三个文件的区别主要是根据不同的板子的flash、ROM、RAM地址决定的,这里根据前面LPC2300存储器映射决定。

4、 keil工程配置 ,主要注意以下几点

1)Target下配置如图,注意不要选Use MicroLIB。

2)添加编译头文件连接路径:

剩下的就是生成hex文件的配置,这个不在赘述,之后基本配置就完成了,如果需要仿真调试的,自行在Debug配置项里选择调试器和相应设置。

5、 编译连接错误解决

主要是Startup.s中的错误
1) warning: A1876W: Use of '|' as a synonym for the :OR: operator is deprecated.(这个问题暂时没遇到过)
解决方法:把'|'修改为':OR:'


2) warning: A1608W: MOV pc, instruction used, but BX is preferred
解决方法:把"MOV pc," 替换为 "BX"


3) 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

4) warning:  #1-D: last line of file ends without a newline

解决方法:在警告文件末尾添加空白换行。

5)本工程编译遇到错误:error:  #147-D: declaration is incompatible with "void CANIntPrg(void)__irq" (declared at line 185 of "can\LPC2300CAN.h")

添加后如下图:

新错误根据此前第“3)”步进行解决。

编译通过后,生成的hex问价下载到开发板上验证一下,可以实现can中断接收和发送,再往里面移植部分像串口驱动和其他的驱动调试。

参考文献:

http://blog.sina.cn/dpool/blog/s/blog_658bb27f0101kzd2.html

猜你喜欢

转载自blog.csdn.net/qq_28643619/article/details/88832273