我正在尝试调试基于运行FreeRTOS的STM32F3 uC的应用程序。我在应用程序的线程上下文中的随机位置手动将PSP设置为无效值(例如0),期望触发我的memManageFault/busFault/usageFault。不幸的是,没有执行任何错误处理程序,但是内核在第一次推送到无效堆栈时锁定。我遗漏了什么?
来自锁定状态的更多详细信息:
SCB->SHCSR: 0x74001 (所有三个faultHandlers均已启用、busFault挂起、memFault激活)
SCB->HFSR:0x40000000 (即使定义并启用了所有处理程序,故障也会升级到hardFault )
SCB->CFSR: 0x28601 (BFAR有效,精确错误)
SCB->BFAR/SCB->MMFAR: 0xfffffff7 (我假设sub之后的SP错误)
PRIMASK/FAULTMASK/BASEPRI: 0
MSP: 0x2000ffe0 (仍然有效,处理程序应该可以正常运行)
欢迎任何想法。
发布于 2017-05-16 16:44:07
似乎核心再一次是对的,而我是错的。我犯的错误是,尽管我已经将HardFault_Handler实现为一个裸函数,但所有其他故障处理程序都是用C实现的简单的应用程序故障钩子,试图在它们中断的任何上下文中访问堆栈。不用说,事情很快就变得糟糕起来。
在asm中实现所有处理程序解决了损坏的SP上的核心锁定问题。
发布于 2017-05-16 00:42:29
busFault挂起,memFault active - memFault导致了busError -它杀死了micro
发布于 2017-05-16 04:47:54
异常堆栈使用与当前上下文相同的堆栈。通过提供无效的堆栈指针,您已经阻止了任何异常处理程序能够完成。Lockup专门解决了这种情况。
https://stackoverflow.com/questions/43982894
复制相似问题