寄存器的妙用

   在一个项目中,需要在正常运行状态和待机状态之间传递信息!

待机状态时,程序代码、变量、堆栈都放在主芯片的几K大小的RAM区运行;使用汇编语言实现!

为了省电,把DDR,程序ROM,几乎所有硬件模块都关闭了,只留下RTC,GPIO,中断等相应按键,遥控器,时间事件。

怎么实现相互传递信息呢?

1.使用全局变量不行,因为全局变量存储在DDR中,待机后就关闭了。

2.使用flash存储可以吗?可以实现,但是很不好.主要有a.需要在待机状态打开flash,耗电; b.在正常运行时,FLASH使用MTD管理,在待机时,实现flash读写,寻址到变量的地址很麻烦,使用汇编语言实现呢。占用的ram的空间太多了。并且不利于维护程序。c.速度慢。在待机状态太难实现了。


苦思冥想了一下午终于想到办法,使用在待机状态还处于活动状态模块的寄存器传输变量。动手试验!

先用UART模块的闲置不用的寄存器,发现在待机状态UART模块也断电了。

想GPIO模块在待机状态肯定不会断电,使用GPIO闲置不用的寄存器。发现有许多GPIO电平变换中断寄存器没有使用,还是32位的呢!

配合RESET寄存器还可以判断冷热启动,发现可以在正常运行和待机状态正常传输信息了!实现代码很少,并且速度很快!

后来在这个基础上在正常状态和待机状态传输了许多信息!


希望能有更好的办法!




你可能感兴趣的:(计算机体系结构,flash,汇编,语言,存储,活动)