Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带LibOpenCM3的STM32 FreeRTOS_C_Stm32_Freertos_Libopencm3 - Fatal编程技术网

带LibOpenCM3的STM32 FreeRTOS

带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_重置,以测试代码是否得到执行,但它似乎没有做任何事情,我不知道为什么。 代码可在

我有一个带有8Mhz Quarz的STM32 BluePill板STM32F103C8,并试图上传一个用LibOpenCM3和FreeRTOS制作的小blink程序。但由于某些原因,FreeRTOS挂起在vTaskStartScheduler中,sys_tick_处理程序也不做任何事情

我没有使用调试器,只是在sys_tick_handler函数中以及vTaskStartScheduler调用之后放置了一个gpio_重置,以测试代码是否得到执行,但它似乎没有做任何事情,我不知道为什么。 代码可在以下位置获得:

更新:我用OpenOCD进行了调试,发现它跳转到了硬错误处理程序中
更新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,但在这种情况下唯一的区别是向量的名称