搜索

[技术讨论] ac7811 +freeRTOS+eflash

[复制链接]
3148|3
手机看帖
扫描二维码
随时随地手机跟帖
sjyf|  楼主 | 2021-7-31 23:21 | 显示全部楼层 |阅读模式
本帖最后由 sjyf 于 2021-7-31 23:43 编辑

ac7811 跑上了freeRTOS,需要永久存储少量数据,对flash不操作,程序能正常执行,一旦读或者读写eflash,在运行FREERTOS时,就会出现就会死机,进入hardfault中断。

请教各位,会是什么原因造成的?

一下是操作eflash的代码

void HoldVal_Init(void)
{
    //
    uint8_t rsl;
   
    EFLASH_UnlockCtrl();
    rsl = EFLASH_Read(USER_FLASH_PAGE_START, (uint32_t*)&hold_val, sizeof(struct T_HOLDVAL));
    if (rsl != EFLASH_STATUS_SUCCESS)
        return;
    if (hold_val.uMagic != USERMAGIC)
    {
        
        hold_val.uMagic = USERMAGIC;
        hold_val.uId = DEFAULT_UID;
        //
        
        rsl = EFLASH_PageErase(USER_FLASH_PAGE_START);     ///<erase page
    if (rsl != EFLASH_STATUS_SUCCESS)
            return;
    rsl = EFLASH_PageEraseVerify(USER_FLASH_PAGE_START);   ///< verify erase state
    if (rsl != EFLASH_STATUS_SUCCESS)
            return;
   
        rsl = EFLASH_PageProgram(USER_FLASH_PAGE_START, (uint32_t*)&hold_val, sizeof(struct T_HOLDVAL));
   
    }
    EFLASH_LockCtrl();
}


和FreeRTOS结合处:
    //Rs485_Init();
    HoldVal_Init();
    vTask_Create();
   
    vTaskStartScheduler();
   
   
    while(1);

执行到vCreate,就会当机,执行的最后一条指令,从跟踪来看是 POP指令
,如果在vCreate之前,直接执行while(1) 循环,程序可以执行,   


最后,写flash我是从0x0803F800,也就是最后一页写的,看过这段内存,全是0xFF,大概率不存在冲撞。
感觉像读写falsh,修改程序的堆栈。

请各位高手不吝指教。谢谢。

使用特权

评论回复

相关帖子

梦想成真1| | 2021-8-1 08:20 | 显示全部楼层
不知道怎么解决,

使用特权

评论回复
sjyf|  楼主 | 2021-8-1 08:57 | 显示全部楼层
哎,确实是堆栈的问题,

rsl = EFLASH_Read(USER_FLASH_PAGE_START, (uint32_t*)&hold_val, sizeof(struct T_HOLDVAL));

这一句是有问题的,EFLASH_Read是按照每次读32Bits的数,而sizeof给出的是字节数,也就是hold_val已经超出它的地址范围了。 造成的结果就不可预料了。

修改后,功能正常。

结贴。

使用特权

评论回复
这是神魔节奏| | 2021-8-25 11:43 | 显示全部楼层
我也是,不过我的数据少,直接通过内存地址读数据,我在想,写的写的时候是不是也可以通过WriteBitsValue来直接写呢?

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 21小跑堂 打赏20.00元   4天前

    打赏帖:#申请原创# @21小跑堂@21小跑堂@21小跑堂 大 ...

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:希望我的问题都能回答

  • 21小跑堂 打赏4.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:参加欧姆龙在线研讨会

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:本次讲座问题截图

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:学习学习再学习

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:5

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 1 火星国务卿 得到打赏 ¥425.00
  • 2 yanzhengxin1 得到打赏 ¥300.00
  • 3 gaoyang9992006 得到打赏 ¥265.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 两只袜子 得到打赏 ¥155.00
  • 8 yangjiaxu 得到打赏 ¥155.00
  • 9 cr315 得到打赏 ¥150.00
  • 10 elephant00 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表