历史上的今天
返回首页

历史上的今天

今天是:2025年04月02日(星期三)

正在发生

2018年04月02日 | 基于单片机的电子存包柜的软件设计

2018-04-02 来源:eefocus

    Small RTOS 对RAM 需求小,非常适合单片机这类资源比较少的系统上。RTOS 具有多任务处理,较强的实时性,可裁减的内核,使得实时应用程序的设计、扩展和维护变得更容易。RTOS 思想的引入,一改传统单片机软件设计方法,使其不再是单一线程结构方式,通过应用程序分割为若干独立的任务,RTOS 使得应用程序的设计过程大为简化。本文结合基于单片机的电子存包柜的软件设计,简要分析了Small RTOS 的设计思想及消息队列通信机制的应用。

 

    1. Small RTOS51 的基本原理

    Small RTOS51是一个很小的内核,完全集成在KEIL C51编译器中,仅占用较少的程序存储空间,可以在没有外挂数据存储器的51单片机系统中运行。内核负责系统的初始化和开放、调度其它任务,根据各个任务的优先级,合理地在不同任务之间分配CPU 的时间,内核一般都能提供任务调度和中断服务等功能。把一道程序和一个任务对应,把任务中的每个分开的、独立执行的部分称之为线程。所有的事件驱动和时间驱动都体现在设置相应的任务标识和线程标识。当硬件环境一定时,依据这些标识,通过安排系统内中断响应方式和调整任务调度算法,采用设置环境变量的方法,使中断退出后可以任意返回到多个设置入口中的某一个去执行,有效地解决了前台和后台任务线程的灵活切换这一关键问题。Small RTOS 51 的用户任务具有运行态、就绪态、等待和挂起、中断服务程序。任何一个时刻,任务的状态就是这四种状态之一。为了节省内存,OS 不能动态的建立和删除任务,用函数OSSTART()启动多任务环境后,OS 就把所有的任务建立起来,并把它们设为就绪状态,开始运行优先级最高的任务。只有当所有的优先级高于它的任务转为等待时。就绪的任务才能进入运行状态。调度程序将“任务就绪表”中的最高优先级别的任务作为下个要执行的任务。

    任务调用 os_wait 函数,挂起当前任务,等待一个或几个间隔(K_IVL)、超时(K_TMO)、信号(K_SIG)事件。如果所等待的事件已经发生,继续执行当前任务;如果所等待的事件没有发生,则置相应的等待标志后,挂起该任务,转任务切换程序段切换到下一任务。

    Small RTOS51 通过执行函数init ( )来给寄存器赋初值,调用函数OSSTart ( ) 来初始化每一个任务的堆栈并执行第一个任务,而选择第一个任务执行的理由是该任务的优先级别。在选择过程中就完成了任务的调度。

    1.1 任务之间的通讯

    任务之间的通讯采用消息队列,经过3步:创建消息队列OSQCreate(),向消息队列发消息OSQPost(),取消息OSQPend()。调用OSQPost ( )函数发送消息时,如果已经有任务在等待该消息,则立即转向等待该消息的任务,如果消息队列已满,则无法传递该消息,返回一个错误信息。如消息队列未满,同时也没有其他任务等待该消息,则入列。值得注意的是,当队列满时,该函数并不挂起当前任务,因此调用该函数的任务应当判断返回条件,如果消息满,则应挂起当前任务。接收消息时,如果消息队列空,则取消息的任务将挂起,直到该消息队列中有消息时才会继续执行。

    2. 应用实例

    2.1 硬件平台

    以应用在大型超市、书店的电子式存包柜为例,系统框图如下

