标题: 求一个检测到参数改变就往EEPROM中写入的MCU程序框架 [打印本页]

作者: hxdby    时间: 2022-2-28 16:58
标题: 求一个检测到参数改变就往EEPROM中写入的MCU程序框架
现在要做一个小的监控器,需要设置监控时间,为了每次开机时不需要一直设置时间,需要在每次关机前保存当前参数,下次开机前就不需要重新设置了。

现在是想把时间参数保存到EEPROM中,当设置好时间时,同时就自动写入EEPROM中,下次开机后再读取。如果时间没有被改动,就不需要重复写入,只是检测到时间改动后再写入。

比如如果当前时间设置是20分钟,如果这一天中,时间设置的都是20分钟, 没有设置新的时间,就保存20分钟到EEPROM, 如果上午设置的是20分钟,下午设置了新的时间30分钟,当检测到时间改变时,就把30写进EEPROM, 覆盖之前的20. 简单说就是把最后一次设置的时间写入EEPROM.

不需要掉电检测,初步就是这个想法,只需检测时间参数改动就往EEPROM中写入新的参数保存,不改动就不写。

求一个大概的程序框架,只需要检测到时间参数改动就往EEPROM中写,以及下次开机读取的大致程序。不需要EERPOM本身的读写程序。

感谢各位!

作者: wulin    时间: 2022-2-28 20:31
        if(a!=b)
        {
                b=a;
                //保存b到EEPROM中
        }
作者: 188610329    时间: 2022-2-28 20:47
Eeprom 大体有三种,  
一种是 片外Eeprom:  比如 AT24C02, 一般需要通过 IIC 传输协议 进行读写。写一个字节大约需要 40us 左右的时间。
一种是 片内Eeprom:  51系列来讲,比较有代表性的就是 WCH 的  CH55x系列,读写都比较方便,就是写几个寄存器,写一个字节,大约需要5us 左右。
还有一种就是 片内Flash 模拟 Eeprom,比较有代表性的就是STC的全系列。 基本和片内Eeprom 用起来差不多,最大的区别就是不能改写,只能整个扇区擦出后,重写,如果你要使用这种Eeprom 的话,就要考虑一个擦除问题,因为擦除一个扇区的时间大约需要 21ms,而单片机在理想状态下,从感知掉电到彻底没电,或者说剩余电量可以用来操作Eeprom 的存留时间不超过10ms,所以,你要在掉电是存储Eeprom必须在感知掉电前就完成了扇区擦除工作。这个在程序里必须提前做好。其他的就是普通操作了。

作者: hxdby    时间: 2022-2-28 23:15
wulin 发表于 2022-2-28 20:31
if(a!=b)
        {
                b=a;

哈哈,这么简单嘛
作者: hxdby    时间: 2022-2-28 23:16
188610329 发表于 2022-2-28 20:47
Eeprom 大体有三种,  
一种是 片外Eeprom:  比如 AT24C02, 一般需要通过 IIC 传输协议 进行读写。写一个字 ...

谢谢,我用的是AVR单片机,不知道擦除EEPROM是不是先要擦除扇区,以前从来没用过EEPROM
作者: hxdby    时间: 2022-3-7 22:32
wulin 发表于 2022-2-28 20:31
if(a!=b)
        {
                b=a;

有个问题请教下,我现在需要保存的数据有100多个,如果有改动就保存的话,要设置100多个变量, 程序太长了,写下来累死了。有没有比较简单方便的写法,比如循环之类的,可以方便的实现你这个功能的?谢谢
作者: chenchuanke    时间: 2022-3-7 22:50
hxdby 发表于 2022-3-7 22:32
有个问题请教下,我现在需要保存的数据有100多个,如果有改动就保存的话,要设置100多个变量, 程序太长 ...

用指针可以实现
作者: hxdby    时间: 2022-3-7 23:34
chenchuanke 发表于 2022-3-7 22:50
用指针可以实现

明白,谢谢,我研究下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1