TI中文支持网
TI专业的中文技术问题搜集分享网站

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

写了一个程序在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操作。

能否帮我看下

谢谢!!

赞(0)
未经允许不得转载:TI中文支持网 » 程序在RAM中能运行,在FLASH中不运行
分享到: 更多 (0)