C语言Struct+Flash实现类似JSON配置文件的方式
JS中存储JSON只要简单的将object stringify以后写入文件就可以. 反过来读取就是读入文件为字符串再parse.
C语言如何实现配置文件呢? struct当然是最像json的了, 保存就用Flash.
这儿需要注意struct和flash的麻烦之处.
struct的成员变量无论是什么类型,都需要内存地址对齐. struct变量所占内存是连续的, 且大小可以整除最大的变量类型大小. 比如 struct{char a; long b;}x;
那么sizeof(x)
不是1+8=9,而是16. 这样如果flash寸土寸金就会显得浪费, 此时可以都用char存储. 这样存储时为了提高内存访问效率, 可以看这篇文章的解析, 有图示.
另外,struct类型的变量名不是地址, 如上面的x,要访问这个变量的地址需要加&,如&x
. 这和数组就很不一样. 数组的变量名就是数组的地址. struct变量名其实更像普通变量.
flash 在前面讲过了, 每次写入需要擦除, 擦除需要整个扇区.
简单的做法, 就是把struct转为空指针, 并按大小存储到flash中. 读取也是同样.