DSP F2812程序写入到Flash中无法运行的解决办法

最近在研究DSP遇到了一个问题,程序能在RAM中正常运行,但写入到FLASH中后不能运行.
花了几天的时间后来终于搞定,今天在这里与大家一起来分享一下经验.
DSP程序写入到FLASH中无法运行的原来一般来说有下面几种原因:
1、CMD文件配置错误
2、编译选项不正确
3、定义了在RAM中运行的函数,但在调用函数之前没有将其复制到RAM中,使程序跑飞。
4、FLASH寄存器配置不正确
如果你能解决上面的四方面的问题,你的程序一定能在FLASH中跑起来。下面教你怎样处理这些问题
一、CMD文件配置不正确。
这个可能性很小,因为CMD文件配置非常简单,如果你对CMD文件不太了解,请先学习一些这方面的知识,此处不讲,假设你对CMD文件已经了解。FLASH中运行的CMD文件与在ARM中运行的CMD文件不相同,具体不同点请查阅TI公司的文档SPRA958F(Runnung an Application from Internal Flash Memory on the TMS320F28XX DSP),这里面讲的非常清楚,包括Non-BIOS/BIOS 工程。我相信只要你认真看完那本大约40页的书,你一定能排除是CMD配置错误引起程序不能运行的原因,如果你到这一步你的程序能正常运行了,那恭喜你你是最幸运的,如果没有正常运行,不要急,慢慢来,下面还有更好的解决办法在等你。
二、编译选项不正确
这个原因对一些经验不足的同志来说可能被忽略,请看下图



在编译选项中有一个优化等级的配置选项(上图的红色圈内的),如果你的程序不能运行你可以将他设置为None,即为不优化,设置好后保存,再重新编译你的工程,再将程序写入到FLASH中看看能不能运行。如果程序能运行,恭喜你,你也是幸运。因为你比上面的同志多学了一招,会受益终生的,如果不能运行那你更好幸运,说明你的程序原因不在这里,你还可以学习更多的知识。你会比别人更强。

三、定义了在RAM中运行的函数,但在调用函数之前没有将其复制到RAM中,使程序跑飞。
如果你定义了RAM函数,如TI公司头文件中自带InitFlash函数,这些函数会以CODE_SECTION申明。如下
#pragma CODE_SECTION(InitFlash, "ramfuncs");
在CMD文件中的SECTIONS段中应该有下面这样的说明
ramfuncs           : LOAD = FLASHD, 
                         RUN = RAML0, 
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         PAGE = 0
在你的C文件中应该有外部变量的申明。如下
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
当然上面说的那些在SPRA958F(Runnung an Application from Internal Flash Memory on the TMS320F28XX DSP)中都有说明。
最重要的下面的函数调用
InitFlash();
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);(这个MenCopy用的TI头文件中)
你必须执行上面的函数,在你调用那些定义在RAM中运行的函数之前,否则活神仙也不能帮你解决问题。
到这里的时候我相信你一定能松一口气了,因为你的问题应该已经解决了(只要你没有误解我的意思),先恭喜不管你有没有解决问题,因为就算你没有解决问题你也学到了一点点东西吧。
4、FLASH寄存器配置不正确
这种可能性很少,也可以会不会出现,只要你用的是TI公司的头文件(没有被修改过)我相信就不会出现这问题,TI的默认配置就可以正常运行只是你应该调用InitFlash();这个函数,哈哈你不要忘记了上面说的第三个可能性哦MemCopy。
关天FLASH的配置我就不说了你自己看TI的文档吧,根据你自己的需要配置。
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TMS320F2812是德州仪器(TI)公司的一款数字信号处理器(DSP)芯片。要实现远程升级TMS320F2812程序,可以采用以下方法: 1. 基于串口通信:可以通过串口通信方式,将新的程序固件从远程设备发送到TMS320F2812。这需要使用合适的串口通信协议和通信接口,如RS232、RS485、USB等。在远程设备通过串口发送程序时,TMS320F2812接收并写入新的程序固件,最后进行重启操作。 2. 基于以太网通信:可以通过以太网接口实现远程升级功能。远程设备通过以太网将新的程序固件发送到TMS320F2812,然后TMS320F2812接收并写入新的程序固件,最后进行重启操作。这种方法需要在TMS320F2812上实现对应的以太网通信协议,常用的有TCP/IP协议栈。 3. 基于无线通信:可以利用无线通信方式,如Wi-Fi或蓝牙,将新的程序固件从远程设备发送到TMS320F2812。远程设备通过无线通信将新的程序固件发送给TMS320F2812,然后TMS320F2812接收并写入新的程序固件,最后进行重启操作。这需要在TMS320F2812上实现对应的无线通信协议和通信接口。 无论使用哪种方法进行远程升级,都需要保证通信的可靠性和数据的完整性。在升级过程,需要进行适当的校验和错误处理,以确保新的程序固件能够正确地写入并正常运行。同时,也需要注意安全性问题,防止恶意程序固件的远程升级。+

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值