在一個項目中,需要在正常運行狀態和待機狀態之間傳遞信息!
待機狀態時,程序代碼、變量、堆棧都放在主芯片的幾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寄存器還可以判斷冷熱啓動,發現可以在正常運行和待機狀態正常傳輸信息了!實現代碼很少,並且速度很快!
後來在這個基礎上在正常狀態和待機狀態傳輸了許多信息!
希望能有更好的辦法!