This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28M35 环境配置问题

各位老师,学习28M35时遇到如下问题:

C28的代码里有:

#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
InitFlash();
#endif

M3的代码里有:

#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
FlashInit();
#endif

#ifdef _STANDALONE
#ifdef _FLASH
IPCMtoCBootControlSystem(CBROM_MTOC_BOOTMODE_BOOT_FROM_FLASH);
#else
IPCMtoCBootControlSystem(CBROM_MTOC_BOOTMODE_BOOT_FROM_RAM);
#endif
#endif

程序往RAM里面下,跑起来都是正常的。

后来我想在flash中跑。我的处理是:把两个project里面的cmd文件由28M35H52C1_RAM_lnk_c28、28M35H52C1_RAM_lnk_m3分别换成了F28M35H52C1_c28、F28M35H52C1_m3。

但是往flash里面下,这些判断里面的函数并没有进去,跑起来不正常。后来干脆把#ifdef _STANDALONE,#ifdef _FLASH之类的判断去掉,直接跑后面的几个函数,就正常了,这说明那几个函数之前没有执行。

所以想请问,_STANDALONE,_FLASH是在哪儿定义的,这些#ifdef 判断进不进去,到底取决于什么配置啊?

我想把原先在RAM里面运行的程序,下到flash里面上电直接跑,除了更改cmd文件,还有别的设置吗?

  • IPCMtoCBootControlSystem()是M3向C28发送引导指令的函数,那说明是双核共同工作(文件夹F28M35x_examples_Dual也说明它应该是双核共同工作),那为什么#ifdef _STANDALONE(单独,独立)满足条件才编译 IPCMtoCBootControlSystem(),这里肯定有问题,我是这么觉得的,所以你删掉它那个条件就可以了。可能这个地方官方的程序员写错了。我猜。