TMS28335下载到片内Flash中并全部搬运到RAM中进行运行


前言

本人最近调试好代码后,准备将所有的代码下载到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

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEODWL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值