打印

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

[复制链接]
2013|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

粉丝