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