1.3 控制系统软件设计
无人直升机控制系统的软件包含四大部分:一是根据S3C44B0X重新配置VxWorks系统的BSP。二是基于优先级的消息队列实现,消息队列中包含飞行状态信息与自主定点飞行信息。三是基于看门狗与信号量的多任务调度,实现自主定点飞行与实时飞行状态信息传输的功能。四是基站控制软件的设计。系统上电后初始化socket套接字,网络联通后采用UDP协议通信。下面将着重介绍基于优先级的消息队列与基于信号量与看门狗的多任务调度。
2.3.1 基于优先级的消息队列
在控制系统中,不能因为执行机载设备的数据传输命令而拒绝执行地面基站的自主飞行命令。为解决这一问题,本控制系统建立了基于优先级的消息队列机制。系统在RAM中开辟一个区域用于建立消息队列,队列中指针指向的是各个信息的内存块地址。各个任务将根据这些指针指向的数据来进行实际操作。
(1)基于优先级的消息队列方法。首先信息接收任务接收信息后根据信息头地址内容判断信息优先级,地面基站的自主飞行命令优先级为最高,把它插入到消息队列的队列头,而机载电子罗盘与GPS发送的数据信息优先级低,按照时间顺序排列在消息队列的队列尾。信息解释任务从消息队列头逐一取出信息然后进行处理。
(2)消息队列的实现。通过单向链表来实现消息队列的添加与删除。每个链表元素是一个结构体struct messageChain,结构体包含头指针pBuff与指向下一个元素的指针pNext。同时使用两个全局变量直接表示链表头与链表尾,一个全局变量表示链表长度,这
样可以直接处理链表头或者链表尾的内容以简化查找过程。
2.3.2 基于看门狗的多任务调度
VxWorks系统可以为每个任务设定特定的任务名与任务优先级,系统支持256个优先级。为了调试的方便,在本控制系统中设定的任务优先级在60到100之间,这是因为由程序发起的任务优先级要高于Tornado开发环境中shell发起sp的任务优先级即小于100,同时也要低于系统任务的优先级即大于60【5】。控制系统包含了信息接收任务,信息解释任务,信息发送任务,网络监测任务,定时轮询任务,自主飞行任务等多任务。流程图见图三。
图三 任务调度流程图