完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
转 本章节主要是总结了FreeRTOS使用中几个常见问题的解决办法。
34.1 使用FreeRTOS注意事项 34.2 FreeRTOS官方整理的FAQ 34.3 总结 34.1 使用FreeRTOS注意事项 下面都是初学者容易犯错误的地方,特此总结一下,望初学者在使用时注意这些问题。 34.1.1 MDK和IAR版本问题 IDE:支持两种IDE开发环境,MDK和IAR (1)用MDK4.7X或者MDK5.XX均可,保证支持STM32F103,F407和F429即可(不可以使用MDK4.7X以下版本,一方面是不支持F429,另外就是FreeRTOS V8.2.3要用到C代码中嵌套汇编代码,MDK4.7X以下版本是不支持的)。 (2)IAR固定使用IAR7.5版本,由于IAR向下兼容性稍差,别的版本未做支持。 |
|
相关推荐
|
|
34.1.2 FreeRTOS的初始化流程
推荐的初始化流程如下,本教程配套的所有例子都是采用的这种形式,当然,不限制必须采用这种初始化方式,适合自己项目的才是最好的: 复制代码 int main(void) { /* 在启动调度前,为了防止初始化STM32外设时有中断服务程序执行,这里禁止全局中断(除了NMI和HardFault)。 这样做的好处是: 1. 防止执行的中断服务程序中有FreeRTOS的API函数。 2. 保证系统正常启动,不受别的中断影响。 3. 关于是否关闭全局中断,大家根据自己的实际情况设置即可。 在移植文件port.c中的函数prvStartFirstTask中会重新开启全局中断。通过指令cpsie i开启,__set_PRIMASK(1) 和cpsie i是等效的。 */ __set_PRIMASK(1); /* 硬件初始化 */ bsp_Init(); /* 创建任务 */ AppTaskCreate(); /* 创建任务通信机制 */ AppObjCreate(); /* 启动调度,开始执行任务 */ vTaskStartScheduler(); /* 如果系统正常启动是不会运行到这里的,运行到这里极有可能是用于定时器任务或者空闲任务的 heap空间不足造成创建失败,此要加大FreeRTOSConfig.h文件中定义的heap大小: #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) ) */ while(1); } |
|
|
|
|
|
34.1.3 中断优先级分组设置
强烈推荐用户将Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407以及F429的NVIC优先级分组设置为4,即:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);这样中断优先级的管理将非常方便。此函数在bsp_Init中第一个被调用: 复制代码 /* ********************************************************************************************************* * 函 数 名: bsp_Init * 功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。 * 全局变量。 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void bsp_Init(void) { /* 优先级分组设置为4,可配置0-15级抢占式优先级,0级子优先级,即不存在子优先级。*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); bsp_InitUart(); /* 初始化串口 */ bsp_InitLed(); /* 初始LED指示灯端口 */ bsp_InitKey(); /* 初始化按键 */ } |
|
|
|
|
|
34.1.5 任务栈和系统栈大小的分配
任务栈的大小及其溢出检测,我们在第11章进行了详细讲解,而系统栈不容易测试,用户可以简单的计算最大的中断嵌套层数,并在此基础上再增加些空间。 一般情况下,用户分配1-2KB的系统栈大小即可。 |
|
|
|
|
|
34.1.6 FreeRTOS中使用中断注意事项
对于初学者来说,首先,务必要把第12章:FreeRTOS中断优先级配置弄明白,非常重要。其次,FreeRTOS中断方式的同步或者通信机制,在教程中都有配套的例子及其使用注意事项,使用时务必要注意。另外,用户要注意以下两个问题,在前面的章节中也有啰嗦过: (1)PendSV中断,SysTick中断和SVC 0中断用户不可调用,这三个被FreeRTOS占用。 (2)对于STM32F103,STM32F407和STM32F429来说,当用户将优先级分组设置为4的时候,PendSV的中断优先级是15,SysTick的中断优先级也是15,而SVC的中断优先级是0。其中SVC中断,仅在系统启动的时候调用了一次。 |
|
|
|
|
|
34.2 FreeRTOS官方整理的FAQ
官方总结的问题汇总地址:http://www.freertos.org/FAQ.html |
|
|
|
|
|
34.3 总结
这里仅为大家总结了七条常见问题,使用中还会遇到其它的问题,望初学者不断积累这方面的经验,让自己的工程代码更加健壮。 |
|
|
|
|
|
386 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1670 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1123 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1005 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1229 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12018 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 12:17 , Processed in 0.898017 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号