提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
单片机学习记录
一:寄存器
处理器控制硬件原理
单片机内部有处理器及其地址空间(处理读取的范围)。其中处理器可以读写地址空间。
地址空间分为:ROM RAM IO RSV.可分类为程序上(ROM和RAM)和硬件上(IO和RSV)。
ROM只读存储器。用于存储程序,且只读不能篡改数据。这样对数据起一个保护作用,断电重连之后数据不会被清空。
RAM随机存取存储器。用于存储数据和变量,处理器可以进行读写操作。
IO(SFR):地址空间还开辟了地址空间控制不同的硬件去工作。其中每个硬件(比如GPIO UASRT)内部都有寄存器去控制每个硬件的工作。
寄存器是用来控制 控制器的
处理器控制硬件总结:CPU不能直接控制硬件,硬件是由相应的控制器控制的,而每个控制器内部又有寄存器,处理器将各个控制器内部的寄存器映射到CPU的地址空间的一段范围,这样CPU可以通过读写寄存器来控制硬件。
如何用操作寄存器
一:Memory map:地址映射表:将常用的硬件指令映射到cache中。
内容补充
【1】存储器的结构层次
【2】cache的作用
因此若要对寄存器查询,首先看地址映射表,查找对应的寄存器地址。
二:查找存储器映像:是地址映射表内各个单元的详细说明
地址映射表一般说明那块是RAM那块是ROM那块是IO(RFC)硬件配置。但是存储器映射会把其细分,比如硬件配置,其会列出每个硬件的相应地址,比如stm32f10x:
三:找想操作对应外设的寄存器地址(以GIPIOA Pin1为例)
这里注意必须以(32)位方式操作,这样我们在写代码时,必须要用(unsigned int*)+地址来储存相应寄存器地址,用*
(unsigned int* )+地址=来操作寄存器地址(往地址内写内容)。
偏移地址:偏移地址+起始地址(上面二中图片有提到)
复位地址:用来复位
四:代码层面进行操作(宏操作)
如果在寄存器连续的前提下可以用数组或者结构体写!!!(重点)
重点是#define GPX2 (*(gpx2 *)0x11000c40):从右往左看,定义一个结构体类型的指针指向寄存器起始地址。
这样写的原因是操作的寄存器起始地址相同,这样就可以把结构体首地址设置为寄存器的起始地址,而结构体内部的成员代表偏移地址
二:栈
1:栈的概念:
【1】栈的本质是一段内存,程序运行时用于保存一些临时数据,如局部变量,函数的参数,返回值,程序跳转时需要的寄存器等等。
【2】栈和堆的区别
【2】增栈,减栈,满栈,空栈
增栈和减栈:
增栈是数据存储时由低地址想高地址存储数据。
减栈是数据存储时由高地址向低地址存储数据。
满栈和空栈
满栈和空栈的区别:先存数据还是先移动栈指针。
满栈是先移动栈指针再存
空栈是先存再移动栈指针
所以栈可以分为四类:空增栈,空减栈,满增栈,满减栈
ARM处理器一般用满减栈