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.

motorware lab如何在flash中运行

Other Parts Discussed in Thread: MOTORWARE, CONTROLSUITE

在调试motorware的lab时发现都是默认在RAM中运行的!一般proj_labxx.c中都有下面这段代码:

#ifdef FLASH

 // Used for running BackGround in flash, and ISR in RAM

extern uint16_t *RamfuncsLoadStart, *RamfuncsLoadEnd, *RamfuncsRunStart;

#endif

于是我就自己在main.h中定义个一个FALSH

#define FLASH

但是编译会出错,怎么回事?难道还需要修改.cmd文件吗?

  • 顶上去一下,期待答案……

  • Immortal King, 你好

    正如你所说,想要在FLASH中运行需要修改CMD文件,但是不用担心,controlsuite中已经为各种型号的器件做好了,你只要在编译和连接的时候在CCS中选择一下即可。

  • Hi Eric Fu!在motorware的lab中都已经包含了F28069F_ram_lnk.cmd(我用的MCU是28069F)文件,你说的“但是不用担心,controlsuite中已经为各种型号的器件做好了,你只要在编译和连接的时候在CCS中选择一下即可。”该怎么操作呢!?谢啦!期待你的回答!

  • 找遍了motorware的User's Guide有讲到代码可在FLASH中运行但是就是没有讲如何修改代码让代码下载到FLASH中运行的!还有看到drv.c文件中有个DRV_setupFlash函数不知道是不是类似于controlSUITE中F28069的example中Flashinit()函数,初始化FLASH的函数。

  • 这个错误主要是CMD文件中没有定义_RamfuncsLoadStart等,更改请参照controlsuite中的F28069.cmd中进行添加  

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

    还有记得将.text 段定位到Flash中,如:   .text               : > FLASHA,     PAGE = 0

  • DRV_setupFlash函数也是初始化Flash的,设置等待周期等,和FlashInit()函数功能一样,如:

    DRV_setupFlash中的:

      FLASH_setStandbyWaitCount(obj->flashHandle,FLASH_STANDBY_WAIT_COUNT_DEFAULT);

      FLASH_setActiveWaitCount(obj->flashHandle,FLASH_ACTIVE_WAIT_COUNT_DEFAULT);

    和FlashInit()中的:

      FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
       FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;

    是一样的。谢谢!