为了让智能家居系统在断电或重启后能恢复到之前的状态,项目设计了一个数据持久化模块,源码位于 obj/data/state_store.c
。
1. 功能与职责
- 该模块的核心职责是将应用的关键状态(如灯的开关/亮度、安防模式、警报状态)以文件的形式保存在本地文件系统上。
2. 实现机制
- 文件存储: 每一种需要持久化的状态都对应一个独立的文本文件,如
lighting_state.txt
,security_state.txt
。所有文件都存放在程序运行目录下的data/
文件夹中。 - 自动目录创建: 在进行任何文件操作前,
ensure_data_dir()
函数会检查data/
目录是否存在,如果不存在则会自动创建,增强了程序的健壮性。 - 简洁的API: 模块提供了成对的
ss_xxx_load()
和ss_xxx_save()
函数接口。save
函数负责将内存中的数据结构(如灯光状态数组)格式化为文本并写入文件。load
函数在程序启动时被调用,负责读取文件内容,解析后填充到内存的数据结构中。
- 默认值处理: 如果在
load
时发现状态文件不存在(通常是第一次运行时),函数不会报错,而是会返回一个预设的默认值,并立即调用save
函数将这个默认值写入文件。这简化了首次运行的初始化流程。
3. 数据格式
- 数据以易于读写的纯文本格式存储。例如,
lighting_state.txt
的每一行代表一个灯,内容是[是否开启] [亮度] [色温]
,由空格分隔的三个整数。这种格式不仅实现简单,也方便开发者直接打开文件查看和调试。