新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2018-10-25
- 在线时间
- 6 小时
|
发表于 2020-8-2 10:46:23
|
显示全部楼层
在原子哥407开发板的例程的基础上,改造移植到427上。创建队列,接收串口数据,另创建一个task处理串口数据队列中的数据;下载运行后,程序功能实现正常,不过串口老是打印Error:..\OS\portable\RVDS\ARM_CM4F\port.c,784,网上排查发现大多数人也遇到,因此把解决过程记录下来。
(1),排查中断向量组设置,是否在初始化串口的时候,设置成NVIC_PriorityGroup_2了,FreeRTOS要用NVIC_PriorityGroup_4;(注释到原子哥串口初始化代码中中断向量配置部分代码)。
(2),修改为NVIC_PriorityGroup_4后,再运行发现又报Error:..\OS\portable\RVDS\ARM_CM4F\port.c,768,此时是由于优先级出问题了。由于在FReeRTOSConfig.h中#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
这里说明了:说当这个宏定义配置为 5 的时候,中断优先级数值在 0、 1、 2、 3、4 的这些中断是不受 FreeRTOS 管理的,不可被屏蔽,也不能调用 FreeRTOS 中的 API 函数接口,而中断优先级在 5 到 15 的这些中断是受到系统管理,可以被屏蔽的。因此需要将串口的优先级调到大于5,小于15,具体可参见下面链接中网友的解释。
https://blog.csdn.net/qq_3835182 ... earnPai2-3.nonecase。
再次编译运行,发现OK!
|
|