关注作者了解更多
我的其他CSDN专栏
过程控制系统
工程测试技术
虚拟仪器技术
可编程控制器
工业现场总线
数字图像处理
智能控制
传感器技术
复变函数与积分变换
单片机原理
线性代数
大学物理
热工与工程流体力学
数字信号处理
光电融合集成电路技术
电路原理
模拟电子技术
高等数学
概率论与数理统计
数据结构
C语言
模式识别原理
自动控制原理
数字电子技术
关注作者了解更多
资料来源于网络,如有侵权请联系编者
目录
9.1 嵌入式操作系统概述
9.1.1 嵌入式操作系统一般结构
9.1.2嵌入式操作系统的特点与分类
9.2 典型嵌入式操作系统μC/OSⅡ
μC/OS-Ⅱ系统的组成
μC/OS-Ⅱ数据类型
μC/OS-Ⅱ的任务及其管理
μC/OS-Ⅱ任务管理服务-创建任务
μC/OS-Ⅱ时间管理服务
μC/OS-Ⅱ通信与同步服务-发送
μC/OS-Ⅱ通信与同步服务-接收
9.3 μC/OS-II的移植
嵌入式操作系统的裁剪
9.4基于μC/OS-Ⅱ下的应用程序程序设计
μC/OS-Ⅱ的初始化与main()函数结构
μC/OS-Ⅱ用户任务的3种结构 -单次任务
μC/OS-Ⅱ用户任务的3种结构 -周期性执行的任务
μC/OS-Ⅱ用户任务的3种结构 -事件触发执行的任务
μC/OS-Ⅱ应用程序设计实例
9.5 μC/OS- Ⅲ简介
9.1 嵌入式操作系统概述
9.1.1 嵌入式操作系统一般结构
9.1.2嵌入式操作系统的特点与分类
一、特点
(1)代码固化存储,执行效率高 (2)可裁剪性 (3)实时性 (4)强稳定性 (5)硬件适应性,可移值性
二、分类
(1)按实时性分类 分为硬实时操作系统和软实时操作系统。
(2)按商业模式分类 按照商业模式,可以把EOS分为商用型EOS和免费型EOS。
μC/OS-Ⅱ是抢占式多任务实时嵌入式操作系统。μC/OS-Ⅱ具有足够的稳定性和安全性。目前最新版本为μC/OS-Ⅲ。
9.2 典型嵌入式操作系统μC/OSⅡ
一、C/OS-Ⅱ的主要特点
(1)公开源码的高质量实时内核
(2)可移植性 μC/OS-Ⅱ可被移植到多种微处理器上。
(3)可裁剪、可固化
(4)时间确定性 绝大多数μC/OS-Ⅱ的函数调用与服务的执行时间都是确定的,其服务的执行时间与系统中运行的任务个数无关。
(5)多任务 μC/OS-Ⅱ可以管理64个任务(版本2.82以后扩充至255个任务)不支持时间片轮转(round-robin)调度机制。
(6)抢占式内核 μC/OS-Ⅱ是抢占式实时内核,在任意时刻都可能发生任务调度。因此,μC/OS-Ⅱ可以支持强实时应用。
(7)多种系统服务 μC/OS-Ⅱ提供很多实时内核所需的系统服务,例如任务管理、时间管理、信号量、事件标志组、互斥信号量、消息队列、内存分区管理等。
μC/OS-Ⅱ系统的组成
μC/OS内核大致可以划分为任务调度、任务管理、时间管理、任务间同步与通信以及内存管理、系统管理等模块。
μC/OS-Ⅱ数据类型
μC/OS-Ⅱ的任务及其管理
μC/OS-Ⅱ的任务由三部分构成:
(1)程序代码
(2)任务堆栈
(3)任务控制块
μC/OS-Ⅱ任务管理服务-创建任务
(1)任务创建
函数OSTaskCreate()和OSTaskCreateExt()都可以创建任务。
OSTaskCreateExt()函数提供了一些附加的功能,但会增加额外的开销。 创建任务函数OSTaskCreate()原型如下:
INT8U OSTaskCreate( void (*task)(void *pd), /* 指向任务代码的的指针 */
void *pdata, /* 任务开始执行时传递给任务的参数的指针 */
OS_STK *ptos, /* 任务堆栈栈顶的指针 */
INT8U prio ); /*分配给任务的优先级*/
如: static OS_STK AppTask1Stk[64];//任务1堆栈
OSTaskCreate( // 任务创建任务1
AppTask1, //任务代码指针
(void *)0, //传递给任务的参数指针 (OS_STK *)&AppTask1Stk[64-1],//任务的堆栈指针 4); //任务1任务优先级为4
μC/OS-Ⅱ时间管理服务
1、延时指定节拍数OSTimeDly()
原型为:
void OSTimeDly (INT16U ticks);参数ticks为要延时的时钟节拍数
2、延时指定具体时间OSTimeDlyHMSM()
原型为:
INT8U OSTimeDlyHMSM (INT8U hours,//时
INT8U minutes, //分
INT8U seconds, //秒
INT16U milli); //毫秒
实际的延时时间是时钟节拍的整数倍。
如延时1小时18分26秒,则调用 如下:
OSTimeDlyHMSM(1,18,26,0);
μC/OS-Ⅱ通信与同步服务-发送
1、释放信号量OSSemPost
INT8U OSSemPost(OS_EVENT *pevent);
2、释放互斥信号量OSMutexPost
INT8U OSMutexPost(OS_EVENT *pevent);
3、释放消息邮箱OSMboxPost
INT8U OSMboxPost(OS_EVENT *pevent, void *pmsg);
4、 释放消息队列OSSenPost
INT8U OSSemPost(OS_EVENT *pevent);
μC/OS-Ⅱ通信与同步服务-接收
1、等待信号量OSSemPend
Void OSSemPend(OS_EVNNT *pevent, INT16U timeout, int8u *err);
2、等待互斥信号量OSMutexPend
void OSMutexPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);
3、等待消息邮箱OSMboxPend
void *OSMboxPend(OS_EVENT *pevent, INT32U timeout, INT8U *perr);
4、 等待释放消息队列OSQPend
void *OSQPend(OS_EVENT *pevent, INT32U timeout, INT8U *perr);
9.3 μC/OS-II的移植
要使μC/OS-II正常运行,微控制器必须满足以下要求:
微控制器的C编译器能产生可重入代码;
微控制器支持中断,并且能产生定时中断;
C语言可以开/关中断;
微控制器支持一定数量的数据存储硬件堆栈;
微控制器有将堆栈和其他CPU寄存器读出和存储到堆栈或内存的指令。
移植μC/OS-II只需修改OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C这三 个文件的相关函数。
μC/OS-II的体系结构
嵌入式操作系统的裁剪
嵌入式操作系统内核是针对多种处理器而设计的,对于一种处理器,某个应用场合,有些代码是多余的,则需要对代码进行适当的裁剪以满足够用就好的设计原则。
裁剪的目标就是去掉多余的代码,以减少不必要的内存空间。更适应嵌入式系统量体裁衣的要求。
9.4基于μC/OS-Ⅱ下的应用程序程序设计
μC/OS-Ⅱ的初始化与main()函数结构
void main()
{ HW_config(); /* 硬件配置与初始化,包括时钟和使用的外设 */
OSInit(); /* 初始化μC/OS-Ⅱ内核 */
OSTaskCreate(Task1, ……); /* 创建用户任务1 */
OSTaskCreate(Task2, ……); /* 创建用户任务2 */
...... OSTaskCreate(Taski, ……); /* 创建用户任务i */
OSStart(); /* 启动多任务调度 */ }
μC/OS-Ⅱ用户任务的3种结构 -单次任务
单次执行的任务通常执行三步操作:
任务准备工作;任务实体;自我删除函数调用。
void Task (void *pdata)
{
任务初始化的准备工作; /* 初始化硬件设备 */
任务实体; /* 完成该任务的具体功能 */
OSTaskDel(OS_PRIO_SELF); /* 任务完成后删除*/
}
μC/OS-Ⅱ用户任务的3种结构 -周期性执行的任务
周期执行的任务一般采用循环结构,并在每次完成具体功能后调用系统延时函数OSTimeDly()或OSTimeDlyHMSM()等待下一个执行周期,并将处理器时间让给其他任务。
void Task (void *pdata)
{任务初始化准备工作; /*初始化硬件设备 */ for ( ; ; )
/* 无限的循环 或while(1)*/
{ 任务实体; /* 完成该任务的具体功能 */
OSTimeDly(n); /*调用系统延时函数等待下一个周期 */
}
}
μC/OS-Ⅱ用户任务的3种结构 -事件触发执行的任务
这类任务的实体代码只有在某种事件发生后才执行。在相关事件发生之前,任务被挂起。事件触发执行的任务一般也采用循环结构,相关事件发生一次,任务实体代码执行一次。
void Task (void *pdata)
{ 任务初始化的准备工作; /* 初始化 */
for ( ; ; ) /* 无限的循环或while(1) */
{
调用获取事件的函数; /* 等待信号量或消息等 */ 任务实体;
/* 完成该任务的具体功能 */
}
}
μC/OS-Ⅱ应用程序设计实例
按照执行周期性任务的程序结构创建四个任务:
任务1每隔100ms 采集电位器电压
任务2 每隔200ms判断电压值并控制蜂鸣器报警
任务3 每隔300ms输出与电压相应的PWM波形控制电机
任务4 每隔500ms在TFT LCD屏显示电压值
打开实验例程中的任务调度应用实验,对照MDK-ARM工程讲解示例。
(1)硬件初始化
(2)操作系统初始化
(3)创建任务并编写任务程序
(4)启动任务调度
9.5 μC/OS- Ⅲ简介
2010年,拉伯罗斯于推出了μC/OS-Ⅲ,他认为μC/OS-Ⅲ并不是μC/OS-Ⅱ的升级版本,而是一个全新的RTOS内核。
μC/OS-Ⅱ是定位于8位和16位以及低端32位处理器的RTOS内核μC/OS-Ⅲ尽管在16位甚至8位处理器上可以运行良好,但其初衷则是主要针对高端32位处理器,这类处理器带有支持优先级调度的指令,且内存资源更丰富。
μC/OS-Ⅲ增加的主要特性包括:
(1)时间片轮转调度
(2)内核对象的数量无限制
(3)任务消息和任务信号
(4)任务级的时钟节拍处理
(5)可针对处理器体系结构进行优化
(6)时间戳
(7)增强的内置性能测试功能