微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于μC/OSⅡ的实时任务模型设计

基于μC/OSⅡ的实时任务模型设计

时间:12-28 来源:互联网 点击:

实时任务间存在互相合作或竞争关系。μC/OSⅡ实时操作系统内核允许并发任务间通过事件、信号量、消息邮箱、消息队列进行通信。实现分为两步:定义通信事件数据类型及初始化;任务编码中适时调用发送和接收函数。

(1)创建任务前,调用内核,定义需要的通信机制数据结构。

(2)发送任务和接收任务调用内核任务通信函数实现编码,发送任务和接收任务可有多个。

2.3 任务创建

将编码完成的任务函数,通过调用内核函数,转换为内核可调度的任务。系统函数INT8U OSTa-skCreate(void(*task)(void*pd),void*pdata,OSSTK*ptos,INT8U prio)的输人数据为:任务代码指针——任务函数名;创建任务运行时传递的指针——可为空值;任务堆栈栈顶指针——任务现场数据;任务优先级——确定任务关键程度。

2.4 任务性能

为确保实时应用程序的实时特性,满足实时软件的性能需求,必须要求实时内核能够控制每个实时任务的响应时间和执行时间。

任务执行时间的测定方法类似。在任务执行代码起始位置开启定时器;在一个任务周期结束时停止计时。反复调试,测得的最大值计为任务的执行时间,又为一个任务最长的一个执行周期,也为控制单个任务功能的执行提供依据。

2.5 任务与μC/OSⅡ实时内核连接

实时应用程序主函数是整个应用程序的执行入口。该函数将应用代码和操作系统内核代码进行连接,形成一个完整的应用代码。主函数一般由以下步骤组成,μc/oSⅡ内核均提供系统函数支持。

(1)初始化μC/OSⅡ操作系统内核;

(2)保存DOS环境;

(3)安装μC/OSⅡ中断等环境参数;

(4)根据需要创建信号量集;

(5)创建多个应用程序任务;

(6)启动多任务管理(任务调度程序)运行。

3 μC/oSⅡ实时任务模型的应用

交通信号灯控制系统是一个常见的实时应用系统。该系统根据时间控制十字路口信号灯的自动转换,其基本功能具有实时系统的基本特点。应用实时任务模型进行该系统的设计与实现。

3.1 系统功能、任务分解、任务通信

(1)应用程序功能说明

十字路口交通信号灯控制十字路口的车辆通过或停止。篇幅所限,控制方式简述如下:东西向绿灯亮时,南北向红灯亮,反之亦然,车辆按同方向灯控制通过。

(2)任务分解说明

设置两个任务分别表示东西向灯task_ew和南北向灯task_ sn。东西向灯任务功能:申请南北向灯任务的同步信号量s_ sn,显示绿灯指定时间,设定显示红灯指定时间,向南北任务发送同步信号量;南北向灯任务功能:申请东西向灯任务的同步信号量s_ew,显示绿灯指定时间,设定显示红灯指定时间,向东西向任务发送同步信号量;两个任务通过两个信号量保持同步切换机制。

(3)任务间通信

根据任务分解得知,创建两个信号量,南北向灯信号量s_sn,初值=1;东西向灯信号量s_ew,初值=O。这样,通过任务代码申请信号量的顺序,可以将十字路口信号灯控制为如下顺序和变化周期:东西向信号灯绿灯一东西向信号灯红灯一南北向信号灯绿灯一南北向信号灯红灯。

(4)任务代码

东西向灯任务代码task_ew()简要流程如下,以下代码为无限循环代码。

①调用内核系统函数申请南北向灯信号量;

②东西向显示绿灯,南北向显示红灯;

③调用内核函数,任务睡眠指定时间;

④调用内核系统函数发送东西向灯信号量。

南北向灯任务代码task_sn()简要流程如下:以下代码为无限循环代码。

①调用内核系统函数申请东西向灯信号量;

②南北向显示绿灯,东西向显示红灯;

③调用内核函数,任务睡眠指定时间;

④调用内核系统函数发送南北向灯信号量。

3.2 任务创建

(1)任务函数代码编码完成后,调用系统函数0S-TaskCreate()创建任务task_sn和task_ew。

(2)每个应用任务的优先级不同,为了使任务按照设定的时间进行红绿灯显示切换,每个任务自动设定睡眠若干时间,任务在睡眠状态下显示状态保持不变。

3.3 任务与uC/OSⅡ实时内核连接

应用程序主函数的主要流程设计如下:

3.4 实时任务性能指标

若该应用系统具有信号灯自动控制改为手动控制,再由手动改为自动控制功能,需要进行如下设计:

(1)中断延迟

设置一个实时任务代表手动控制状态。当按下按键时产生中断,中断事件必须在时限内处理,睡眠上述两个红绿灯任务,将执行切换到手动实时任务。当需要切换到自动状态时,按下对应按键时产生中断,处理该中断,睡眠手动实时任务,唤醒两个红绿灯任务。

(2)抢占延迟

有时根据交通流量变化,需要调整十字路口双方向红绿灯的切换时间。设置一个时间调整任务,该任务优先级较高,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top