数据信息的存储:
RAM数据格式:划分为各个信号量相关的数组,(信号量个数= 数组个数),最多支持数组个数?
写入ram:定时写入,当定时事件发生时,依次对各个数组的数据进行写入。
数组满的处理:当数组写到结尾时,重新从头部覆盖掉旧数据写入。
1. 在RAM区建立buffer1,并定义数组data1Array[],data2array[]。。。datanArray[]映射到该buffer中,数组个数设为m。
2. 在flash区建立buffer2,并有buffer2长度>buffer1长度;具体长度的选取需要考虑以下因素:
1) 若存储事件的个数为n;必须有: buffer2 > =m*n*lengthrequire;buffer1>= m*lengthdata
其中:m,信号总量个数, 可设置;
n,事件记录个数,可设置;
lengthrequire,每个信号量的采集点数,可设置;
注:以上可设置参数的最终结果受到实际flash存储区大小的限制。
2) 实际上对于buffer1还需要更详细的定义,该buffer区用来存储的数组长度与用户需求的数据长度关系:用户需求数据长度设置为lengthrequire,数组长度为lengthdata,单个字(字节)写入flash的时间为t1,定时写入ram的周期为t2,那么有必须:lengthrequire*t1 <(lengthdata -lengthrequire)*t2,否则不能保证lengrequire被完整写入flash。,整理得到:
Lengthdata>(t1+t2)/t2*lengthrequire,
其中,t1固定特性,可测定,不可设置;
T2用户可设置;
Lengthrequire用户设置;
注:以上可设置参数的设置结果受到实际可用RAM大小的限制。
3. 定时事件发生:当前信号量写入dataArray[]
4. Sport事件发生:
1) 读取dataArray[]当前序号,
2) 判断(当前序号-lengthaquire/2)>0
是:从dataArray[当前序号-lengthaquire/2]开始复制数据,数据长度为lengthaquire;中间加入判断,如果(当前序号+ lengthaquire/2)> lengthdata,那么(当前序号+lengthaquire/2- -lengthdata) 作为数据的复制终点序列。
否:从dataarray[lengthdata+当前序号- lengthaquire/2]开始复制数据。
3) 返回写入flash操作结果。
4) 事件记录数++;
5. 用户回调事件信息命令:
解析用户命令,查找到相应的命令对应的 flash 存储数据位置;