欢迎来到天天文库
浏览记录
ID:39549778
大小:52.00 KB
页数:6页
时间:2019-07-06
《C2000 LaunchPad RAM运行》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、【C2000LaunchPad】在FLASH里运行在FLASH里运行程序,只是将程序烧写到FLASH中,与在RAM里运行没有本质的区别。但是在FLASH里运行需要设置等待周期,对于对时间要求严格的过程,需要拷贝到RAM中运行,以达到最高速度。这样,如果对程序处理不当,就有可能使在RAM中运行正常的程序烧入FLASH中后就无法正常运行。关于这方面的内容需要看这两个:《TMS320C28xOptimizingC/C++CompilerUser'sGuide》、《TMS320C28xAssemblyLanguageToolsUser'sGuide》及其它相关文件。
2、下面在前几节实例的基础上,向大家介绍如何在FLASH里运行程序。一、更换CMD文件1、使用F28027.COM文件。在ProjectExplorer窗口右击项目名称,在出现的右键菜单里选择Properties,更换CMD文件方法如下:也可以在ProjectExplorer窗口右击F28027.COM文件,在出现的右键菜单里选择Properties,将这个文件包含在工程中:2、去掉28027_RAM_lnk.cmd文件。右击28027_RAM_lnk.cmd在出现的右键菜单里选择Properties,并将它打上勾:3、F2802x_Headers_nonBIO
3、S.cmd不管在什么情况下都是要用的。它是定义内部特殊寄存器用的,如CPU定时器寄存器。这些是固定不变的。二、将需要在RAM中运行的过程拷贝到RAM中。首先定义哪些过程(函数)需要在RAM里运行,然后使用MemCopy()将它们搬到RAM中。1、定义ramfuncs的过程这里的关键字“ramfuncs”是在CMD文件中定义的:ramfuncs:LOAD=FLASHA,RUN=PRAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),/*LOAD_SIZE(_RamfuncsLoadSiz
4、e),*/RUN_START(_RamfuncsRunStart),PAGE=0由上可见,在烧写时,将定义的ramfuncs部分写在FLASHA里,系统运行时再拷贝到PRAML0里运行,这里的RamfuncsLoadStart等,是由编译器生成的。在文件的开头或包含的头文件中需要加上声明:externUint16RamfuncsLoadStart;externUint16RamfuncsLoadEnd;externUint16RamfuncsRunStart;定义ramfuncs的过程是使用#pragma宏指令:#pragmaCODE_SECTION(SCI
5、TXINTA_ISR,"ramfuncs");#pragmaCODE_SECTION(SCIRXINTA_ISR,"ramfuncs");以上两行代表将SCITXINTA_ISR()及SCIRXINTA_ISR()作为ramfuncs。对于其它需要指定ramfuncs的过程,参照此方法。注意:使用#pragma宏指令,要在该过程所在的文件中使用,否则无效。可以在MAP文件中查看。以上两行如果不在当前文件中使用,而放在主文件中时,map文件是这样的ramfuncs0003f611200000021RUNADDR=00008000003f61120000001d
6、F2802x_SysCtrl.obj(ramfuncs)003f612f00000004F2802x_usDelay.obj(ramfuncs)如果把这两行放在过程所在的文件中时,MAP文件是这样的:ramfuncs0003f600000000061RUNADDR=00008000003f600000000040F2802x_DefaultIsr.obj(ramfuncs:retain)003f60400000001dF2802x_SysCtrl.obj(ramfuncs)003f605d00000004F2802x_usDelay.obj(ramfuncs
7、)对于使用汇编语言编制的程序,则使用sect命令,如F2802x_usDelay()过程:.def_DSP28x_usDelay.sect"ramfuncs".global__DSP28x_usDelay_DSP28x_usDelay:SUBACC,#1BF_DSP28x_usDelay,GEQ;;LoopifACC>=0LRETR此时的sect命令的使用,也是在过程所在的当前文件中。2、将过程从FLASH拷贝到RAM中。使用以下方法:MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart)
8、;原形如下:voidMemCopy(Uint16*S
此文档下载收益归作者所有