引用: 引用 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程序员的做法
先定义再使用嘛
但是,我觉得,如果系统资源允许的话
还是归纳一下模块的配置接口,把这个接口设计灵活点
然后,在每一次用之前都先配置一下,做到模块在确定的状态下运行,这样可靠性要高一些.