App地址偏移后,freertos直接跳入hardfault
本帖最后由 地瓜patch 于 2025-8-21 14:51 编辑功能测试完成后,写了个boot升级程序。将app地址偏移了0x4000后,freertos直接跳入hardfault。
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
{
/* Check the parameters */
assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
assert_param(IS_NVIC_OFFSET(Offset));
SCB->VTOR = NVIC_VectTab | Offset;
}
#define CLI() __set_PRIMASK(1)
#define SEI() __set_PRIMASK(0)
int main(void)
{
/* USER CODE BEGIN 1 */
SEI();
NVIC_SetVectorTable(FLASH_BASE, 0x4000);
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
.......
}
没有boot程序,没有偏移时跑freetrtos程序正常。
内存访问越界? 检查数组和指针访问,所有数组访问是否在有效范围内,指针初始化是否正确。 堆栈溢出? 增加堆栈大小 中断配置错误? FreeRTOS配置不当? 结帖:在boot中跳转app前需要将禁用计数器,清零重载值
页:
[1]