嵌入式学习笔记
我们编程的目的是为了操作硬件,硬件在处理器中都是已地址的形式出现的,我们访问硬件实际上就是访问这个硬件挂载到CPU虚址空间的地址,这个地址怎么访问呢?地址实际上又被寄存器平分了,那么我们访问硬件最终就变成了访问寄存器。所有学好一个处理器真正的本质是要掌握这个处理器寄存器的操作。
C 语音的代码是永远不可能最先直销的,C语音的代码是需要占空间的,需要内存的,而这个内存需要经过初始化之后才能使用的,也就是C代码再运行之前一定有一部分代码来完成初始化的工作,然后跳转到C代码来运行,这部分代码就是汇编代码,所以硬件的初始化代码一定是汇编。
一个寄存器地址是由 基地址+偏移地址 组成
0x40010800(整数) //这是一个16进制的整数
(unsigned long *)0x40010811 //(地址) 16 进制整数强制转换为指针类型,指针指向内存地址
*(unsigned long *)0x40010800 //(地址内容) 取地址内容
RCC_typedef *RCC; //定义一个结构体的指针
RCC= (RCC_typedef *)0x40021000; //指针指向一个地址
RCC ->APB2ENR |= (1<<2); //通过指针访问机构体内部成员
RCC 控制设备的时钟是否开启 外设挂载到CPU总线上
异常向量表:当发生某个特定的事情(如中断、某种异常)我们的CPU会自动的跳转到某个一个地址里面去,特定的事情对应特定的地址,并且这个特定的地址作为我们应用工程师来说是没法修改的,是厂商在CPU中固话好的。由NVIC(中断向量控制器)控制 PC指针:可以这样理解PC指针指向哪里,CPU就从哪里执行。
Kill中遇到 __wfi 这种双下划线开始的小写命令,表示直接转换为arm内核命令
C 语言中结构体中的成员在内存中都是连续地址空间存储的,可以用结构体初始化一些连续地址的寄存器
结构体的声明一般都放到头文件中
预处理 外层基本都加一个括号利润,防止不必要的意外产生
#define A (0x234)
当在使用某个外设的时候,一定不要忘记打开外设挂载的总线的时钟
嵌入式开发C语音大法: 一个数字 & (位与)一个数字,相当于截取数字的后几位,或者得到的数字不会超过与的数字
文档信息
版权声明:可自由转载(请注明转载出处)-非商用-非衍生
发表时间:2020年9月12日 10:14