提笔有因
程序是数据+计算,参数既是数据的一部分,又参与计算,是每个软件不可或缺的部分。
在上层应用中可以使用基于文件的ini、json、xml等参数功能接口,非常灵活方便。可在嵌入式环境中,由于资源的限制无法使用这些功能接口,需要另行设计,是一项有挑战的任务。
存储介质
常见的存储介质有内存RAM、片内FLASH、外部FLASH等。
- RAM的特点是随机读写,按字节访问,掉电丢失,寿命长。
- 片内FLASH的特点是按字节读写,按块擦除,掉电保存,寿命1万次擦写,损坏需更换MCU。
- 片外FLASH的特点是按字节读写,按块擦除,掉电保存,寿命1-10万次擦写,损坏后需要参数重设。
FLASH存储设计
- 上电加载
设备上电后首先判断参数校验是否通过,校验通过则加载参数,不通过则初始化参数。 - 数据备份
FLASH的擦除是按块进行的,所以必须先备份再擦除后方可写入,防止过程中掉电,造成数据数据丢失。 - 同步机制
为了提高数据访问速度,通常会将FLASH数据加载到内存进行保存,在内存中操作参数之后,需要将参数同步到FLASH中。如未能及时同步,遇到掉电将会造成数据更新不生效。
数据类型设计
- 存储类型
数据类型 | 占用空间 | 说明 |
---|---|---|
BOOL | 1bit | |
INT | 1-4 Byte | 有符号整数 |
UINT | 1-4 Byte | 无符号整数 |
BYTE[] | 1-n Byte | Byte数组 |
- 显示类型
显示类型 | 说明 |
---|---|
整数显示 | %d |
十六进制显示 | %x |
字符串显示 | %s |
十六进制数组 | %02x%02x … |
参数归类设计
根据参数掉电保存、修改频率、数据大小进行如下归类:
存储介质 | 特点 | 例子 |
---|---|---|
内存RAM | 掉电重置 | 日志开关 |
片内FLASH | 掉电保存/低频变更/小数据量 | IP地址 |
片外FLASH | 掉电保存/高频变更/大数据量 | 最新定位位置 |
读写接口设计
读写接口设计也是非常重要的环节,设计要求罗列如下:
- 可按参数ID(int)读写接口
- 可按参数别名(string)读写接口
- 有一对读写接口可以读写所有参数
- 可以有一些简便的读写接口,不宜过多
- 添加删除参数是简洁方便的
- 用List数据结构设计,用for循环读写,切忌使用switch case
串口读写参数
有了上述工作的基础,我们开始编写串口读写参数功能了,举一反三,蓝牙/网络读写参数雷同。
串口协议我们选择AT协议,设计一对串口读写接口,调用统一的一对读写参数接口即可完成该功能。
串口显示时,数据显示类型派上用场了,可根据整数、十六进制、字符串等进行显示。
示例:
发送:AT+SET=IP,“192.168.1.1”,PORT,8080
接收:AT+SET=IP,“192.168.1.1”,PORT,8080
发送:AT+GET=IP,PORT
接收:AT+GET=IP,“192.168.1.1”,PORT,8080
结束语
分享到此,感谢阅读,希望对您有用!