微型计算机入门之寄存器的作用与使用方法

配置在内存中的寄存器

硬件控制中不可或缺的东西就是被称为寄存器的特殊内存。从程序控制硬件是通过读写寄存器的内存来完成的。
寄存器
程序是指CPU读写内存信息并进行运算。你可以通过读写这个内存来控制硬件。

确认寄存器所在的内存位置

微型计算机在内存中提供唯一的寄存器区域。
内存映射
表示这种微型计算机的内存的图称为内存映射。您还可以通过查看内存映射来查看程序内存和静态内存的放置位置。

在该微型计算机中,存储器地址由2Byte表示。也就是说,指针变量的大小是2Byte!

使用寄存器的硬件控制

来自程序的寄存器访问方法

让我们看看如何从程序具体地访问寄存器。

IO.PCR6         = 0x01;
IO.PDR6.BYTE    = 0x01;

这就是对寄存器的写入处理。

您可以看到您正在作为结构成员访问。寄存器是一个特殊的内存,但是您可以访问它,就像这样一个普通的变量一样。

volatile

Volatile(Bolatile)是const和static等修饰符的伙伴。Volatile在一般的C语言的书籍等中没有解说,但是在嵌入式开发中,在寄存器定义的时候一定会出现的修饰符。

在C语言学习篇中学习了编译程序。编译器的首要任务是翻译,但在翻译时,我们会改进程序代码,这被称为优化。通过这种优化,您可以减小您创建的程序大小,提高无用的处理效率并提高运行速度。
例如,下一个程序绝对不会输出printf语句的“Hello”,因为flg变量的值以1初始化。编译器确定这种情况,删除未执行的程序,然后进行翻译。
在这里插入图片描述

但是,这种优化有时会对程序产生不好的影响。Volatile是用于抑制(不执行优化)优化的修饰符。
在这里插入图片描述

通过在变量定义中赋予volatile修饰符,可以对编译器进行一个指令“不要对这个变量进行最优化处理!“。

#define   IO  (*(volatile struct st_io *)0xFFD0) /* IO    Address*/

从这个定义可以看出,IO的真实身份是被宏定义替换的地址信息。这个常量的地址信息使用指针功能,通过覆盖st_io结构的类型来访问内存。

因此,C语言可以直接访问任意内存位置,而无需使用变量。您可以直接访问微型计算机中内存固定地址中的寄存器内存,这就是C语言仍然在嵌入式开发现场使用的原因。

猜你喜欢

转载自blog.csdn.net/qq_18191333/article/details/107423947
今日推荐