cpu是数字处理系统中的一个重要环节。在我看来,单片机、微处理器、dsp均可以称做是cpu,只是它们的侧重点有所不一样罢了。具体来讲,传统意义上的单片机更偏重于嵌入式的计算,好比说咱们常用的5一、avr、arm芯片中不只仅含有了运算和控制功能,它还涵盖了定时器、串口、并口、usb、i2c总线等外部资源。dsp呢,cpu通常只是做为dsp的一个核存在,它一般还会包含另一个核,专门用于数字信号的处理工做。而微处理器,也就是咱们常常说的pc上的处理器,它的工做比较单一,专一于计算和控制功能的处理,所以通常来讲在这方面的性能上面,单片机和dsp都是不能和它相比的,有了南桥芯片和北桥芯片的帮助,pc的微处理器就能够专一于本身的本职工做了,效率上面也会有一个很大的提升。php
对于朋友们来讲,生活中遇到的最多的cpu实际上是x86的cpu。固然,若是有哪位朋友喜欢apple之类的玩具,也会知道一些arm的相关事情。剩下的就是一些专用领域的cpu了,好比说在通讯行业用到的比较多的powerpc芯片,在高性能服务器用的到的sun sparc芯片,在科学计算领域使用到的mips芯片。因此,不管遇到什么芯片,对于应用层开发的朋友都是同样的,只是在一些小地方须要还有一些注意的地方。好比说,html
(1)数据的对齐方式linux
(2)数据的字节序问题服务器
(3)函数参数的压栈问题app
(4)cpu的乱序执行问题less
(5)cpu中cache和内存一致性的问题函数
固然,若是咱们所要思考只是简单的应用层设计,考虑到这些内容自己已经实属不易了。然而,咱们考虑的是如何设计嵌入式操做系统的问题,因此接下来还要看看通常cpu下面都包含了那些内容。这样,只要熟练掌握了一款cpu的设计和实现,对其余cpu的知识也会举一反三了。性能
任何一款cpu,不论是完成的功能是什么样的,一般都会有这样一些基本设计:学习
(1)寄存器编码
堆栈寄存器
pc寄存器
状态寄存器
运算寄存器
寄存器是cpu内部的基本资源。无论cpu的代码执行到何时,这些资源都是共享的,因此在cpu发生中断、函数调用、线程切换的时候,都须要对这些寄存器进行保护,经常使用的基本措施就是把把它们保存到临时堆栈当中去。堆栈寄存器记录了当前堆栈使用到了什么地方,pc寄存器则记录当前代码跑到了什么地方,下一条指令在什么地方等。状态寄存器则保存了当前cpu的执行状况,包括计算有没有溢出、中断是关仍是开、有没有o除数异常等等。至于运算寄存器就因cpu而异了,有的cpu寄存器比较少,好比说x86的寄存器;有的cpu寄存器就比较多,好比说powerpc。运算寄存器的用途不少,好比说数据访问、计算、移位、返回计算结果等等。
(2)指令集
寻址指令
数学运算指令
逻辑运算指令
软中断指令
跳转指令
远程调用指令
io访问指令
栈操做指令
指令集在某种程度上直接决定了某一种cpu的类型。就像intel和amd生产的cpu虽然有差异,可是它们的cpu使用的都是x86的指令集,而marwell、samsung和高通生产的cpu固然也不一样,可是它们的指令集都是arm指令集。因此,若是软件在marwell上跑,通常来讲也能够在Samsung上跑起来。指令集很复杂,内容不少。可是一般来讲,上面这些内容都是cpu所必需要完成的几种指令。固然重中之重的仍是中断和栈处理指令。宋工企鹅号:3524-6590-88 Tel/WX:173--1795--1908
(3)中断、异常处理机制
不论是什么cpu,中断部分的内容都是少不了的。试想想,若是一颗cpu只知道不停地运行,那么它的执行效率其实是很低的。拥有了中断的cpu不只使得cpu能够和更多的外设io打交道,还能极大地提升自身运行的效率。不一样的cpu处理中断的方法其实都差很少,在整个cpu的地址空间里面,一般在低地址区域会有一张中断向量表,表中每一项记录了每个中断对应的处理函数。因此,只要中断发生时,cpu就会首先将下一条pc地址压入堆栈,而后跳转到中断向量表中对应的中断地址处执行的相应的处理函数。这个过程是cpu自动完成的,不须要咱们关心。这样对咱们来讲,它和cpu中的函数调用其实没有什么区别。等待中断处理结束后,咱们使用ret指令返回到以前压入的那个ip地址处,继续下面的代码。整个过程就好像中断根本没有发生过同样。
宋工企鹅号:3524-6590-88 Tel/WX:173--1795--1908
因此,对于cpu的了解其实主要就是对寄存器、指令集和中断的了解。有了对中断和堆栈的深刻理解,其实也就没有什么困难的了。在这里咱们你们能够考虑一个问题,如何在Windows或者linux下仿真中断完成咱们的操做系统开发呢?你们能够本身先思考一下,咱们会在随后的博客中继续介绍。整篇文章,咱们没有介绍编码的相关内容,其实只要把这里的基本概念弄清楚了,剩下来其实就是一些流程性的工做了。在软件开发中,设计实际上是最难的,剩下的才是开发和调试。
如下课程可免费试听C语言、电子、PCB、STM3二、Linux、FPGA、JAVA、安卓等。
嵌入式开发之CPU的那些事...
http://bbs.elecfans.com/jishu_1588685_1_1.html
(出处: 中国电子技术论坛)
想学习的你和我联系预定就能够免费听课了。