嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX

本篇笔记将简单介绍RTX,包括基本架构,如何在Keil中配置。需要安装ARM-MDK和一块硬件板,笔记以STM32F4Discovery为例子。

1.为什么要用RTOS?
尽管把所有程序放在一个大的循环里顺序执行,总是可能的(甚至很多时候是足够的胜任任务的),但是这样做有好几个明显的缺点:
• 过分依赖中断 ISR(Interrupt Service Routine, 中断服务例程)
• 同步不同的ISR不容易
• 可预测性和延展性很差(大量的ISR,甚至是中断嵌套)
• 对局部的修改会对整个系统有水花效应(没有模块化,牵一发而动全身)
RTOS主要是把要执行的运算包装在小的task里面,这样好的好处是:
• 更好的程序流(program flow)和反应
• 多任务(尽管这是假象)
• 简单的ISR,强的决定性
• 更好的进程间通信
• 更好的资源管理
• 最关键的是,开发成本低!

一个不成文的小经验:如果源程序大于1MB,那就有必要用RTOS了!

2.为什么不要用RTOS?
当然,也有很多情况下我们不希望用RTOS的:
• 项目简单
• 不想学RTOS
• RTOS尽管性能方便出色,但不是最优的!(好比用汇编还是用C,有经验的程序员可以写出比编译器效率更高的代码,可是编译器大大简化开发过程。)如果需要极致的性能优化,那可能RTOS不是你的第一选择,毕竟RTOS是有内存和运行overhead的。
• 开发RTOS很耗时间
• 不是所有RTOS都是免费的

3.为什么RTX?
为什么选RTX不选别的RTOS,例如FreeRTOS?
• 免费(royalty-free,买断式的授权)
• 好上手
• 对硬件要求低
• 和ARM软硬件兼容性好(ARM-MDK自带)
• 可以查看源代码
其实主要还是看应用,RTX在行业里声誉还是很好的,稳定性强,开发成本低,而且基本功能齐全。

4.RTX的结构

RTX其实是Keil Real-Time Library (RTL)的核心,这个RTL有很多部分的,都是在RTX kernel基础上库。 RTX Kernel本身的话,结构大概如下图:

主要的组件有:mutex互斥锁,memory pool内存池,mailbox邮箱,time(timer)定时器, event事件, semaphore旗语或信号灯,task management进程管理等等和最核心的Scheduler排程器(进程调度器)。

5.移植到RTX上很简单!

移植一个现有的ARM-MDK工程到RTX上非常简单:
1.在工程配置中选择RTX Kernel作为你的操作系统,如下图:
 

2.在你的main.c里添加头文件RTL.H:

#include <RTL.h> 

3.复制RTX_Conf_CM.文件到你的工程里。这个文件可以在<<YourKeil Directory>>\ARM\RL\RTX\Config 路径下找到。
4.将你原有的函数改造成task,就是在函数返回类型前添加标记 __task (双下划线) 例如:

