本文讨论了一种基于实时操作系统μ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)、可固化的(rom-able)和占先式的(preemptive)实时内核,最多可以管理64个任务。μC/OS-II的源代码公开,绝大部分代码使用标准的ANSIC书写,所以可以方便地移植到很多不同种类的处理器或控制器上。μC/OS-II中的任务包括休眠态、就绪态、运行态、挂起态和被中断态5种状态。
3.2软件方案
3.2.1 设计思路简介
本设计的软件和以往设计的前后系统不同,采用了多任务机制来设计应用程序。CPU对大多数事件的处理都是放在任务中完成,而各个任务都是由对应的信号量激活的。信号量可以由任务或外中断INT0来发送,各个任务和外中断INT0之间的关系如图2所示。
图2中的箭头代表向相应的任务发送相应的信号量,箭头的起始端为信号量发送方,箭头的末端为信号量的接收方。
3.2.2系统任务和资源分配
μC/OS-II是一个实时多任务操作系统,所以把系统软件分割成多个任务,每个任务负责完成部分工作,系统功能由多个任务协作完成。任务分配方案的好坏将直接影响软件的编写的效率和性能。本系统的任务分配如表1所示。
在起始任务中建立了一系列信号量来协调各个任务的执行,各信号量的作用如表2所示。[page]
3.2.3 主要任务描述
首先建立一个主函数(main函数),在主函数中调用OSInit()函数初始化μC/OS-II,然后建立第一个任务(起始任务),最后调用OSStart()函数启动多任务。当然,在建立主函数之前必须定义各个任务的堆栈,系统的全局变量和相关宏。主函数的程序清单如下:
起始任务(StartTask) 是系统建立的第一个任务,他主要有3个功能:完成对定时器、外中断0和串行口的初始化;建立系统所要用到的信号量;建立系统的其他任务。
起始任务部分程序清单如下:
电机开窗任务(openwintask) 在电机开窗任务中首先等待信号量sem_open。该信号量是由煤气处理任务、红外遥控处理任务和手动开窗任务发送的。如果其他任务发送了该信号量,程序就设置电机转动方向,并控制p3.4送出电机转动脉冲,直到窗户被打开。
电机关窗任务(closewintask) 该任务必须在信号量sem open有效时才会被激活。信号量sere_open有下雨处理任务、红外遥控处理任务和手动关窗任务发送。
关键字:uCOS-II 智能窗系统 AT89S51
引用地址:
基于uC/OS-II的智能窗系统设计
推荐阅读最新更新时间:2024-03-16 13:37
ucos-ii示例5:消息队列测试
环境: 主机:WIN8 开发环境:MDK4.72 ucgui版本:3.90 ucos版本:ucos-ii mcu: stm32f103VE 说明: 本示例中task1时间片为1s,task2时间片为8s。task1每秒往消息队列写入1个数据,task2全部读取出来。所以task2每次能读到8个数据。 注意: 1.消息队列需要一个指针数组指向消息 2.应该有一个固定的消息数组存储消息,不应将局部变量填入发送消息函数 3.QSQPost为先进先出函数(FIFO),QSQPostFornt为后进先出函数(LIFO) 效果图: 源码: #define TASK_STK_SIZE 512 /***********
[单片机]
AT89S51单片机的认识和管脚功能
AT 89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMELAT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89S51,它将计算机的功能都集成到这个芯片内部去了,就这么一个小小的芯片就能构成一台小型的电脑,因此叫做单片机。 它有40个管脚
[单片机]
uCOS-II在STM32上的移植步骤
前言: 说点废话,网上有很多关于uCOS-ii移植的文章,好多都是千篇一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。。。这方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下来,也给大家做做参考。 首先,简单总结一下移植的大概过程: (1) 去uC/OS-ii官网下载你要移植芯片CPU的相关案例,不一定完全对应,那就找相应系列吧。 (2) 编程环境一般有两种,分别是IAR和MDK,这个根据你自己的编程环境进行下载。 (3) 本案例需要将uC/OS-II 移植到STM32F103ZET6上,而我使用的编程环境是MDK,很遗憾,官网上提供的案例是基于
[单片机]
基于C51单片机的计时器设计原理图
如下图所示,在 AT89S51 单片机的 P0 和 P2 端口分别接有两个共阴数码管 P0 口驱动显示秒时间的十位,而 P2 口驱动显示秒时间的个位。 1 . 把 “ 单片机系统 ” 区域中的 P0.0/AD0 - P0.7/AD7 端口用 8 芯排线连接到“ 四路静态数码显示模块 ” 区域中的任一个 a - h 端口上;要求: P0.0/A D0对应着 a , P0.1/AD1 对应着 b , …… , P0.7/AD7 对应着 h 。 2 . 把 “ 单片机系统 ” 区域中的 P2.0/A8 - P2.7/A15 端口用 8 芯排线连接到 “ 四路静态数码显示模块 ” 区域中的任一个 a - h 端口上;要求: P
[单片机]
AT89S51单片机原理与应用
一、AT89S51与AT89C51的区别 这里,初学者要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在,MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。 有些文献甚至也将8051泛指MCS-51系列单片机,8051是早期的最典型的代表作,由于MCS-51单
[单片机]
AT89S51位操作类指令
AT89S51单片机内部有一个位处理机,对位地址空间具有丰富的位操作指令。 1.数据位传送指令 这组指令的功能是把由源操作数指定的位变量送到目的操作数指定的单元中。其中一个操作数必须为进位标志,另一个可以是任何直接寻址位,不影响其他寄存器或标志位。例如: 注意,这里的06H是位地址,20H是内部RAM的字节地址。06H是内部RAM 20H字节位6的位地址。 2.位变量修改指令 这组指令将操作数指定的位清O、求反、置1,不影响其他标志位。例如: 3.位变量逻辑与指令 第1条指令的功能是,直接寻址位与进位标志位(位累加器)进行逻辑与运算,结果送回到进位标志位中。
[单片机]
基于Matlab的小型温度检测系统设计
1 前言 温度是表征环境的一个重要的参数。在工程领域,尤其像工程热力学等,温度检测非常普遍,对温度精确测量以便实时控制也显得尤为重要。 在控制系统中,上位机与下位机之间实现通信的方法和应用平台很多。目前,以VB和VC开发的通信软件较多,然而,这类软件虽然功能完善,但是数据采集到计算机后要进行各种处理(例如滤波,系统辨识,曲线拟合等)就显得不方便,编程比较复杂。Matlab具有强大的数据处理能力及功能丰富的工具箱,被广泛的应用于信号处理、自动控制等领域 。它编程语言简单易学,利用简单的命令就可以代替复杂的代码,极大地提高了开发效率。 本实验基于Matlab环境下设计了一个小型温度检测系统,下位机使用AT89S51单片机和DS18B
[单片机]
uC/OS-II在ARM系统上的移植与实现
0 引言 在开发嵌入式系统时,一般选择基于ARM 和uC/ OS - II 的嵌入式开发平台,因为ARM 微处理器具有处理速度快、超低功耗、价格低廉、应用前景广泛等优点 . 将uC/ OS - II 移植到ARM 系统之后,可以充分结合两者的优势. 如果一个程序在一个环境里能工作,我们经常希望能将它移植到另一个编译系统、处理器或者操作系统上,这就是移植技术.移植技术可以使一种特定的技术在更加广泛的范围使用,使软件使用更加灵活,不局限于某一条件.uC/OS - II 是由Jean J . Labrosse 先生编写的完整的可移植、固化、裁剪的占先式实时多任务内核.uC/ OS - II 的源代码完全开放,这是其他商业
[单片机]