查看: 627|回复: 0

【ClassA20类库分析】8.GP类的使用

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-11-17 09:13:07 | 显示全部楼层 |阅读模式
    分享到:
    提到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是封装后的方法,参数直接指定备份寄存器的索引号就可以了。除此之外,还可以直接对寄存器指针进行操作,也很简单

       
    寄存器的指针是一个数组,给定下标来操作,和普通的变量没什么区别

       
    注意,由于香蕉派的电源管理部分可能有一些小问题,造成断电后备份电池掉电很快,所以我目前并没有在香蕉派上断电后成功读取出备份寄存器的值,不过可以在其他板子上尝试此程序。
       
    请在https://github.com/tjCFeng/ClassA20下载ClassA20类库。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 12:25 , Processed in 0.116809 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.