加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:00:38 所属栏目:百科 来源:网络整理
导读:最近在研究DSP遇到了一个问题,程序能在RAM中正常运行,但写入到FLASH中后不能运行. 花了几天的时间后来终于搞定,今天在这里与大家一起来分享一下经验. DSP程序写入到FLASH中无法运行的原来一般来说有下面几种原因: 1、CMD文件配置错误 2、编译选项不正确 3、
最近在研究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的文档吧,根据你自己的需要配置。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读