__task void task(void){
for(;;){  //...     }
}  

5.初始化RTX并创建第一个task,例如:

os_sys_init(task);

基本就这样,具体的关于Task的API,后面的笔记会继续介绍。

6.几个相关的文件
完成上述几步后,你会发现你的工程里主要多了这三个文件:
• RTL.h
• RTL_Conf_CM.c
• RTX_lib.c
第一个是整个RTL的API函数签名。第二个是RTX的配置文件,你可以通过configuration wizard提供的GUI去配置你的OS。最后一个是内核的配置文件,有一些可以实时调用的配置函数。

7.RTX的配置
这里多说说第二个文件,你可以使用text editor去修改代码,也可以使用configuration wizard,如下图:
 
这里先逐项简单介绍这里的选项:
• 并行的task数
• 用户设定堆栈的task数
• 预设堆栈大小
• 检查是否堆栈溢出
• 是否在kernel mode下运行?这个意思是一般的task是否也在kernel mode下运行,一般不勾选。
• 硬件时钟,CM系列的Core SysTick就是专门为OS所设置的,所以如果你原来就有用到这个timer的话,你的移植可能会出现问题。
• 硬件时钟频率
• 一个tick的时间,预设是10ms,这个和delay函数和排程器有关
• 是否轮转式排程?
• 轮转式排程的时间片,如果是5,那就是5*10ms=50ms(和tick值有关)
• 用户时钟数
• ISR队列的大小
一般主要调的就时钟频率和排程的设置。

8.题外话-CMSIS-RTOS 和 RTX
uVision5提供的RTOS是CMSIS-RTOS,有点让人觉得摸不着头脑。其实CMSIS-RTOS是在RTX上的另一层封装。这样做的意义在于,建立在不同RTOS(例如RTX和FreeRTOS)的项目可以用同一套API。对于大部分ARM的核来说,其实其底层就是RTX。
 
所以其实本质上是一个东西,只是API名称不同。使用CMSIS-RTOS 的好处就是稍微强的移植性。但是考虑到ARM的市场占有和他们RTX本身的兼容性,不用CMSIS-RTOS好像更好。而且两层封装,很容易把人弄晕。

当然,如果有需要,可以参考官方文档:移植RTX到CMSIS-RTOS。

文章转载自:http://blog.csdn.net/raym0ndkwan/article/details/32859989

嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX相关推荐

  1. 嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理

    嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理 上一节简单记录了进程task.有了进程以后,我们需要关心怎么样分配CPU资源(或者运行时间)给每个进程.那么就要引入排程(scheduling) ...

  2. 嵌入式OS入门笔记-以RTX为案例:三.初探进程

    嵌入式OS入门笔记-以RTX为案例:三.初探进程 1.理论     进程,英文称呼很多Process, Task 等等,一般通用操作系统称Process的比较多,各种称呼涵义稍微有不一样.一般而言,进 ...

  3. 嵌入式OS入门笔记-以RTX为案例:一.简介

    嵌入式OS入门笔记-以RTX为案例:一.简介 最近在做OS相关的项目,一方面涉及到大量(通用)操作系统的概念和理解,另一方面要深入到一个小实时操作系统的源代码中,并在此操作系统上开发应用.虽然说内容上 ...

  4. 嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板

    嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板 涉及当调度优先级,会有很多问题,本文中,优先调度和一些战略的主要问题,以应付. 有几个概念如下:(priority invers ...

  5. Python数据分析入门笔记9——数据预处理案例综合练习(男篮女篮运动员)

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  6. Python数据分析入门笔记6——数据清理案例练习

    系列文章目录 Python数据分析入门笔记1--学习前的准备 Python数据分析入门笔记2--pandas数据读取 Python数据分析入门笔记3--数据预处理之缺失值 Python数据分析入门笔记 ...

  7. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  8. 谷歌JAX快速入门笔记详解和案例

    一. 什么是JAX? JAX最初由谷歌大脑团队的 Matt Johnson.Roy Frostig.Dougal Maclaurin 和 Chris Leary 等人发起,借助 Autograd 的更 ...

  9. 嵌入式开发——基于小熊派的智慧农业案例(二)

    本组设计的功能描述(含所有实现的模块的功能) 基于小熊派的智慧农业案例 实时监测环境中温湿度变化及光照变化 通过NB-IOT通信,将数据传至云端,实现云端实时检测. 通过控制电机和补光灯的启动条件,实 ...

最新文章

  1. JavaScript学习系列6 充实文档的内容
  2. SAE上传web应用(包括使用数据库)教程详解及问题解惑
  3. Requirejs2.0笔记
  4. php随机不相同整数,生成固定范围不重复随机整数(JSPHP)
  5. geotools学习(一)IntelliJ IDEA搭建快速入门示例.pdf
  6. linux 搭建任务队列集群,beanstalkd任务队列 linux平台安装测试
  7. 江苏有保障的计算机应用技术,2022年江苏单招计算机应用技术专业公办学校名单...
  8. rx.observable_使用Java 8 CompletableFuture和Rx-Java Observable
  9. 【CSS3】将截断的文字可选的显示出来
  10. Bailian2887 能被3,5,7整除的数【入门】
  11. 【java笔记】缓冲流
  12. 汇编语言复习摘要六——包含多个段的程序
  13. 在chrome中通过getComputedStyle()获取透明度的问题
  14. 数据库基础教程(一)
  15. 用Python下载抖音无水印视频
  16. 全基因组重测序数据分析
  17. 单反镜头焦距光圈与景深的关系
  18. (原创)梅子与锤子的一生(光阴故事)
  19. DX9的一些方法介绍-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(9)
  20. mtk设备模型之LCM--学习

热门文章

  1. win7在未关闭vmware情况下直接关机,导致虚拟机无法克隆
  2. backtrader指标
  3. 【牛客刷题记录】2021-03-10
  4. python 第三方模块 yaml - 处理 YAML (专门用来写配置文件的语言)
  5. TensorFolw 报错
  6. mac eclipse tomcat mysql_mac下使用eclipse+tomcat+mysql开发 j2ee(一)
  7. tornado学习笔记day07-同步与异步
  8. Mysql数据库使用总结
  9. android studio运行手机时出错怎么解决_小程序 android ios h5解决方案
  10. 斯柯达柯珞克显示服务器错误,斯柯达柯珞克原来还有四驱的版本,不信你看!...