大家好,今天给初学子介绍一下计存器的反问,我们知道单开机的控制 是通过相应计算器的配置来实现的,对吧?那么我们如何实现对计算器的访问呢?包括前面 我们的创口啊,这个驱动都是通过对计算器的相应的读写来实现的,对吧?每个模块的计算器定义啊,都定义在某一个地址,这个地址都是固定的,然后他有这么多功能的计算器,对吧?这些功能的计算器也是 排序也是固定的,因此我们可以定一个这样的一个数据结构。我们以创客为例, 这个这个数据机构啊,你看他的从状态计成器数据计存器不特例,看一下和这个我们这个 表里面的排序是不是完全一致的,因为这是三十二位干壁机,因此他全部定义成三十二位的变量,对吧?这是一个我们平时定义数据机构不也是 这么定义的吗?但是有一点大家可能注意到了,这里有个比较特殊的 io 的标志,这个标志啊, 他就是告诉变异器,每次反问这个机构的成员的时候啊,必须反问他的原始位置 不要进行优化,因为我们在变异代码的时候,为了提高他的效率,有可能 会对某些变量进行优化的。他直接反问他的中间变量,这个中间变量你是不知道的,是 b 一气运算工程中产生的中间变量,他可能就直接使用那个中间变量了,对吧?但是对于我们这个外设的控制呢? 比如说你想串口,他什么时候接收到数据,你不知道的,对吧?所以必须反问他的原始的信息, 那么 我们如何来反问相应的计算器呢?就是把相应这里涉及到一个指针的概念, 你看这个地址,我们看一下 u a rto 啊,对 usb o, 看是他是怎么定义的,他就把这个 usa rt 的,这是一个长数地址,你看这是一个地址,这也是个长数,对吧?都是一个长数。第一个状态计算器定义的一个起始地址, 他这个是固定的,在单片机里面生产的时候就固定了,然后我们把这个地址呢转化为相应的指针, 刚才我们看了这个数据机构吗?把它转换为这个数据机构的指针, 那么指针的成员呢?相当于是不是修和这个我们实际的计算器匹配起来了,这个指针变量,他的其实地址是不是就是这个地址?因此我们对相应指针成员的访问就可以 介绍一些对相应计算器的访问了。所以我们在实际的使用过程中,我们并不需要知道他的实际地址,所有的计算器,我们的头文件都给我们定好了。 同样的对相应计算器的反问呢?我们要也要,我们也要使用这个库里面的,这个库里面给我们定义的 写红或者函数,像,就像类似这个来判断某一位是不是之一,对吧?要采用这种方法,而不是我们直接 比如说这个鱼一下,把这两位鱼一下也可以判断,但我不介意大家这么做,因为 你采用这种方法的话,他是通用的,你换一个芯片是吧?这个代码的从可从用性、可维护性都非常高,如果你采用这种方法的话,那就会比较差, 因为在有些单片机里面,比如说这个功能定义在这个控制计算器一里面,在另外一个单片机里面,他可能定义在控制计算器二里面, 对吧?那你的代码就不能通用了。假如我们使用这个外面有个红或者函数明的话,那就是通用的。