|
智能家居设备通常需要用户进行个性化设置,例如温度设定、时间表、互联网连接等。如果这些设置数据在掉电后没有被保存,用户将不得不每次重新配置设备,这会显著降低用户体验并引起不满。因此,我们把设置数据到闪存可以确保用户不必担心掉电导致的数据丢失。无论何时重新上电,设备都能自动恢复之前的设置,使设备的操作更加便捷和无缝。
那我们来看看如何实现,首先要说明的是,如果设备有ota的功能需求的话,可以从分区表再划一个1k大小的空间用于存放数据,一般不是很大的项目flash的剩余空间都是很充足的。这里我就不使用分区表了,直接对页进行操作,因为我的设备还没加上ota功能。
在此篇文章,已经介绍过了读写内部flash的方法https://club.gizwits.com/thread-169692-1-1.html 我们只需要进行修改即可实现存放数据点。
擦除数据的代码暂时无需修改,因为1k已经足够我的需求了
对于读取flash,我们需要修改,这里是通过一个数组来存放数据的,因此在读取一个数据后,flash的地址要偏移2个字节
同样,对于数据写入,每写入一个数据也要对地址偏移2个字节
这样,我们需要的读写擦除函数已经准备好了,现在我们要解决的是,读写逻辑的问题。
首先,我们可以准备一个uint16的数组,第一个数据用于存放标志位,可以是已写入或者用于判断此区域是否是合法区域,亦或者是判断数据有没有初始化。
因此流程是:读出数据-》判断标志位-》根据标志位操作数组-》数组内容赋值给数据点
那么我们就可以编写代码了 在main函数while开始之前读出数据,根据内容选择初始化还是赋值给数据点
然后,到机智云事件处理函数里,调用数据写入函数,使用外部变量引用数据即可
这样,在我们改变设备状态的时候,数据就会被写入到flash中,当然flash的寿命是有限的,假如操作次数比较多,可以积累起来,达到一定后进行合并读写。
|
|