基于μC/OS-II的智能窗系统设计

时间:2022-04-01 03:52:42

基于μC/OS-II的智能窗系统设计

摘 要:智能窗在国内智能建筑上获得了广泛的应用。目前,国内大多数公司生产的智能窗都是基于前后台模式进行设计的。以实时操作系统μC/OS-II为基础,简要介绍了基于实时操作系统μC/OS-II的智能窗系统的硬件设计方案,详细介绍了其软件的实现过程,并给出了部分源代码,最后介绍了本智能窗系统的优势所在。

关键词:智能窗;智能建筑;前后台系统;实时操作系统

中图分类号:TP316文献标识码:B

文章编号:1004-373X(2008)07-118-02オ

Design of Smart-Window Based on μC/OS-II

ZHANG Fei,HE Yaqin

(Changzhou Institute of Mechatronic Technology,Changzhou,213164,China)

Abstract:The smart-window is used widely in the intelligent buildings of our country.In current,many companys design smart-window based on foreground/background system .This article briefly introduces the design of hardware about the smart-window based on the real-time operating system μC/OS-II.Moreover,the flow of software is described.Finally,the advantage of this smart-window system is given.

Keywords:smart-window;intelligent building;foreground/background system;real-time operating system

随着电子技术的发展和人民生活水平的不断提高,智能窗已经越来越多地被用到了现代智能化建筑中,他提供住户一个安全、方便的环境。据统计,在未来的几年内,安装智能窗的用户将不断增加。本文讨论了一种基于实时操作系统μC/OS-II的智能窗设计方法。

1 系统功能

本系统功能如下:手动按钮开关窗户;红外遥控窗户的开关;雨天能够自动把窗户关闭;检测到可燃气体自动把窗户打开;遇有盗情,会发出刺耳的报警声,把窗户关闭,并发送一条短消息给住户。

2 硬件设计

CPU的选择是嵌入式系统开发的关键所在。本系统的CPU采用了ATMEL公司生产的AT89S51单片机。主要基于以下几点考虑:相比其他CPU价格便宜;经过扩展后可以移植操作系统μC/OS-II;51单片机在国内研究的较早,技术成熟。系统还包括电源、存储、按键、煤气、湿度、盗情、电机等基本模块。系统架构如图1所示。

3 软件设计

3.1 μC/OS-II简介

μC/OS-II是一个可移植(portable)、可固化的(romable)和占先式的(preemptive)实时内核,最多可以管理64个任务。μC/OS-II 的源代码公开,绝大部分代码使用标准的ANSIC书写,所以可以方便地移植到很多不同种类的处理器或控制器上。μC/OS-II中的任务包括休眠态、就绪态、运行态、挂起态和被中断态5种状态。

图1 系统整体框图

3.2 软件方案

3.2.1 设计思路简介

本设计的软件和以往设计的前后系统不同,采用了多任务机制来设计应用程序。CPU对大多数事件的处理都是放在任务中完成,而各个任务都是由对应的信号量激活的。信号量可以由任务或外中断INT0来发送,各个任务和外中断INT0之间的关系如图2所示。

图2中的箭头代表向相应的任务发送相应的信号量,箭头的起始端为信号量发送方,箭头的末端为信号量的接收方。

图2 各任务和外中断之间的关系图

3.2.2 系统任务和资源分配

μC/OS-II是一个实时多任务操作系统,所以把系统软件分割成多个任务,每个任务负责完成部分工作,系统功能由多个任务协作完成。任务分配方案的好坏将直接影响软件的编写的效率和性能。本系统的任务分配如表1所示。

表1 系统任务表

任务名称

起始任务starttask( )

煤气处理任务mqtask( )

盗情处理任务dqtask( )

下雨处理任务sdtask( )

红外遥控任务hwtask( )

手动关窗任务zatask( )

手动开窗任务yatask( )

电机开窗任务openwintask( )

电机关窗任务closewintask( )

短消息任务msgtask( )

在起始任务中建立了一系列信号量来协调各个任务的执行,各信号量的作用如表2所示。

表2 系统资源分配表

信号量作用

Sem[CD#*2]mq=OSSemCreate(0)唤醒煤气处理任务

Sem[CD#*2]dq=OSSemCreate(0)唤醒盗情处理任务

Sem[CD#*2]sd=OSSemCreate(0)唤醒下雨处理任务

Sem[CD#*2]hw=OSSemCreate(0)唤醒红外遥控处理任务

Sem[CD#*2]za=OSSemCreate(0)唤醒手动关窗任务

Sem[CD#*2]ya=OSSemCreate(0)唤醒手动开窗任务

Sem[CD#*2]open=OSSemCreate(0)唤醒电机开窗任务

Sem[CD#*2]close=OSSemCreate(0)唤醒电机关窗任务

Sem[CD#*2]msg=OSSemCreate(0)唤醒短消息任务

3.2.3 主要任务描述

首先建立一个主函数(main函数),在主函数中调用OSInit()函数初始化μC/OS-II,然后建立第一个任务(起始任务),最后调用OSStart()函数启动多任务。当然,在建立主函数之前必须定义各个任务的堆栈,系统的全局变量和相关宏。主函数的程序清单如下:

void main (void)

{

OSInit();

OSTaskCreate(StartTask,(void*)0,&StartTaskStk[TASK[CD#*2]STK[CD#*2]SIZE-1],0);

OSStart();

}

起始任务(StartTask)[HTSS] 是系统建立的第一个任务,他主要有3个功能:完成对定时器、外中断0和串行口的初始化;建立系统所要用到的信号量;建立系统的其他任务。

起始任务部分程序清单如下:

void starttask ( void* pdata )

{

timerInit();//定时器初始化

intinit(); //外中断0初始化

serinit(); //串行口初始化

上一篇:新型的基于PAL的3D亮/色分离电路 下一篇:基于CPLD的直流无刷电机驱动电路设计