DSP28335的RAM程序烧写到flash方法

最近学习了DSP28335,用RAM连接核心板可以运行程序,想着烧到FALSH里面,结果发现程序卡死了,遂去网上找问题并线下摇了个大佬帮忙排查问题。

在这里记录一下问题,以及解决办法。

笔者先去网上搜怎么把RAM程序烧到FLASH里面的,总结为下面:

1、在cmd文件夹(其实放哪里都行,为了方便统一管理笔者放进cmd里面了)里面添加F28335.cmd文件。添加办法:(1)别的历程里面复制一个;(2)右键工程文件名,点击  Add Files...  在下载CCS的文件夹里面搜索F28335.cmd即可。

2、右键F28335_RAM_lnk.cmd文件,点击  Exclude from Build  ,会发现该文件会变成灰色,现在cmd文件夹里面只有DSP2833x_Headers_nonBLOS.cmd和F28335.cmd。(想要改回RAM只需要再点一下就行了,然后把F28335.cmd变成灰色)

3、在主函数所在的.c里面加入下面这四个声明:

extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
extern void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);

4、加入 DSP2833x_MemCopy.c 文件,其实这个文件就一个函数:

void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
{
    while(SourceAddr < SourceEndAddr)
    { 
       *DestAddr++ = *SourceAddr++;
    }
    return;
}

5、在InitPieVectTable();//初始化中断向量函数后面加上:

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();

到这一步正常就全部完成了,按理说就可以下载到FLASH里面了,但是笔者遇到了问题,下面是描述问题以及是怎么解决的:

CCS编译正常且当时在RAM里面程序也正常运行了,但是按照上面步骤配置完文件后,发现烧入到FLASH的程序不能正常运行,连接仿真器进入调试发现程序会卡死在这个函数里面

interrupt void ILLEGAL_ISR(void)   // Illegal operation TRAP
{
  // Insert ISR Code here

  // Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
  asm("          ESTOP0");
  for(;;);

}

经过查询发现是因为模板工程是只在RAM运行的,没有考虑到烧到FLASH里面,它的DSP2388x_SysCrtl.c里面没有 #pragma CODE_SECTION(InitFlash, "ramfuncs"); 这句代码导致的问题。加上后去  F28335.cmd  里的  SECTIONS  里面有下面代码:

ramfuncs            : LOAD = FLASHD, 
                         RUN = RAML0, 
                         LOAD_START(_RamfuncsLoadStart),
                         LOAD_END(_RamfuncsLoadEnd),
                         RUN_START(_RamfuncsRunStart),
                         PAGE = 0   

然后程序就正常了,写出来希望可以帮助一下朋友。

参考文章:DSP28335 程序烧写到flash方法和问题分析 - 知乎 (zhihu.com)

ccs8烧写与擦除dsp2812FLASH的方法_ccs擦除flash方法-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值