首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32 FreeRTOS和LibOpenCM3

STM32 FreeRTOS和LibOpenCM3
EN

Stack Overflow用户
提问于 2018-09-22 18:48:47
回答 1查看 1.1K关注 0票数 1

我有一个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位。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 15:59:55

好吧我发现问题了。许多示例似乎依赖编译器优化将vPortSVCHandler、xPortPendSVHandler和xPortSysTickHandler从FreeRTOS直接链接到向量表,如果您在自己的处理程序向量实现中为sv_call_handler、pend_sv_handler和sys_tick_handler调用它们。但这在这里行不通,这些函数必须由处理器直接调用。

将这3行添加到FreeRTOSConfig.h文件的底部,并删除我自己针对向量的函数声明,解决了这个问题:

代码语言:javascript
复制
#define vPortSVCHandler sv_call_handler
#define xPortPendSVHandler pend_sv_handler
#define xPortSysTickHandler sys_tick_handler

修补程序在这里描述:4964917.html

它是为CMSIS描述的,但唯一的区别(在本例中)只是向量/处理程序函数的名称。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52459810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档