你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
【安富莱】【RTX操作系统教程】第25章 使用RTX时注意事...
[复制链接]
baiyongbin2009
提问时间:2016-2-18 15:20 /
问答
是否解决:
完整PDF教程和例子下载:
https://pan.baidu.com/s/1c0V2Why
ãRTXæä½ç³»ç»æç¨ã第25ç« ä½¿ç¨RTXæ¶æ³¨æäºé¡¹æ»ç».pdf
(359.31 KB, 下载次数: 15)
2016-2-18 15:08 上传
点击文件名下载附件
第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启动前完成,也就是如下的形式:
int main (void)
{
/* 初始化外设 */
bsp_Init();
/* 创建启动任务 */
os_sys_init_user (AppTaskStart, /* 任务函数 */
2, /* 任务优先级 */
&AppTaskStartStk, /* 任务栈 */
sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
while(1);
}
复制代码
这样做的好处就是用户可以提前将特权级寄存器先初始化完成,之后任务运行在非特权级模式。推荐用户将任务工作模式设置为特权级。
25.1.3 中断优先级分组设置
强烈推荐用户将Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407的NVIC优先级分组设置为4,即:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);这样中断优先级的管理将非常方便。此函数在bsp_Init中第一个被调用:
/*
*********************************************************************************************************
* 函 数 名: bsp_Init
* 功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
* 全局变量。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void bsp_Init(void)
{
/* 优先级分组设置为4, 优先配置好NVIC */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
bsp_InitUart(); /* 初始化串口 */
bsp_InitLed(); /* 初始LED指示灯端口 */
bsp_InitKey(); /* 初始化按键 */
}
复制代码
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 <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#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<STM32F10x.h>
那么MDK就会优先从安装目录里面去查找,如果用户升级了固件库,但是MDK安装目录里面的是低版本的固件库,那么问题就来了,用户此时使用的固件库头文件是低版本的,而源码文件是高版本的。这时,最好的解决办法就是把MDK中No Auto Includes选项选上。
选上了这个选项以后,就不会从MDK安装目录里面搜索头文件了,除了系统头文件,比stdio.h, string.h等。如下是MDK的help文档对此选项的说明:
教程中配套的例子基本都把这个选项选上了,而且在做RTX的源码方式移植的时候这个选项就很有用了。
25.2 总结
这里仅为大家总结了七条常见问题,使用中还会遇到其它的问题,望初学者不断的积累这方面的经验,让自己的工程代码更加健壮。
赞
0
收藏
0
评论
1
分享
发布时间:2016-2-18 15:20
举报
请先
登录
后回复
1个回答
llx999
回答时间:2018-3-20 15:25:27
a1024a.1 32b0c
多多学习
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表