完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 硬汉Eric2013 于 2016-2-18 15:19 编辑 完整PDF教程和例子下载:http://pan.baidu.com/s/1c0V2Why
【RTX操作系统教程】第25章 使用RTX时注意事项总结.pdf
(359.31 KB, 下载次数: 17
)
第25章 使用RTX时注意事项总结 本章节主要是总结一下RTX使用中几个常见问题的解决办法。 25.1 RTX使用中注意事项 25.2 总结 25.1 RTX使用中注意事项 下面都是初学者容易犯错误的地方,特此总结一下,望初学者在使用时注意这些问题。 25.1.1 MDK版本问题 使用教程配套的例子请务必使用MDK4.74。 (1)每个MDK的安装目录里面都会有一个RTX源码,对于MDK4.XX来说,大家使用的那个MDK版本,务必使用那个MDK版本下面的RTX,这样使用MDK自带的RTX调试组件时,才能显示正确的调试信息。 (2)当前STM32F103和STM32F407开发板使用的RTX源码是MDK4.74里面的,KEIL官方已经放弃MDK4系列的更新了,这个版本号是MDK4系列里面最新版本了。如果需要使用MDK自带的RTX调试组件显示信息,请务必使用MDK4.74。 (3)对于MDK5.XX,RTX也在其安装目录里面,但是RTX已经不作为单独版本发布了,它有一个全新的名字叫CMSIS-RTOS RTX。ARM官方在RTX的基础上给RTX又做了一层封装。 25.1.2 外设初始化位置 建议用户将外设初始化放在RTX启动前完成,也就是如下的形式:
这样做的好处就是用户可以提前将特权级寄存器先初始化完成,之后任务运行在非特权级模式。推荐用户将任务工作模式设置为特权级。 25.1.3 中断优先级分组设置 强烈推荐用户将Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407的NVIC优先级分组设置为4,即:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);这样中断优先级的管理将非常方便。此函数在bsp_Init中第一个被调用:
25.1.4 任务优先级分配方案 这个问题在第8章,8.2小节中有详细讲解。 25.1.5 任务栈和系统栈大小的分配 任务栈大小可以通过MDK中自带的RTX调试组件很方便的观察,而系统栈不容易测试,用户可以简单的计算最大的中断嵌套层数,并在此基础上再增加些空间。另外要注意的是,RTX的内核函数都是在SVC中断中调用的,用户也需要把这个考虑到系统栈大小里面,按照官方的说明,最小128字节,推荐256字节。 一般情况下,用户分配1-2KB的系统栈大小即可。 25.1.6 RTX中使用中断注意事项 在RTX系统中使用中断基本上是没有限制的,但是用户要注意以下几个问题。 (1)PendSV中断,Systick中断和SVC 0中断用户不可调用,这三个被RTX占用。 (2)优先级分组必须在RTX系统初始化之前配置好,并推荐将优先级分组设置为4,即16个抢占式优先级,范围0-15,没有子优先级。 (3)对于STM32F103或者STM32F407来说,当用户将优先级分组设置为4的时候,PendSV的中断优先级是15,SysTick的中断优先级也是15,而SVC的中断优先级是14。其余的0-13供用户使用。 25.1.7 保证MDK工程独立性的问题 为了保证MDK工程的独立性,就不得不说下头文件的包含问题,一般用户包含头文件主要有如下两种方式: #include #include #include #include #include “bsp_uart_fifo.h” #include “bsp_led.h” #include “bsp_timer.h” #include “bsp_key.h” (1)<>包含头文件的方式---优先在系统目录下找,对于MDK来说就是优先在MDK的安装目录里面查找,如果找不到就去用户所创建的工程里面找。 (2)“” 包含头文件的方式---优先在当前目录下找,对于MDK来说就是优先在用户所创建的工程里面找,如果找不到就去MDK的安装目录里面查找。 MDK工程的独立性问题就由上面的两种包含方式而引起,如果大家在使用中不注意这个问题的话,有时候很多麻烦的问题就来了,根本原因是MDK的安装目录里面也有芯片厂商库文件和其它的一些源码文件(比如RTX操作系统)。可以想象,比如用户采用下面的方式添加头文件 #include 那么MDK就会优先从安装目录里面去查找,如果用户升级了固件库,但是MDK安装目录里面的是低版本的固件库,那么问题就来了,用户此时使用的固件库头文件是低版本的,而源码文件是高版本的。这时,最好的解决办法就是把MDK中No Auto Includes选项选上。 |
|
相关推荐
|
|
1301 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
805 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1188 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1660 浏览 1 评论
544 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 19:03 , Processed in 0.580298 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号