《rtossalvo在单片机中的应用遥控led点阵安全天显示屏》由会员分享,可在线阅读,更多相关《rtossalvo在单片机中的应用遥控led点阵安全天显示屏(11页珍藏版)》请在金锄头文库上搜索。
1、RTOS Salvo在单片机中的应用遥控LED点阵安全天显示屏l 什么是RTOS?实时操作系统(real-time operating system)简称RTOS。l Salvo是什么?Salvo是一个能运行在有限的ROM和RAM的单片机上的强大的、高性能的、只需要很少的RAM而不需要堆栈的实时操作系统。它容易使用,能够帮助你为嵌入式系统快速开发出强大的、可靠的且易于维护的应用程序。它可裁剪,适应能力非常强,几乎能用于任何处理器,从PIC到奔腾。l 为什么要使用Salvo?Salvo提供一个强大的、弹性的框架,在它上面你能快速地构建你的程序。如果你面对一个复杂的设计并且性能有限的处理器,Sal
2、vo能最大程度地帮助你完成设计。如果你想:使你的嵌入式产品抢在竞争对手前头在你的产品已有硬件基础上添加更多的软件功能改进一个复杂设计的运转实时性管理你的越来越复杂的程序提高你的程序的可靠性使你掌握多任务RTOS大多数传统的单片机程序都是在主函数部分中构建一个超级循环,使用中断处理临界事件。这被称作前后台或超级循环系统,中断运行在前台,当没有中断产生时主循环运行在后台。在对程序的维护上,随着功能的增加,使得前台与后台之间的关系越来越复杂,维护越来越困难。RTOS宏观上是多个任务同时运行,内部任务之间使用信号量、消息和消息队列进行通讯和资源共享,增加一个功能只需增加一个任务,任务的运行由系统内核管
3、理,使得维护变得容易。低成本的单片机是有能力实现实时控制应用的,但对它们编程是一个挑战,实时的内核能够简化复杂软件的设计,然而不幸的是,多数商业化的RTOS需要大量的ROM和RAM,Salvo改变了这些,Salvo将使你的程序运行的更快,它提供给你一个明白而又容易理解的多任务程序框架,只用很少的空间完成你的工作。l Salvo与其它的RTOS的不同点1、 Salvo是一个并发式的RTOS,因此必须明确地管理任务的切换,每个任务必须至少进行一次上下文切换。2、 只能在任务中而不能在函数中进行上下文切换,这是因为单片机的堆栈很小。3、 对比其它需要大量RAM的并发式或抢占式RTOS,Salvo可能
4、是你唯一的选择。l Salvo需要哪些资源?在单片机上,一个典型的多任务程序,Salvo代码可能需要占用大约1K ROM每个任务大约占用4-12个字节,每个事件3-4个字节另外需要4-6个字节去管理所有的任务、事件和延时。如果你计划使用延时和超时服务,Salvo需要提供一个中断信号,但这个中断信号不必专门给Salvo使用,也同时用于其它方面。任务和事件的数量仅仅受内存的限制。l 使用Salvo需要哪些知识?1、C语言的知识,但即使你是一C语言的初学者,你学习Salvo也不应该感到很困难。2、一些RTOS的基本知识。下面结合一个实际进行介绍,本设计使用一片AVR单片机ATmega16,它是meg
5、a系列的主流型号,性价比高,具有16K的flash,512字节的EEPROM,1K字节的RAM,没有扩展外部了ROM和RAM便可运行RTOS,完成点阵扫描和红外线遥控调整时间、安全天数。显示内容:“今天是:xxxx年xx月xx日星期x xx时xx分,当前气温xx.x已安全运行:xxxx天。”从右向左流滚动显示。一、硬件的组成及工作原理(1)CPU控制板:原理见图一,以ATmega16为核心,扩展一片416译码器CD4514,驱动ULN2003完成LED的行扫描。实时时钟由DS1302及3.6V充电电池组成,掉电时时钟仍能工作。J3是ISP程序下载接口,J4是程序调试接口,J8是外接调整按钮,不
6、用遥控器也能手动调整参数,J5是一体化红外线接收头。ATmega16具有硬件的SPI接口,可直接驱动串行移位芯片74HC595。(2)LED显示板:原理见图二,由16块8*8LED点阵拼结而成,可同时显示4个汉字,8片74HC595完成显示屏的列驱动。两块电路板之间用40芯的排线联接,在CPU的内部RAM开辟一块显示缓存区,CPU控制板读取flash内部的汉字点阵编码,写入到显示缓存区,然后读取显存中第一行数据,通过SPI接口驱动74HC595,将串行数据转为并行,然后将接通对应的行,显示1ms后,取下一行的数据,同样显示1ms,直到第16行,完成一次扫描。再把显存中的数据整体左移一位,再扫描
7、一遍。如此把全部的汉字依次移入显存并显示,便实现了汉字从右向左移,全部汉字移完后对时间、温度和安全天数的寄存器刷新一次。二、程序的基本结构首先,根据功能上的独立性划分任务,分为:时间读写、温度采集、LED扫描显示、日期天数调整和被调参数闪烁等五个任务。其次确定任务的优先级,时间读写、温度采集8级,日期天数调整和被调参数闪烁5级,LED扫描显示3级,任务的优先级还可以在程序运行中动态的改变。/头文件#include salvo.h./定义Salvo任务指针#define TASK_SHOW_P OSTCBP(1)#define TASK_RWTIME_POSTCBP(2)./定义任务切换标签_O
8、SLabel(TaskAdjust1)./任务的定义void TaskRWTime(void);/读写时间任务./被调整的位置闪烁任务伪代码void TaskFlash(void)static const struct eng0816 *p;p=eng0816_code;for(;)/程序段是一个死循环if(stop!=8)程序代码;OS_Delay(50,TaskFlash2);/进行上下文切换,交出CPU的使用权,其它任务开始运行。任务等待50个时钟节拍(500ms)后,如果没有比它优先级高的任务等待执行,则此任务继续运行elseOS_Delay(100,TaskFlash3);/读写时间
9、任务void TaskRWTime(void)for(;)ReadTime();/读DS1302时间CountSafeDay();/计算安全运行的天数,存储在内部EEPROM中OS_Delay(50,TaskRWTime1);/每个任务必须进行一次上下文切换/主程序void main(void) Initial();/用户程序初始化 OSInit();/RTOS初始化,必须有/创建任务并分配优先级,括号内分别为:任务名称,任务指针,任务优先级OSCreateTask(TaskRWTime,TASK_RWTIME_P,8);. OSEi();/中断使能 for(;) OSSched(); /任务
10、调度器,何时哪一个任务运行,由调度器来调度,用户只需要定义好每个任务的优先级即可 /end从上面的程序片段可以看出,RTOS与一般的前后台程序的主要不同是每个任务(即子程序)都工作在一个无限循环中,用户只要做好任务的一些初始化工作,至于什么时候运行什么任务这个烦琐事情交给系统去做就可以了,使CPU的利用率最高。三、使用方法遥控器用的是成品电视机遥控器,工作原理与电子制作2003年第九期“遥控电风扇”一文相同。按电源键,显示“调年xxxx”同时被调整的位闪烁,按音量“”相应的位向上加,加到9后,回到0。按频道“”,则改变被调整的位,同时对应的位闪烁。再次按电源键,依次显示“调月xx”,“调日xx”,“星期xx”,“调时xx”,“调分xx”,“调天xxxx”,结束。笔者已经在多个产品中成功地应用了Salvo实时操作系统,深感RTOS带来的好处,现在大ROM和RAM的单片机很多,在单片机上跑RTOS不成问题。在http:/ 上有Salvo的使用手册及试用版提供下载。图一图二