码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2014-11-16 17:23:29      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:lazarus   classa20   arm linux   delphi   香蕉派   

   提到RTC,就不能不说备份寄存器的作用。一般情况下,在设置了RTC的时间后,都会在备份寄存器中做一个标志,表明当前时间已经被设置过,不需要重新设置;当没有检测到这个标志,则证明RTC曾经断过电,时间是不正确的。今天就来说已说备份寄存器类的用法。在使用之前,请先在https://github.com/tjCFeng/ClassA20下载ClassA20类库。

    

    备份寄存器,在Allwinner中叫做General Purpose。它具有和RTC一样的特性,就是断电后寄存器中的内容不消失,可以依靠RTC电池来维持,只不过它没有自动累加的功能。

    

    备份寄存器恐怕是所有功能中最最简单的一个了,简单到只有赋值、读取,没有其他的功能了,不过它可以当作一个全局变量,一个可以跨进程、断电不消失的全局变量。

    同以前一样,还是先来看看对它的封装

bubuko.com,布布扣

    

    Allwinner A20共有16个备份寄存器,每个可以记录32位的整型值。为了使用起来简单方便,它被封装成了单例,直接指定索引号即可写入和读取。

    程序的编写方法这次改变一下,不再使用窗体,直接编译一个不带有任何交互界面的程序来测试它。创建方法首先在菜单中选择工程,然后点击创建,在选择“程序”。当然也可以选择“控制台程序”,差不多的

bubuko.com,布布扣


    创建成功后自动生成一个最简单的程序框架,begin和end间就是入口,相当于c的main函数

bubuko.com,布布扣


      还是在工程中添加ClassA20文件夹的路径,然后在uses中引用GP单元,开始编写代码。

    因为寄存器在程序中只是一个指针,调试过程中并不能直接显示它的值,所以定义了一个长整型的变量,方便调试时的查看

bubuko.com,布布扣


    程序写好后设置断点并运行。断点可以在程序运行到该行代码时停下来,进行一些调试操作。当运行到给这个变量赋值备份寄存器值的代码后,将鼠标放在变量上就能显示当前的值了。第一次运行,备份寄存器的值默认是0,给备份寄存器写入一个0xFF后再读出,这个变量就是255

bubuko.com,布布扣


    这个时候,可以关机断电,任意时候开机再来读取这个寄存器,它的值还是255,除非中途RTC电池被断掉。

    TGP.Instance.GetGP和SetGP是封装后的方法,参数直接指定备份寄存器的索引号就可以了。除此之外,还可以直接对寄存器指针进行操作,也很简

bubuko.com,布布扣


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

bubuko.com,布布扣


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

    

    请在https://github.com/tjCFeng/ClassA20下载ClassA20类库。


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

标签:lazarus   classa20   arm linux   delphi   香蕉派   

原文地址:http://blog.csdn.net/tjcfeng/article/details/41173499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!