前言

在进行嵌入式开发过程中,寄存器可以说是与嵌入式工程师打交道最多的东西,因为偏向底层的驱动开发,几乎都是利用寄存器完成的。那么,寄存器到底是什么呢?下面为自己的一些理解,如有错误之处,还望海涵与纠正,谢谢!

内存映射

在正式进入寄存器的知识之前,首先对内存映射进行简单的介绍。此处以TI公司的DSP28335芯片为例。通过查询该芯片的官方数据手册,可获知该芯片的内存分配图。由于该图比较大,即使贴出来也会很模糊,所以此处仅展示一部分截图,如下:
对寄存器的理解
由上图可知,由于该芯片是32位,所以整个芯片支持的最大寻址范围为4GB,只是芯片厂商没有完全使用罢了。而整个芯片的内存空间又被分为很多,用于不同的功能。
在简单了解了内存映射之后,我们开始进行寄存器的讲解。

寄存器到底是什么

实际上,我们在操作芯片的寄存器时,其实操作的是寄存器对应的地址虽然直接操作地址的方式,会使得代码的执行效率稍微高一点,但是可读性和可维护性便会大大降低,这样的代价对于绝大部分应用而言是不可以接受的。如果对于关键代码而言,需要确保它的执行效率,那么可以小范围的使用操作地址的方式进行。
那我们为什么在实际编程时,并没有对相应的地址与寄存器之间建立联系呢?其实,是TI官方的文件已经帮我们完成了这个工作。其中,DSP2833x_Headers_nonBIOS.cmd文件为各个寄存器分配了地址,DSP2833x_Gpio.h文件为寄存器创建相应的结构体,而DSP2833x_GlobalVariableDefs.c文件则可以人为寄存器名称地址之间的桥梁,该文件的内容是为了定义上述cmd文件中的寄存器名称。

总结

通过上面的叙述,我们可以知道,寄存器实际上就是代表了一个对应的地址,说的再专业一点,这个过程就叫寄存器映射

相关文章: