在嵌入式开发中,处理器有两种:微控制器和微处理器。那么这两种处理器有何区别呢?微控制器 = CPU + 片内内存 + 片内外设;微处理器 = CPU。在以前嵌入式硬件资源很少时,它们的区别对于硬件工程师来说还是很大的。但是在现代的嵌入式中,它们的概念都差不多了。相对来说,微控制器具有成本低,功耗低等优点,常用于嵌入式系统设计;对于软件工程师而言,微控制器和微处理器没有任何区别。
本系列博客内容是根据狄泰软件学院的《门徒计划》中的 主线课程 相关内容总结而来,狄泰技术交流群:199546072。
下来我们来看看寄存器的分类:CPU 寄存器和外设寄存器。CPU 寄存器是指专用指令执行、数据运算、变量处理以及参数传递;外设寄存器是指用于控制外设的行为和工作方式,寄存器值得配置需要根据芯片手册完成。在处理器中关键寄存器:PC - 重新计数器(指令指针 IP)和 SP - 栈指针(Stack Pointer)。PC 程序计数器的特性,每执行一条指令,PC 中的值就会发生变化,PC 时钟保存下一条 CPU 要执行的指令地址。SP栈指针的特性,始终指向栈空间的顶端,实现 LIFO 特性,保存中断断点、函数调用返回点以及 CPU 现场数据等。我们来看看 PC 和 SP 的使用案例:函数调用。如下
在函数调用的时候,PC 指向跳转函数的地址处。在它执行完跳转函数的内容后,接着又返回前面的函数中接着执行代码。那么它如何知道该返回到哪呢?此时便用到了 SP 栈指针。在 PC 进行跳转前会将此时的上下文信息保存到 SP 栈指针指向的栈上。当执行完跳转函数的内容后想要返回原来函数的地址时,此时便会利用 SP 栈指针进行返回。bp 指针是用来保存 SP 栈指针的基地址的,当保存了 PC 的上下文信息时,SP 将会向下移动。
下来我们来看看处理器的 IO 操作,处理器与外设之间的数据通信通过 IO 操作完成。IO 分为内存映射 IO空间和独立 IO 空间。内存映射 IO 空间是指外设通过精密的硬件连接映射到处理器的地址空间,通过地址访问的方式与外设进行通信;而独立 IO 空间是指独立于地址空间,无法通过地址访问外设,使用专用指令与外设进行通信。从软件工程师的角度来看,只需要对不同的 IO 端口读写就可以操作外设;读写 IO 端口时候的具体值和意义需要查询具体的硬件手册。那么硬件设计的关键是什么呢?如下
通过具体的硬件设计,可以使得地址总线上的值在某个范围时,片选信号为“真”,即:使能连接的设备,从而读取相应地址中的数据!这些都是硬件工程师关心的东西,我们只需要能看的懂就可以了。下来以具体设备的地址映射为例来进行说明,地址为0xFFFF1234,如下
我们看到低 16 位是通过与门来进行连接的,也就是说,只有它们全为 1 时才能接通。接下来看看处理器启动过程:1、处理器上电后,PC 寄存器固化了一个默认值;2、PC 默认值用于决定第一条执行指令;3、第一条执行指定隶属于启动顺序。如下图所示
在嵌入式的启动程序中,我们称之为 BootLoader,它也是系统上电后运行的第一个程序(Not OS)。根据运行阶段,体积和功能的不同分为三个部分:a> BL0 - 固化于硬件中,用于初始化硬件,加载并运行 BL1;b> BL1 - 存储于外部存储设备中,用于初始化主存,加载并运行 BL2;c> BL2 - 存储于外部存储设备中,用于引导操作系统执行。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。