程序中有一段数据需要保存在片上flash中,保证上电后直接从flash中把数据取出来使用。
但是在程序过程中可能对这些数据产生更改。
所以本人思路是:在产生更改前将Flash中的数据取出保存于全局数组中,然后擦除那片扇区,最后将更改之后数据再写入该flash扇区。
目前本人具体做法如下:
对cmd文件中添加了如下内容:
Flash28_API:
{
-lFlash2812_API_V210.lib(.econst)
-lFlash2812_API_V210.lib(.text)
} LOAD = FLASH_GH,
RUN = L0SARAM,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),
PAGE = 0
在主函数初始化过程中将代码拷贝到RAm中:memcpy(&Flash28_API_RunStart,\
&Flash28_API_LoadStart, &Flash28_API_LoadEnd - &Flash28_API_LoadStart);
紧接着进行复制: Flash_CPUScaleFactor = SCALE_FACTOR;
将指针指向空: Flash_CallbackPtr = NULL;
初始化结束后开启看门狗,打开所有中断等一些常规使用。
最后在需要擦除时使用代码如下:
for(i = 0; i < 204; i++)
u_pdobuff[i] = *((long *)FLASH_B + i); //将flash中数据保存于全局数组中,后面会做修改
EALLOW;
DINT;
Flash_Erase(SECTORB, &FlashStatus); //擦除函数
EDIS;
EINT;
遇到的情况就是在运行时,每次运行到擦除函数程序就会跑飞,而且在view -> memoy中看到所有flash中数据全部变为0,reset CPU之后flash中的数据就会恢复过来。
请高手指点迷津! |