2812API擦除函数跑飞现象求解

[复制链接]
2670|1
 楼主| sqcumt123 发表于 2012-5-21 16:16 | 显示全部楼层 |阅读模式
程序中有一段数据需要保存在片上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中的数据就会恢复过来。

请高手指点迷津!
五谷道场 发表于 2012-5-21 16:35 | 显示全部楼层
有错误提示没?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

2107

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部