一.地址映射与寄存器映射原理
1.何为寄存器
寄存器是计算机内有限存贮容量的高速存贮部件,可用来暂存指令、数据和地址。按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。
基本寄存器只能并行送入数据,也只能并行输出;而移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,或串行输入、并行输出,十分灵活,用途也很广。
2.地址映射与寄存器映射
(1).地址映射
存储器本身不存在地址,地址映射是通过对存储器的存储单元进行地址编码,以便CPU或其他控制器能够访问这些存储单元。而对对存储器分配地址的过程便是存储器映射。
(2).寄存器映射
在存储器中依据功能的差别分配专门对应该功能的内存单元的方式称为寄存器映射。通过寄存器映射能直接访问芯片内部资源、配置和控制硬件与系统调试和故障排除。
二.GPIO端口的初始化设置的一般步骤
1.GPIO简介
GPIO(General-purpose input/output)是通用型输入输出接口,它是一种常见的硬件接口,用于连接处理器或微控制器等主机设备与外部设备或扩展硬件模块。
GPIO接口通常由一组引脚组成,这些引脚可以通过软件编程来进行输入或输出操作。作为通用接口,GPIO引脚可以用于各种用途,例如控制外部设备的开关状态、读取传感器的输入信号、输出到显示设备等等。
在实现上,GPIO可以简单理解为一种可编程的开关,通过软件控制来实现输入和输出的操作。同时,GPIO还可以与其他硬件接口(如I2C、SPI等)配合使用,实现更复杂的硬件扩展和功能控制。
2.GPIO端口初始化设置的一般步骤
GPIO端口初始化设置的一般步骤为:
第一步:使能GPIOx口的时钟
第二步:指明GPIOx口的哪一位,这一位的速度大小以及模式
第三步:调用GPIOx初始化函数进行初始化
第四步:调用GPIO-SetBits函数,进行相应位的置位
三.嵌入式C程序代码对内存中的各变量的修改操作与对外部设备的操作的相同点与差异
1.相同点
(1).两者都涉及到对某个地址空间的操作。
在内存中修改变量需要知道变量的地址,而对外部设备的操作也需要知道设备的地址(例如寄存器地址)。
(2).两者都需要使用C语言中的操作符来进行操作。
对内存中的变量修改可以使用赋值操作符,而对外部设备的操作也可能涉及到赋值或其他操作符。
2.差异
(1). 操作的对象和范围不同。
内存中的变量修改是针对内存地址中存储的数据,而对外部设备的操作是针对具体的硬件设备或寄存器。
(2). 操作的语义和效果不同。
内存中的变量修改只会影响该变量的值,而对外部设备的操作可能会产生实际的硬件动作或影响系统的状态。
(3). 操作的访问权限和安全性不同。
对内存中的变量修改通常是在程序运行时进行的,受到操作系统的保护和限制。而对外部设备的操作通常需要特殊的权限或访问机制,可能涉及到硬件安全或系统稳定性等问题。
(4). 操作的实现方式和细节不同。
对内存中的变量修改通常由编译器和操作系统管理,而对外部设备的操作可能需要使用特定的硬件接口或驱动程序,需要考虑更多的细节和约束条件。
四.为何51单片机的LED点灯编程要比STM32的简单
C51与stm32都是常用的微控制器,但两者间的差异使得51单片机的led点灯编程比stm32简单。
1.硬件简单:51单片机较STM32具有更简单的硬件结构,其引脚数量较少,内部资源相对较少。这使得51单片机的编程更加直观,只需要对几个特定的引脚进行编程就能控制LED的开关。
2.寄存器少:51单片机的寄存器数量通常较少,这意味着在编程时需要考虑的因素较少,降低了编程的复杂性。
五.register和volatile这两个变量修饰符的作用
register:
在函数内部定义变量时,默认是auto类型,即分配给变量内存。如果定义一个变量用register关键字,那么编译器尽可能把变量存放在CPU内部寄存器中,这样就不必通过内存寻址来访问变量,提高访问效率
volatile:
用volatile修饰变量或地址,相当于告诉编译器这个值会随时发生变化,每次使用都要去内存中重新读取它的值。如果不用volatile,编译器会有优化操作:在同一进程中当上一次对这个地址操作的值在该进程中没有被修改时候,它会自动把上次读的数据取出来,而不是重新从这个地址取内容。在嵌入式开发中对寄存器或I/O端口的操作都要用volatile。