退出系统后变量存储问题

kittenqq   2009-9-16 11:45 楼主
我想要实现这样的功能:在单片机系统程序启动的时候,用键盘输入给一个变量赋值,在退出系统后这个值也保存下来,在下一次系统再次启动时该变量还是这个值,请问各位大侠C代码如何实现!

回复评论 (14)

将变量永久保存在某个地方,启动时从这个地方读取变量. (代码网上好多)
点赞  2009-9-16 11:52
在FLASH/EEPROM中留出一扇区作为data flash使用就可以了
然后擦写,再编程,系统初始化的时候,读出保存的数据
根据芯片手册写flash的驱动程序就可以了,没有通用的所谓C程序。


如果不支持在线编程,那只有采用存储器外扩的方式了。
点赞  2009-9-16 12:04
将变量存到E2PROM里面吧
点赞  2009-9-16 12:08
外接e2prom就行了,比如串行的at24c0x系列存储器
点赞  2009-9-16 13:13
代码是次要的,关键是于LZ的存贮设备是什么?如EEPROM。
点赞  2009-9-16 13:17
思路都一样,实现方式不同而已。

你先搞清楚你的单片机的掉电不丢失的存储器是否支持IAP,或者是否有EEPROM。

你把你用的芯片类型发上来。
点赞  2009-9-16 16:28
其实,只要不是冷启动...

RAM是不变的

要不就和LS哥们说的一样

加一个EEPROM或操作片内未用的FLASH

点赞  2009-9-19 19:26
引用: 引用 7 楼 lbing7 的回复:
其实,只要不是冷启动...

RAM是不变的

要不就和LS哥们说的一样

加一个EEPROM或操作片内未用的FLASH

这个不一定,要看启动时代码从哪里执行。
点赞  2009-9-19 19:59
[quote]引用 8 楼 zyzhang365 的回复:
引用 7 楼 lbing7 的回复:
其实,只要不是冷启动...

RAM是不变的

这个不一定,要看启动时代码从哪里执行。
C51好像可以实现,但这不是绝对的,要看初始化函数是怎么配置的。
在别的编译器上更不能这么认为。
点赞  2009-9-19 20:03
其实,LSRAM变不变这个和语言没啥关系

而是和RAM的物理结构和单片机体系有关

点赞  2009-9-19 20:38
引用: 引用 10 楼 lbing7 的回复:
其实,LSRAM变不变这个和语言没啥关系

而是和RAM的物理结构和单片机体系有关

你说的很对,但是不能从纯软件或者纯硬件的角度来说,应该有个系统的方法吧。
有的编译器会初始化所有的RAM空间,有的不会,一般初始化数据段也会被重新初始化的。
曾经看到版主说自己在做老师,所以我才会这个贴的。
点赞  2009-9-19 20:49
引用: 引用 11 楼 zyzhang365 的回复:
引用 10 楼 lbing7 的回复:
其实,LSRAM变不变这个和语言没啥关系

而是和RAM的物理结构和单片机体系有关



你说的很对,但是不能从纯软件或者纯硬件的角度来说,应该有个系统的方法吧。
有的编译器会初始化所有的RAM空间,有的不会,一般初始化数据段也会被重新初始化的。
曾经看到版主说自己在做老师,所以我才会这个贴的。


一般非冷启动多为休眠模式用

现在的片子通常都有多级休眠,对于不同的低功耗要求和应用要求

灵活用好各级休眠模式是必须的

{
附扯一下休眠模式:
浅度休眠:通常来说就是MCU停止执行指令,当受到其它事件触发(一般是中断)时方返回停止点继续执行,通常这个功耗降得不太明显.在有的系统中甚至看不出降的效果,呵呵
中度休眠:MCU在停止执行前,会关闭部分系统模块(如定时器,片内的ADC等)由部分IO或中断唤醒.唤醒触发后返回停止点之后继续执行.通常这能降一半左右的功耗.
深度休眠:MCU完全当机.片内资源除了留做唤醒的模块以外全关(通常是IO或外中断),唤醒后从头(0x0000H这个地址)开始执行.这个降功耗非常明显,通常单片机宣称的微安级功耗都在这个条件下测量出来的.

当然,有的单片机说是支持5/6种休眠模式,其实也都在上面这个框架内

一般来说:前两种是不会修改RAM的内容的(其实,RAM的内容也都没改)后一种因为是从头开始执行代码,会重新初始化系统环境,而引起RAM被修改
}

大哥您所说的编译器会初始化RAM空间,其实这个是个可选项

比如说KEIL里面,在建C工程的时候,会让你选择是否加入STARTUP.A51这个汇编文件

它的作用就是为你的单片机进入main()之前先把你的RAM都清0,以防上电后RAM为随机的内容

很多人为了省事,开发的时候习惯性的在main里面一开始就整体配置,这是一个标准的C程序员的做法

先定义再使用嘛

但是,我觉得,如果系统资源允许的话

还是归纳一下模块的配置接口,把这个接口设计灵活点

然后,在每一次用之前都先配置一下,做到模块在确定的状态下运行,这样可靠性要高一些.
点赞  2009-9-20 01:09
呵呵 那我没什么好说的了,因为版主研究过这个了。谢谢!
点赞  2009-9-20 10:58
x25045 一款E2PROM芯片适合你,网上的程序例子也很多
点赞  2009-9-21 12:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复