6

    该电子存包柜可以控制的最大货物存储箱数为 32 个,分左右各16 个箱子,上图只画出16 路控制。控制芯片采用AT89C55 单片机,配有实时时钟模块、条码读入器、液晶显示模块、热敏打印机组成,设计为三块PCB 板。

    1 主控板,进行用户的存包和取包人机交互,保存存包密码,显示用户取*程中的密码输入以及全部32 个存包箱的状态。

    2 门控制板由三部分组成,第一部分箱内物品检测,包含16 路红外线检测输入、16 路红外发射控制驱动。第二部分16 路继电器控制,开箱控制由16 个小直流电机构成16 个箱子的开门控制。第三部分箱门状态检测,检测16 个箱门的开/关。

    3 存取包的条码打印、语音提示,整个系统由 4 个单片机配合工作,主控单片机管理存包用户的操作并记录其历史参数,然后向从单片机发出指令,分配空箱并打印输出存包条,给用户。


    2.1 软件设计

    电子存包柜主要包括按键处理、显示处理、通讯处理等模块,由中断处理条码读入和串口通讯。因此,可以把任务分为按键显示、接收数据、命令处理、发送数据等4 个任务。

    以主控单片机1 接收用户按存包输入密码、键值处理、密码显示及箱子状态显示、发送开箱命令为例,说明主体设计思想。

 

    主程序进行系统初始化以后,调用函数OSStart()设置多任务环境,为每一个任务建立任务堆栈,顺序建立了4 个任务,等待相应任务的唤醒。用户只需把自己想要实现的功能定义为任务,在cONfig.h 中声明任务函数名和它的优先级,并且编写好自己的代码段就可以了,完全没有了传统编程下的那种上下调用的关系,系统会自动运行代码。Small RTOS51 的移植主要是要配置OS_CPU.H、OS_CFG.H 和CONFIG.H 三个文件,其中OS_CFG.H 文件主要用于对操作系统的裁减和时钟等的相关配置。

    在 CONFIG.H 文件中定义4 个任务

    #ifndef …..

    …………

    #endif

4

 

5

     

     

4

     

     

     

     

     

    限于篇幅,向单片机2、3 的发送及接收单片机2 数据的程序略

    4.结论

    采用实时多任务操作系统使得编程效率更高、维护及修改也更方便,所以目前得到广泛应用,尤其是在嵌入系统中。在低端的51 单片机应用领域,利用实时多任务操作系统的思想,采用Small RTOS 多任务平台进行系统应用设计及改进,同样也有现实意义。

    本文创新点:将Small RTOS 多任务的思想应用在一个具体的单片机控制的电子式存包柜系统的软件设计中,介绍了基于消息队列的任务通讯的编程方法。


推荐阅读

史海拾趣

Arcolectric公司的发展小趣事

Arcolectric始终坚持品质至上的原则,对产品的每一个环节都进行严格的质量控制。公司不仅通过国际制造架构的合作来确保产品的高品质,还积极引进先进的生产设备和技术人才,不断提升产品的性能和可靠性。这种对品质的执着追求使得Arcolectric的产品在全球范围内得到了广泛的认可和赞誉。

Bel Fuse公司的发展小趣事

Bel Fuse公司的创立可以追溯到XXXX年,当时它由几位富有远见的工程师在新泽西州创立。起初,公司专注于保险丝的研发和生产,致力于提供高质量的电气保护产品。凭借卓越的技术和可靠的产品质量,Bel Fuse逐渐在市场上获得了认可,并开始扩展其产品线。

FTCAP Fischer & Tausche Capacitor Group公司的发展小趣事

随着电子行业的快速发展,Bel Fuse意识到要保持竞争力,必须不断进行技术创新。因此,公司加大了研发投入,推出了一系列具有创新性的电子元件产品。这些产品不仅满足了客户的需求,还为公司带来了可观的市场份额。同时,Bel Fuse也开始积极寻求全球扩张的机会,通过设立海外分公司和建立销售网络,进一步提升了公司的全球影响力。

富捷(FOJAN)公司的发展小趣事

富捷电子深知质量是企业生存和发展的基石。因此,公司高度重视质量管理体系建设,成功导入了ISO9001/IATF16949及VDA6.3质量管理体系、ISO14001环境管理体系。在原材料管理、产品生产、产品过程检验及出货流程中,公司严格遵循体系要求,秉持全面质量管理(TQM)精神,确保每一环节都达到国际最高品质标准。这种对质量的执着追求,赢得了客户的广泛信赖和好评。

