fel*_*425 2 c stm32 freertos libopencm3
我有一个 STM32 BluePill 板(带有 8Mhz Quarz 的 STM32F103C8),并尝试上传一个用 LibOpenCM3 和 FreeRTOS 制作的小闪烁程序。但由于某种原因,FreeRTOS 在 vTaskStartScheduler() 中挂起,sys_tick_handler 也没有执行任何操作。
我没有使用调试器,只是在 sys_tick_handler 函数内放置了一个 gpio_reset ,并在 vTaskStartScheduler 调用之后测试代码是否被执行,但它似乎没有做任何事情,我不明白为什么。代码可以在这里找到:https ://gitlab.com/feldim2425/stm32-testing
更新:我用 OpenOCD 进行调试,发现它跳入了 Hard_fault_handler 更新 2:UsageFault-Status-Register 设置了 NOCP 位
好的,我发现了问题。如果您在自己的 sv_call_handler、pend_sv_handler 和 sys_tick_handler 处理程序向量实现中调用它们,许多示例似乎依赖编译器优化将 FreeRTOS 中的 vPortSVCHandler、xPortPendSVHandler 和 xPortSysTickHandler 直接链接到向量表中。但这在这里不起作用,这些函数必须由处理器直接调用。
将这 3 行添加到 FreeRTOSConfig.h 文件的底部并删除我自己的向量函数声明修复了问题:
#define vPortSVCHandler sv_call_handler
#define xPortPendSVHandler pend_sv_handler
#define xPortSysTickHandler sys_tick_handler
Run Code Online (Sandbox Code Playgroud)
它是针对 CMSIS 进行描述的,但唯一的区别(在本例中)只是向量/处理程序函数的名称。
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |