【玩转C2000 LaunchPad】在FLASH里运行
[复制链接]
【C2000 LaunchPad】在FLASH里运行
在FLASH里运行程序,只是将程序烧写到FLASH中,与在RAM里运行没 有本质的区别。但是在FLASH里运行需要设置等待周期,对于对时间要求严 格的过程,需要拷贝到RAM中运行,以达到最高速度。这样,如果对程序处 理不当,就有可能使在RAM中运行正常的程序烧入FLASH中后就无法正常运 行。关于这方面的内容需要看这两个:《TMS320C28x Optimizing C/C++ Compiler User's Guide》、《TMS320C28x Assembly Language Tools User's Guide》 及其它相关文件。
下面在前几节实例的基础上,向大家介绍如何在FLASH里运行程序。
一、更换CMD文件
1、使用F28027.COM文件。
在Project Explorer窗口右击项目名称,在出现的右键菜单里选择Properties, 更换CMD文件方法如下:
也可以在Project Explorer窗口右击F28027.COM文件,在出现的右键菜单里 选择Properties,将这个文件包含在工程中:
2、去掉28027_RAM_lnk.cmd文件。右击28027_RAM_lnk.cmd在出现的右 键菜单里选择Properties,并将它打上勾:
3、F2802x_Headers_nonBIOS.cmd不管在什么情况下都是要用的。它是定 义内部特殊寄存器用的,如CPU定时器寄存器。这些是固定不变的。
二、将需要在RAM中运行的过程拷贝到RAM中。
首先定义哪些过程(函数)需要在RAM里运行,然后使用MemCopy()将 它们搬到RAM中。
1、定义ramfuncs的过程
这里的关键字“ramfuncs”是在CMD文件中定义的:
ramfuncs : LOAD = FLASHA,
RUN = PRAML0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END (_RamfuncsLoadEnd),
/* LOAD_SIZE(_RamfuncsLoadSize),*/
RUN_START(_RamfuncsRunStart),
PAGE = 0
由上可见,在烧写时,将定义的ramfuncs部分写在FLASHA里,系统运 行时再拷贝到PRAML0里运行,这里的RamfuncsLoadStart等,是由编 译器生成的。在文件的开头或包含的头文件中需要加上声明:
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
定义下载附件
保存到相册
2013-2-26 13:59 上传
四、烧写
在Project Explorer窗口右击项目名称,在出现的右键菜单里选择Properties ,
将项目重新编译,并进入DEBUG,此时即将程序写入内部的FLASH。
如果退出DEBUG,板子重新加电后,仍能按照调试的结果运行。
|