| 
 
| 本帖最后由 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,修改程序的堆栈。
 
 请各位高手不吝指教。谢谢。
 
 
 | 
 |