style: html to md syntax
This commit is contained in:
@@ -48,7 +48,7 @@ Intel 的 STC89C51\C52 系列早在上世纪 80 年代就已经广泛运用,
|
||||
|
||||
如果我们去图书馆里的书架上拿书并观看,则需要:走到对应书架 - 拿书(获取数据)- 回到书桌,这需要花费相当一部分的时间,此时硬盘相当于书架;如果我们直接拿书桌上的书,则相对速度会快很多,此时书桌相当于主存;如果我们手上就有一本书,那么我们低头就可以看到,手就相当于寄存器。所以,寄存器是 CPU 内部用来存放数据的一些小型的存储区域,用来暂时存放参与运算的数据和运算结果以及一些 CPU 运行所需要的信息。
|
||||
|
||||
以我举例而言,<strong>可见寄存器获得数据的速度会快于主存与硬盘,而存储数据的大小将会小于主存与硬盘</strong>,如果这块不清楚的话也可以去看 也许你会用上的基础知识 中的存储器知识部分。
|
||||
以我举例而言,**可见寄存器获得数据的速度会快于主存与硬盘,而存储数据的大小将会小于主存与硬盘**,如果这块不清楚的话也可以去看 也许你会用上的基础知识 中的存储器知识部分。
|
||||
|
||||
而从汇编语言的角度来讲(此为 Intel 的汇编语法):
|
||||
|
||||
@@ -79,7 +79,7 @@ ORG 0BH
|
||||
|
||||
以上简单例举了寄存器的一般作用,以汇编语言出发去讲的原因是:它能有效地展现底层代码的工作原理,既不会像机器语言那样只用 0、1 表示的晦涩难懂,又不会像高级语言那般难以直观地看到底层的工作方式。但是,我们做嵌入式入门开发的过程中并不会让你直接去写汇编语言,而是以最基础的 C 语言(相比汇编而言,C 在功能上、结构性、可读性、可维护性上有明显的优势),通过 Keil、IAR 等拥有交叉编译器的 C 语言软件开发系统来完成高级语言、汇编语言、机器语言的转码工作,从而通过 C 语言的编写来控制单片机等嵌入式系统的开发。
|
||||
|
||||
而抽象层面的 C 代码需要通过访问寄存器来直接控制硬件。所以在嵌入式开发的过程中,C 有了特殊的含义:<strong>C 里的数字代表的可能只是一个地址或者一个数据,但是在嵌入式开发里,这样一个数字也可以代表着一种寄存器状态。</strong>
|
||||
而抽象层面的 C 代码需要通过访问寄存器来直接控制硬件。所以在嵌入式开发的过程中,C 有了特殊的含义:**C 里的数字代表的可能只是一个地址或者一个数据,但是在嵌入式开发里,这样一个数字也可以代表着一种寄存器状态。**
|
||||
|
||||
下面引入一个 STM32F1 系列的 GPIO 部分寄存器图(来源正点原子提供的 F1 参考手册):
|
||||
|
||||
@@ -146,9 +146,9 @@ typedef struct
|
||||
|
||||
所以由以上提到的例子而言,C 语言可以从如下三方面进行与寄存器之间的控制:
|
||||
|
||||
1. 寄存器的地址可以使用<strong>指针变量</strong>来访问。
|
||||
2. C 语言中的<strong>结构体可以用于表示寄存器映射</strong>。
|
||||
3. C 语言中的<strong>位域可以用于表示寄存器中的位</strong>。
|
||||
1. 寄存器的地址可以使用**指针变量**来访问。
|
||||
2. C 语言中的**结构体可以用于表示寄存器映射**。
|
||||
3. C 语言中的**位域可以用于表示寄存器中的位**。
|
||||
|
||||
而且 C 语言中的内联汇编可以用于直接访问寄存器。在某些情况下,如果我们需要直接访问寄存器来完成复杂的硬件控制操作,则可以使用汇编语言指令来直接访问寄存器,从而实现复杂的硬件控制操作。常见的如,堆栈大小的设置等。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user