做嵌入式Linux 方向,跟寄存器打交道也有一段时间了,感觉寄存器就是一个比较特殊的东西。
首先这是书本上说的:
寄存器(register)是CPU(中央处理器)的组成部分,是一种直接整合到cpu中的有限的高速访问速度的存储器,
它是有一些与非门组合组成的,分为通用寄存器和特殊寄存器。cpu访问寄存器的速度是最快的。
寄存器是一种容量有限的存储器,并且非常小。
因此只把一些计算机的指令等一些计算机频繁用到的数据存储在其中,来提高计算机的运行速度。
CPU 中,做嵌入式的时候,有时候直接在内核代码中可以读写寄存器的值。而这个读写也没有想象的复杂,只需要调用一个函数(不同的芯片配套的内核,操作函数的形式和名字略微不一样),参考芯片给出的文档(文档中有不同的寄存器对应的绝对地址),比如有一款 arm9 的芯片使用ioremap(addr, vlaue),addr 就是对应在文档中的地址,value就是自己修改的值。一般是有范围限制的,这个在芯片对应的文档都有说明。0。+1 ,同样,硬件在检测到有报文发出,统计发送报文寄存器计数+1。但是这些也是可以在内核函数的发包出口或者收包入口做到;最简单的就是 LED驱动,通过修改特定的寄存器,就能控制LED的高低电平使其亮还是暗。为什么要使用寄存器呢?我个人认为的原因:
CPU 参与,或者CPU参与得极少,提高速度,而且本身CPU访问寄存器就十分地快;所以,在一些芯片的手册中,都可以看到很多寄存器的地址和对应的值(多的有几百上千个,在文档中排列着……),不同的值有不同的功能。
生效/不生效。就如同一些.so的库,对外留有接口,接口都写在对应的头文件中。**使用寄存器操作,这样比在内存中用一个内存变量,判断它的值来的快。**