时钟模块
OSTaskCreate(TimcTCk,(void*)O,&TimeTickStk[],5);
时钟任务,使用单片机的时钟中断,可以设置各个任务需要的定时器,通过消息队列发给需要定时的任务。
(1)串口接收数据驱动的有限状态机
为了保证通信的可靠,系统中采用停止等待协议。在发送数据前要对数据打包,接收到数据要先解包,单片机在接收主系统发过来数据包的后需要去掉通信协议字
段,然后对有效数据进行正确的处理。为此,定义了一个Frame-FSM类型的数据结构,用来对接收到的数据进行处理。
typedefstruct{
byte State; //当前所处的状态
byte SYM_Plas;//转义字符标志,若为1,表示需对当前数据转义
bytc DatoLenoth;//数据长度
byte CheekSum;//校验和
byte Offset; //偏移地址,对应当前接收到的数据在该帧中的位置
byteFrame_Data;//帧内的有效数据
}Frame_FSM;
利用主机发送过来的消息驱动有限状态机,串口接收数据驱动的有限状态机包括以下几种状态;
① 任意状态。无论单片机原来处于何种状态,收到字符0xaa,都表明1帧新的数据即将开始发送。此时,如果单片机处于1帧正在接收的状态。就会丢弃原数据重新进入收到同步字符状态。
②
任意状态(除了INIT_STATE之外)。无论单片机原来处于何种状态.收到字符0xfc,都表明系统中出现了转义字符。此时,将转义字符标志置1,丢
弃当前接收的数据后返回;每一次进入重建帧处理函数后,系统会首先判断转义字符标志是否为l。若为l,则根据当前字符进行转义(当前字符为0x00,则转
义为Oxaa;当前字符为0x01,则转义为Oxfc;如果为其他字符则丢弃),然后将转义字符标志重新清O。
③ INIT_STATE,初始状态。在这个状态下,将重建帧的偏移地址和校验和清0,然后等待接收数据。收到起始宇符Oxaa后,将状态转入AA_SYN_STATE;收到其他字符都丢弃不理。
④ AA_SYN_STATE,收到同步字符状态。在这个状态下,MCU将重建帧的偏移地址和校验和清0,然后将状态置为接收源地址状态。
⑤ SRC_ADDR_STATE,收到源地址状态。此时比较源地址是否是主机地址。若是,则转接收目的地址状态;否则,转初始状态。
⑥ DEST_ADDR_STATE,收到目的地址状态。此时比较目的地址是否是MCU地址。若是,则转接收数据长度状态;否则,转初始状态;
⑦ DATA_LEN_STATE,接收数据长度状态。将数据长度备份,转入接收数据状态。
⑧
DATA_STATE,接收正常数据状态。将接收的数据存入接收数组REBUF中,每接收到一个数据就将对应的偏移地址加l,接收数据长度减1,并且计算
此时的校验和。当数据长度减为0时,表明l帧数据已经全部接收完毕,转入检验校验和状态。
⑨
CHECKSUM_STATE,接收校验和状态。将接收的校验和与本地计算的校验和进行比较。如果两者相等,将状态转为INIT_STATE,然后对正确
的数据帧进行处理,并给主系统发送一个确认帧;如果两者不等,丢弃该帧,状态转入INIT_STATE,等待接收新的数据帧。
对应的状态转换图(state transition diagram)如图2所示。
图2 接收数据状态转换图
(2)键值和命令码驱动的有限状态机
这组有限状态机主要依靠用户对菜单的操作进行状态转换,即把键值和命令码作为FSM的激励源,其中键盘消息是最主要的激励源。应用层的FSM具有多种主状
态,用户未按键或者是没有接收到新的数据帧时,状态处于IDLE_STATE;接收到消息后,转入对应的主状态。然后,根据按键的不同或者是接收命令码的
不同,转入对应的子状态进行处理。任务处理完毕,再将状态置为IDLE_STATE,按取消键,可回到上一级状态。
以用户控制云台上下左右转动为例,系统开始处于IDLE_STATE。若用户按云台镜头控制键,则进入云台镜头选择状态,并显示云台镜头控制菜单.选择云
台控制选项后,进入云台方向设置状态;选择向上键,转入向上状态。在该状态执行向上命令操作后,状态重新转入IDLE_STATE,并伴随着输出菜单的相
应变化,按取消键可回到上一级云境选择状态。对于其他按键,系统全部过滤掉不作响应,状态也不进行转换。云台控制的状态转换图如图3所示。
图3 云台控制的状态转换图
3、测试
μC/OS—IIV2.52较以前的版本,增加了两个系统任务一一CPU负荷监测任务与堆栈容量检查任务。这两个任务给程序的调试带来很大的方便。
将系统配置常数OS_TASK_STAT_EN设为l,统计任务OSTaskStat()就会建立。它每秒钟运行1次,计算出当前CPU的利用率,放在一个有符号的8位整数0SCPUUsage中,精确度是l%。
μC/OS-Ⅱ内存是固定分配的,通过0STaskStkChk()可确定每个任务实际需要的最大堆栈空间,根据测得结果合理地分配内存空间。表l是用以上函数测出的系统参数。
表1 系统参数
与MSP430单片机系统相应的调试工具Embedded Workbench,可跟踪程序的运行。通过运行在PC机上Embedded Workberlch能够追踪程序中各种参数的变化,查看单片机内存的使用情况。
结 语
本系统使用μC/OS—II后,系统的总体性能有了很大提高。使用实时操作系统前。运用前后台的程序设计方式。在需要显示较多数据在屏幕上,同时又需要接
收数据时,单片机处理不及时,可以通过调试工具WorkbenCh看到接收缓存接收的数据帧不完整,而不能正确地在屏幕上显示数据。移植操作系统之后,工
作可靠,同时系统的反应速度,即实时性有了很大提高。文中介绍的人机界面与嵌入式主系统是独立的模块,可以灵活地在单片机上加载控制模块,适合应用于各种
嵌入式系统中。
分享到:
相关推荐
在商品竞争中,一个应用系统的成功与否在某种程度上也取决于用户使用界面的感受好坏,因此,人机界面的设计在应用系统的设计中有着重要的作用。嵌入式系统强调人机界面操作的实时性,简单化,强调在特定平台上特定...
本篇文章讲述了如何设计基于可编程逻辑控制器(PLC)控制的逆变电阻点焊的人机界面系统。该系统使用触摸屏作为人机交互界面,通过与PLC的通信实现对焊接工艺参数的实时监控与动态显示,提高了电阻点焊工艺的精确性、...
【基于ARM+Linux的三轴伺服控制系统人机界面设计】是一项综合了计算机技术、嵌入式系统、Linux操作系统和QT图形界面开发的工程实践。在这个项目中,学生将深入理解并应用ARM微处理器、Linux内核裁剪移植、QT界面编程...
描述 了触摸屏的原理、分类和触摸屏人机界面的控制方式,完成了触摸屏人机界面设计。介绍了伺服电机控制系统及工作原理、伺服电机及其驱动器的选型,最终实现了基于触摸屏和 PLC的伺服电机控制系统。完成了触摸屏的...
为了解决这一问题,作者构建了一个基于友好人机界面的采摘机器人视觉系统,并利用激光测距仪作为数据采集装置。 在构建采摘机器人视觉系统的过程中,激光测距仪通过飞行时间(Time of Flight, TOF)原理进行距离...
《CODESYS 运动控制之人机界面模板2》是基于《CODESYS 运动控制之人机界面模板1》的进一步发展,旨在通过网页界面实现远程监控和操作,从而替代传统的本地计算机可视化方式。这一改进提供了更灵活的远程访问和控制...
当前,主流的人机界面注重简洁、直观和响应速度,通常采用图形化用户界面(GUI),通过图标、菜单和触摸操作来实现用户与设备的交互。 2.2 设计目标 设计目标是创建一个与智能手机类似的用户界面,使用户能够轻松...
3. **人机交互界面:**采用简单的键盘输入方式,方便用户选择控制模式和设置控制参数。 4. **体积小巧:**使用少量芯片完成控制器的设计,使整体体积减小。 **工作原理概述:** 系统的核心部分包括: - **控制模式...
设计过程中参考了多篇相关文献,如凌志勇和方旭群的《智能豆浆机的设计》、张向锋等人关于智能型豆浆机控制系统开发的研究,以及刘升和杨静丽基于PIC16C54单片机的全自动豆浆机控制系统,这些研究为本设计提供了...
6. **软件设计**:51单片机的程序编写是核心,需要考虑电梯的运行逻辑(如先来先服务、就近停靠等)、故障处理和人机交互界面等。 7. **优化与调试**:描述中提到的控制误差0.5cm,这表明系统已经达到了较高的精度...
为了提供良好的用户体验,需要设计一个简洁直观的人机交互界面。本设计采用MCGS组态软件来实现这一目标。通过MCGS,可以创建包含按钮、指示灯、投币口、取物口、退币口等元素的交互界面,使用户能够清晰地了解当前...
描述 了触摸屏的原理、分类和触摸屏人机界面的控制方式,完成了触摸屏人机界面设计。介绍了伺服电机控制系统及工作原理、伺服电机及其驱动器的选型,最终实现了基与触摸屏和 PLC的伺服电机控制系统。该课题的研究...
5. 智能炒菜机的人机交互界面设计:使用LabVIEW虚拟仪器开发软件设计了一个应用在计算机上的智能炒菜机人机交互界面。 6. 智能炒菜机的设计挑战:在设计中,我们遇到了许多挑战,但通过不断的尝试和改进,我们终于...