我有一个STM32 BluePill板(STM32F103C8有8 8Mhz夸兹),并试图上传一个由LibOpenCM3和FreeRTOS制作的小闪烁程序。但出于某种原因,FreeRTOS挂在vTaskStartScheduler()中,sys_tick_handler也什么也不做。
我没有使用调试器,只是在sys_tick_handler函数中和vTaskStartScheduler调用之后放置了一个vTaskStartScheduler来测试代码是否被执行,但是它似乎什么也没做,我也不知道为什么。代码可在这里获得:https://gitlab.com/feldim2425/stm32-testing
更新:我用OpenOCD进行了调试,结果显示它跳入了hard_fault_handler更新2: UsageFault寄存器设置了NOCP位。
发布于 2018-09-24 15:59:55
好吧我发现问题了。许多示例似乎依赖编译器优化将vPortSVCHandler、xPortPendSVHandler和xPortSysTickHandler从FreeRTOS直接链接到向量表,如果您在自己的处理程序向量实现中为sv_call_handler、pend_sv_handler和sys_tick_handler调用它们。但这在这里行不通,这些函数必须由处理器直接调用。
将这3行添加到FreeRTOSConfig.h文件的底部,并删除我自己针对向量的函数声明,解决了这个问题:
#define vPortSVCHandler sv_call_handler
#define xPortPendSVHandler pend_sv_handler
#define xPortSysTickHandler sys_tick_handler修补程序在这里描述:4964917.html
它是为CMSIS描述的,但唯一的区别(在本例中)只是向量/处理程序函数的名称。
https://stackoverflow.com/questions/52459810
复制相似问题