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.

程序在RAM中能运行,在FLASH中不运行



写了一个程序在RAM中能运行,在FLASH中不运行。

电路板烧写别的FLASH例程是可以运行的。

cmd文件用的F28M35H52C1_c28.cmd,没有改动过。

运行程序后,看C变成的汇编代码跑到了如下图所示地方,地址好像是bootrom的地方,不明白为什么会这样

  • 工程中有没有添加“F28M35x_CodeStartBranch.asm”源文件?

  • 原因已经查出,程序中漏掉了一句话#pragma CODE_SECTION(InitFlash, "ramfuncs");

  • 添加了。问题已经查出来了,因为漏了一句话#pragma CODE_SECTION(InitFlash, "ramfuncs");

  • 这句是用于分配InitFlash,为将其copy到RAM运行做准备。

  • 专家您好:

    能否请教下关于28033FLASH操作的问题;

    现在我用28033去做在线升级功能,需要在main函数之前对FLASH进行操作。

    我的做法是:

    先通过修改codestart中的跳转指令。

    代码运行先跳到bootmain()(我的升级功能代码),--->main()(APP代码)

    1.不过现在的问题是:

    我用CCS5烧完程序,设置RESET CPU,在bootmain()与main()中都无法对FLASH进行操作。

    但是设置restart之后,在main()中是可以的。

    我用的是同一段操作flash的代码,而且所需要擦除编程的flash是没有用到的一个块区。

    1.我的cmd文件:

    Flash28_API :
    LOAD = FLASH_BOOT,
    RUN = RAML0_PRG,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    PAGE = 0

    2.我的bootmain()函数

    #pragma CODE_SECTION(BOOT_MAIN,"FlashBoot");

    void BOOT_MAIN (void)

    {

      init();//各种初始化

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

      CallFlashAPI();

    }

    3.调用FLASH函数

    #pragma CODE_SECTION(CallFlashAPI,"Flash28_API");

    CallFlashAPI();//对FLASH进行擦除,编写........

    对照例程做的,感觉没有问题,但是就是不能对FLASH操作。

    能否帮我看下

    谢谢!!