一 总体规划和渠道简介
项目旨在完成多ARM节点经过无线通讯完成对批量节点的程序烧录,如图2.1所示。体系分为上位机、发射接纳模块和待烧录节点三个部分,上位机经过ID号挑选待烧录节点并经过无线模块向下播送烧录数据,各被挑选节点经过无线模块接纳烧录数据查看无误后存储。上位机软件设定待烧录节点的ID、烧录文件目录、发送数据包巨细、发送速率等参数后将数据打包传送到基站,基站经过无线发射模块播送数据。
全体思维是运用已有的代码和方针代码进行比较。将两者的差异经过无线网络(802.15.4)播送出去。在每个承受节点依据收到的差异文件(也便是补丁文件patch),对原有代码进行批改(patching的进程)以到达更新程序的意图。
总体上来说本项目有两大难点,涉及到奇妙的算法规划。
1、怎么竭尽或许少的字节数,来表明不同代码之间的差异?
2、怎么确保可靠性传输?
关于问题1,咱们知道要待传输的字节数越少,对通讯的要求越低。更新程序的功率也会更高。而且少的字节数也意味着丢更少的包。关于问题2,因为咱们是要对代码进行批改,所以一个字节的过错或许就会形成整个程序的溃散。这对嵌入式程序,特别是运转在不计其数个节点上的程序是不行承受的,有必要确保100%的正确承受。除此两大难点(也是要害点)之外,还有一些其他附加要求。假如满意了能够进步体系的持久性。分别是:
1、使竭尽或许小的RAM。因为嵌入式芯片的RAM遍及宝贵。
2、耗费尽或许少的能量。
3、更新速度尽或许的快。
项目运用的硬件渠道是咱们克己的智能小车eMouse 。渠道选用 TI公司32位Stellaris LM3S1968微处理器,作业频率为50MHz,内含256 KB单周期Flash和64 KB单周期SRAM,flash支撑可由用户办理的块维护和数据编程;板上Zigbee模块经过串口与CPU通讯,模块仅供给MAC层服务,CPU与模块间以MAC帧的方式经过串口传递数据。eMouse外观如图2.2所示。
项目开发体系环境为Ubuntu9.04,程序编译和下载工具分别为开源的sourcery G++和Openocd,用户界面选用java言语编写。
以下章节将对体系规划作翔实的论说。
二 程序更新规划与完成
一些传统的更新办法重视代码自身的特色。比如以函数为根本的更新单位。在每个节点上运转一个动态链接器,将新的函数从头链接到原程序。其实代码自身能够将其视为一串二进制的文本文件。代码的更新便是从一串旧的文本更新为一串新的文本。
为此咱们界说了一系列根本的更新操作指令,以及两个辅佐的索引指针:in_index以及out_index。in_index代表输入文件当时的索引值,而out_index代表输出文件当时的索引值。
根本的指令如下:
Copy:将in_index所指的字节复制到out_index处,而且in_index和out_index分别加1。
Replace A:将当时out_index所指的字节用A来替换,而且in_index和out_index分别加1。
Delete:in_index加1,out_index不变。实践为删去in_index所指的字节
Insert A:在当时out_index处刺进A,in_index不变,out_index加1。
Kill:表明删去in_index后一切的原程序代码。
其间包括了如下的子问题:
2.1 指令的表明
经过上面所说的根本指令的组合,咱们能够表明出从一个旧文件到一个新文件的进程。随之带来了一个问题。这些指令应该怎么表明才干尽或许的下降补丁文件(指令的组合)的巨细?
有几个需求留意的当地:
假如有接连的Copy指令,咱们能够将其合并成一条指令,只要在Copy后加上表明长度的Length参数即可。
同理,假如有接连的Delete指令,也能够将其合并成一条指令,只要在Delete后加上表明长度的Length参数即可。
假如能够运用Replace指令,就不要用Delete和Insert指令的组合。这其实是另一重要的子问题:怎么依据这些指令发生尽或许少补丁文件?
有五条根本指令,这样为了差异这五条指令,至少需求3个比特。
因为大多数情况下,更新的大多数是程序的参数。也便是说Copy指令的数目远远大于其他指令。咱们界说这5条指令如下表所示:
表3.1
指令 |
操作码(最左端开端) |
操作数的长度(紧跟操作码) |
总长度(字节) |
Copy |
1 |
15 |
2 |
Delete |
000 |
13 |
2 |
Replace |
001XXXXX |
8 |
2 |
Insert |
010XXXXX |
8 |
2 |
Kill |
011XXXXX |
8 |
2
|