基于事件—目标驱动的人机界面设计

ARM 14浏览

时钟模块

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看到接收缓存接收的数据帧不完整,而不能正确地在屏幕上显示数据。移植操作系统之后,工
作可靠,同时系统的反应速度,即实时性有了很大提高。文中介绍的人机界面与嵌入式主系统是独立的模块,可以灵活地在单片机上加载控制模块,适合应用于各种
嵌入式系统中。