带LibOpenCM3的STM32 FreeRTOS
我有一个带有8Mhz Quarz的STM32 BluePill板STM32F103C8,并试图上传一个用LibOpenCM3和FreeRTOS制作的小blink程序。但由于某些原因,FreeRTOS挂起在vTaskStartScheduler中,sys_tick_处理程序也不做任何事情 我没有使用调试器,只是在sys_tick_handler函数中以及vTaskStartScheduler调用之后放置了一个gpio_重置,以测试代码是否得到执行,但它似乎没有做任何事情,我不知道为什么。 代码可在以下位置获得: 更新:我用OpenOCD进行了调试,发现它跳转到了硬错误处理程序中带LibOpenCM3的STM32 FreeRTOS,c,stm32,freertos,libopencm3,C,Stm32,Freertos,Libopencm3,我有一个带有8Mhz Quarz的STM32 BluePill板STM32F103C8,并试图上传一个用LibOpenCM3和FreeRTOS制作的小blink程序。但由于某些原因,FreeRTOS挂起在vTaskStartScheduler中,sys_tick_处理程序也不做任何事情 我没有使用调试器,只是在sys_tick_handler函数中以及vTaskStartScheduler调用之后放置了一个gpio_重置,以测试代码是否得到执行,但它似乎没有做任何事情,我不知道为什么。 代码可在
更新2:UsageFault状态寄存器设置了NOCP位,我发现了问题。如果您在自己的sv_call_handler、pend_sv_handler和sys_tick_handler的处理程序向量实现中调用vPortSVCHandler、xPortPendSVHandler和xPortSysTickHandler,则许多示例都依赖于编译器优化将它们从FreeRTOS直接链接到向量表中。但这在这里不起作用,函数必须由处理器直接调用 将这3行添加到FreeRTOSConfig.h文件的底部,并删除我自己对向量的函数声明,解决了这个问题:
#define vPortSVCHandler sv_call_handler
#define xPortPendSVHandler pend_sv_handler
#define xPortSysTickHandler sys_tick_handler
修复程序如下所述:
对CMSIS进行了描述,但本例中唯一的区别是向量的名称。好的,我发现了问题。如果您在自己的sv_call_handler、pend_sv_handler和sys_tick_handler的处理程序向量实现中调用vPortSVCHandler、xPortPendSVHandler和xPortSysTickHandler,则许多示例都依赖于编译器优化将它们从FreeRTOS直接链接到向量表中。但这在这里不起作用,函数必须由处理器直接调用 将这3行添加到FreeRTOSConfig.h文件的底部,并删除我自己对向量的函数声明,解决了这个问题:
#define vPortSVCHandler sv_call_handler
#define xPortPendSVHandler pend_sv_handler
#define xPortSysTickHandler sys_tick_handler
修复程序如下所述:
它描述了CMSIS,但在这种情况下唯一的区别是向量的名称