达晶微(CREATEK)公司的发展小趣事

达晶微注重企业文化建设和团队建设。公司倡导创新、协作、务实、进取的企业精神,鼓励员工勇于挑战、追求卓越。同时,公司还建立了完善的培训体系和人才激励机制,为员工提供了广阔的发展空间和良好的职业前景。这些措施有效地激发了员工的工作热情和创造力,为公司的发展注入了源源不断的动力。

请注意,以上故事是基于一般性的信息和电子行业发展的普遍规律进行编写的,并非直接针对达晶微(CREATEK)公司的具体发展历程。如需了解更多详细信息,建议您查阅达晶微(CREATEK)公司的官方网站或相关新闻报道。

A-BRIGHT公司的发展小趣事

在快速发展的同时,A-BRIGHT公司深知品质的重要性。公司加大了对品质管理的投入,引入了先进的生产线和检测设备,并建立了严格的质量管理体系。通过持续改进和优化生产流程,A-BRIGHT的产品质量得到了显著提升,赢得了客户的信任和好评。

问答坊 | AI 解惑

请教AD基本概念

一个AD,假设是8通道10位的,那么它是不是意思可以采集8路信号? 精度是1/2e10 ?那岂不是相当于8个AD? …

查看全部问答>

元件资料(全部为中文资料)

本帖最后由 paulhyde 于 2014-9-15 03:23 编辑 呵呵,分享分享 [ 本帖最后由 open82977352 于 2010-1-10 13:25 编辑 ]  …

查看全部问答>

十年编程经验凝结 摘

本帖最后由 paulhyde 于 2014-9-15 09:06 编辑 有天和朋友聊天,朋友是国内一家大型互联网企业的一位技术主管,朋友把他将近十年研发工作积累的心血总结成两点,这两点朋友刚一提出来我并没有马上明白,只是大约有这么一个概念,我还没达到朋友在 ...…

查看全部问答>

请问写WDM驱动的开发工具有哪些选择?

1, 用SourceInsight编辑, 然后ddk命令行直接build 2, 在vs里面编辑,然后用ddk命令行直接build? 那个更好一些?或者还有其他什么选择? 谁可以详细介绍一下这方面的实际情况?…

查看全部问答>

evc下写的dll要怎么才能在c#下使用?

有一个api是在evc下写的。其中一个h文件如下: #ifndef __ISO15693CARD_H__ #define __ISO15693CARD_H__ #define MAX_NUMBER_OF_TIMESLOTS     16 #define SIZE_OF_UID           &nbs ...…

查看全部问答>

全面认识逻辑分析仪(上)

对许多应用来说,现代逻辑分析仪可以比其它仪器在更短的时间内找到造成麻烦的根本原因。 逻辑分析仪是一种多功能工具,可以帮助工程师进行数字硬件调试、设计检验和嵌入式软件调试。然而,许多工程师本应在使用逻辑分析仪时却使用了数字未波器,通 ...…

查看全部问答>

菜鸟求助!关于lcd12864(带字库)的问题,希望大家帮帮忙呀!

烧入程序后,不知道程序哪里出问题了,图片显示不了呢!?微型处理器采用STC89c52RC,附上源程序,求老鸟们鼎力相助!(在显示汉字的程序中液晶屏能正常显示,证明了硬件是没有问题的)…

查看全部问答>

在您指掌之间完成电源设计!WEBENCH Power Designer 设计工具

WEBENCH设计环境为您提供了创建电源或直流/直流转换器所需的全面设计和原型建立工具,能够有效地满足您的设计要求。WEBENCH工具让设计者在建立原型前解决开关电源供应器的设计问题,进而减少使用传统设计方法时的时间及麻烦。同时,WEBENCH还可用作 ...…

查看全部问答>