嵌入式多节点的无线批量程序更新系统设计
,分别指链表的读出点和写入点,执行一次读出或写入操作后,tail或head指针都向前移动一次,整数的作用是统计当前链表上可用节点的数目。Deluge_buf结构体定义如下:
struct Deluge_buf {
struct data_entry queue_data[QUEUE_LENGTH]; // The data of current queue
uint8 recv_num;
uint8 queue_head;
uint8 queue_tail;
};
值得注意的是结构体data_entry中Payload项的组成在不同类型的帧中是不同的,比如数据帧中Payload包括页号p、帧号id和数据data以及数据长度data_len,而广告帧中只包含p和id,因此解析方法要根据type值来区分。
帧结构DelugeData
如图五所示,DelugeData定义了帧类型(type)等六个数据项,设计中根据不同的帧类型规定了各个数据项的含义,具体定义如表4.1所示,"-"表示该数据项在帧中没有定义。
表4.1 DelugeData中数据项含义的定义
数据项 帧类型 | type | v | p | id | data | data_len |
数据帧 | DATA | 版本号 | 页号 | 帧号 | 数据 | 数据长度 |
结束帧 | END | 版本号 | 页号 | 帧号 | - | - |
广告帧 | ADV | 版本号 | 页号 | 源节点标识 | - | - |
请求帧 | REQ | 版本号 | 页号 | 目标节点标识 | - | - |
命令帧 | CMD | 命令参数 | - | - | - | - |
3、缓冲区Flash_buf
因为写flash操作比网络传输慢得多,为了避免写flash拖慢整个数据分发速度,建立缓冲区Flash_buf用于缓存准备好的数据。Flash_buf也是一个环形缓冲区,原理和Deluge_buf相同。缓冲区的节点包含p、id、data三个数据项和指针域next,其中data是要写入flash的数据,p和id用于计算待写入的flash地址。
3.3.3 可靠数据分发协议的软件架构设计
可靠数据分发协议的软件构架设计包括发送端和接收端两块内容。发送端软件运行在数据基站上,分为两个阶段,第一阶段通知节点连续地发送整个文件,第二阶段运行状态机参与到节点的交流中去;接收端软件运行在待烧录节点上,第一个阶段尽可能多的接收基站发送来的数据,第二阶参与节点间讨论。因为发送端第一阶段软件比较简单,第二阶段和接收端相同,所以这里只重点介绍接收端的软件构架设计。
第一阶段:
程序完成初始化后进入准备接收状态,当数据帧到来时将数据提取出来写到flash相应的地址(地址由页号p和帧号id计算得到),并将该帧标记为"完成帧";若接收到结束帧,则记录结束帧的页号pmax和帧号idmax并进入第二阶段;若接收到其他类型帧则直接进入第二阶段。第一阶段的软件流程图如图4.6所示。
图4.6 接收端软件第一阶段流程图
第二阶段:
完成第一轮接收后,程序运行ADV-REQ-DATA状态机,和其他节点交流,完善或帮助其他节点完善数据文件。状态机分为MAINTAIN(维护)、RX(请求)和TX(发送)三个状态,程序首先进入MAINTAIN状态。MAINTAIN状态下,程序监听广告帧和请求帧并在适当时机发送广告,根据协议规定,程序可能跳转到RX状态或TX状态进行数据帧请求和发送操作,操作完成后返回MAINTAIN状态。程序中定义一个最长时间tmax,如果MAINTAIN状态持续时间超过tmax,则认为整个数据分发过程结束,程序检查自己接收到的数据是否完备后退出。第二阶段的软件流程图如图4.7所示。
图4.7 接收端软件第二阶段流程图
四 系统测试
本测试将用三个程序作为用例,以测试系统的可用性。三个程序分别为:
Led.bin实现简单的跑马灯;
GoAhead.bin 三辆小车将一直向前方走,即使碰到障碍物也不停止;
RandomWalk.bin 三辆小车将进行随机行走,并且碰到障碍物后会进行壁障,转弯。
首先我们将批量更新跑马灯的程序,然后我们来看GoAhead.bin,如图5.1所示。完整的程序镜像大小为3340Bytes
图5.1 GoAhead.bin的大小
当前在节点上已经运行了Led.bin,我们将使用Led.bin和GoAhead.bin进行比较,生成patc
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)