【Allwinner ClassA20類庫分析】8.GP類的使用
提到RTC,就不能不說備份暫存器的作用。一般情況下,在設定了RTC的時間後,都會在備份暫存器中做一個標誌,表明當前時間已經被設定過,不需要重新設定;當沒有檢測到這個標誌,則證明RTC曾經斷過電,時間是不正確的。今天就來說已說備份暫存器類的用法。在使用之前,請先在https://github.com/tjCFeng/ClassA20下載ClassA20類庫。
備份暫存器,在Allwinner中叫做General Purpose。它具有和RTC一樣的特性,就是斷電後暫存器中的內容不消失,可以依靠RTC電池來維持,只不過它沒有自動累加的功能。
備份暫存器恐怕是所有功能中最最簡單的一個了,簡單到只有賦值、讀取,沒有其他的功能了,不過它可以當作一個全域性變數,一個可以跨程序、斷電不消失的全域性變數。
同以前一樣,還是先來看看對它的封裝
Allwinner A20共有16個備份暫存器,每個可以記錄32位的整型值。為了使用起來簡單方便,它被封裝成了單例,直接指定索引號即可寫入和讀取。
程式的編寫方法這次改變一下,不再使用窗體,直接編譯一個不帶有任何互動介面的程式來測試它。建立方法首先在選單中選擇工程,然後點選建立,在選擇“程式”。當然也可以選擇“控制檯程式”,差不多的
建立成功後自動生成一個最簡單的程式框架,begin和end間就是入口,相當於c的main函式
還是在工程中新增ClassA20資料夾的路徑,然後在uses中引用GP單元,開始編寫程式碼。
因為暫存器在程式中只是一個指標,除錯過程中並不能直接顯示它的值,所以定義了一個長整型的變數,方便除錯時的檢視
程式寫好後設置斷點並執行。斷點可以在程式執行到該行程式碼時停下來,進行一些除錯操作。當執行到給這個變數賦值備份暫存器值的程式碼後,將滑鼠放在變數上就能顯示當前的值了。第一次執行,備份暫存器的值預設是0,給備份暫存器寫入一個0xFF後再讀出,這個變數就是255
這個時候,可以關機斷電,任意時候開機再來讀取這個暫存器,它的值還是255,除非中途RTC電池被斷掉。
TGP.Instance.GetGP和SetGP是封裝後的方法,引數直接指定備份暫存器的索引號就可以了。除此之外,還可以直接對暫存器指標進行操作,也很簡
暫存器的指標是一個數組,給定下標來操作,和普通的變數沒什麼區別
注意,由於香蕉派的電源管理部分可能有一些小問題,造成斷電後備份電池掉電很快,所以我目前並沒有在香蕉派上斷電後成功讀取出備份暫存器的值,不過可以在其他板子上嘗試此程式。