写了一个程序在RAM中能运行,在FLASH中不运行。
电路板烧写别的FLASH例程是可以运行的。
cmd文件用的F28M35H52C1_c28.cmd,没有改动过。
运行程序后,看C变成的汇编代码跑到了如下图所示地方,地址好像是bootrom的地方,不明白为什么会这样
Hank Zhao:
工程中有没有添加“F28M35x_CodeStartBranch.asm”源文件?
写了一个程序在RAM中能运行,在FLASH中不运行。
电路板烧写别的FLASH例程是可以运行的。
cmd文件用的F28M35H52C1_c28.cmd,没有改动过。
运行程序后,看C变成的汇编代码跑到了如下图所示地方,地址好像是bootrom的地方,不明白为什么会这样
user1088122:
原因已经查出,程序中漏掉了一句话#pragma CODE_SECTION(InitFlash, "ramfuncs");
写了一个程序在RAM中能运行,在FLASH中不运行。
电路板烧写别的FLASH例程是可以运行的。
cmd文件用的F28M35H52C1_c28.cmd,没有改动过。
运行程序后,看C变成的汇编代码跑到了如下图所示地方,地址好像是bootrom的地方,不明白为什么会这样
user1088122:
回复 Hank Zhao:
添加了。问题已经查出来了,因为漏了一句话#pragma CODE_SECTION(InitFlash, "ramfuncs");
写了一个程序在RAM中能运行,在FLASH中不运行。
电路板烧写别的FLASH例程是可以运行的。
cmd文件用的F28M35H52C1_c28.cmd,没有改动过。
运行程序后,看C变成的汇编代码跑到了如下图所示地方,地址好像是bootrom的地方,不明白为什么会这样
seven xie:
回复 Hank Zhao:
专家您好:
能否请教下关于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操作。
能否帮我看下
谢谢!!