前言
本人最近调试好代码后,准备将所有的代码下载到Flash中进行运行,在加入了Memcopy和InitFlash两个函数后,代码的确能正常下载进Flash,但是代码运行的速度远远不如RAM的快,经过实际的测试后,发现Flash比RAM慢了大概30%,这说明我的代码优化还是做的不错的…
一、将部分函数搬运到RAM运行.
这部分内容的具体操作真的很简单,无非是声明几个全局变量和加了 #pragma CODE_SECTION(cpu_timer1_isr,“ramfuncs”);这种将声明的函数放到RAM运行的方法.但是在实际的操作过程中,并没有实际的意义.我100us的中断函数依旧是占用了CPU几乎所有的资源,导致在Flash中运行时CPU无法完成其他的工作.在查询了工程文件下的Debug文件下的.map文件后我发现,的确有部分代码搬运到了RAM中运行,但是实际效果并没有.为此我不得不寻找其他的解决方案.
二、将所有函数全部搬运到RAM中运行.
这里具体的修改方法我就不说了,后面已经上传了我这里已经修改好的文件.故本文只阐述:1.从RAM调试模式到Flash模式需要做的工作;2.从Flash模式到RAM调试模式需要做的工作.
1.从RAM调试模式到Flash模式
首先我们需要在CMD文件中加入F28335.cmd(该文件需要修改,后文已上传),去掉28335_RAM_lnk.cmd.再在工程文件中加入DSP2833x_CodeStartBranch_Flash.asm,DSP2833x_usDelay.asm及DSP28x_SenctionCopy_nonBIOS.asm及DSP2833x_SysCtrl.c,值得注意的是:如果原工程中有对应的文件,需要将其内容全部修改成我上传的文件对应的内容.
最后只要再主程序的系统初始化函数InitSysCtrl();后面加上InitFlash();即可.
2.从Flash模式到RAM调试模式
那么如果我想从Flash模式重新回到RAM仿真调试应该怎么办呢?
经过实践我总结了以下几步:
首先我们需要在CMD文件中去掉F28335.cmd重新加入28335_RAM_lnk.cmd.另外需要将DSP2833x_CodeStartBranch.asm文件中的内容重新替换为之前你自己文件中的内容(即回到前面的状态),去掉DSP28x_SenctionCopy_nonBIOS.asm文件,
最后只要再主程序的系统初始化函数InitSysCtrl();后面注释掉InitFlash();即可.
那么接下来可能有人就要问了,DSP2833x_SysCtrl.c和DSP2833x_usDelay.asm文件不需要修改会原来的样子嘛?我的回答是:不需要.因为在DSP2833x_SysCtrl.c中只是修改了Flash运行的段而已,我们既然都不需要用Flash了自然就不用修改了.DSP2833x_usDelay.asm中的主要是一个延时函数,我们修改的地方也只是将延时函数下载到Flash中的地方修改了而已,对于仿真模式没有任何影响.
总结
这玩意儿还是蛮费时间的,我查了很多资料都显示要么文件没了,要么过于复杂.所以为了方便大家我上传了源文件,希望觉得不错的朋友给予一些支持.
文件上传
链接:https://pan.baidu.com/s/1rjiL22fIxOQ09DQps9SS6w
提取码:gd09