- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C2000 LaunchPad RAM运行
【C2000 LaunchPad】在FLASH里运行
在FLASH里运行程序,只是将程序烧写到FLASH中,与在RAM里运行没有本质的区别。但是在FLASH里运行需要设置等待周期,对于对时间要求严格的过程,需要拷贝到RAM中运行,以达到最高速度。这样,如果对程序处理不当,就有可能使在RAM中运行正常的程序烧入FLASH中后就无法正常运行。关于这方面的内容需要看这两个:《TMS320C28x Optimizing C/C++Compiler Users Guide》、《TMS320C28x Assembly Language Tools Users 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;
定义ramfuncs的过程是使用#pragma宏指令:
#pragma CODE_SECTION(SCITXINTA_ISR, ramfuncs);
#pragma CODE_SECTION(SCIRXINTA_ISR, ramfuncs);
以上两行代表将SCITXINTA_ISR()及SCIRXINTA_ISR()作为ramfuncs。对于其它需要指定ramfuncs的过程,参照此方法。
注意:使用#pragma宏指令,要在该过程所在的文件中使用,否则无效。可以在MAP文件中查看。
以上两行如果不在当前文件中使用,而放在主文件中时,map文件是这样的
ramfuncs 0 003f6112RUN ADDR =003f6112 0000001d F2802x_SysCtrl.obj (ramfuncs)
003f612fF2802x_usDelay.obj (ramfuncs)
如果把这两行放在过程所在的文件中时,MAP文件是这样的:
ramfuncs 0 003f6000RUN ADDR =003f6000F2802x_DefaultIsr.obj(ramfuncs:retain)
003f6040 0000001d F2802x_SysCtrl.obj (ramfuncs)
003f605dF2802x_usDelay.obj (ramfuncs)
对于使用汇编语言编制的程序,则使用sect命令,如F2802x_usDelay()过程:
.def _DSP28x_usDelay
.sect ramfuncs
.global __DSP28x_usDelay
_DSP28x_usDelay:
SUB ACC,#1
BF _DSP28x_usDelay,GEQ ;; Loop if ACC = 0
LRETR
此时的sect命令的使用,也是在过程
您可能关注的文档
最近下载
- 意大利cemb(赛博)er60动平衡仪中文操作手册.pdf VIP
- 粮油供货保障方案.docx VIP
- 负压引流器产品技术要求标准2023版.pdf VIP
- 初中英语课外阅读黑布林版渔夫和他的灵魂中文译文.docx VIP
- Oasis montaj7.5 操作手册-Oasis montaj Mapping and Processing软件平台.pdf VIP
- 机械精度设计与检测技术基础第2版杨沿平第七章滚动轴承配合1课件教学.ppt VIP
- 云南省昆明市盘龙区2023-2024学年七年级上学期期末英语试卷.pdf VIP
- 硬膜下血肿的护理常规.pptx
- 2020年牛津译林版7A英语七年级上册Unit2-单元检测卷(含答案).docx VIP
- 机械精度设计与检测技术基础第2版杨沿平第八章键与花键连接1课件教学.ppt VIP
文档评论(0)