单片机指令集和操作系统的关系

发布者:电子科技爱好者最新更新时间:2018-11-22 来源: eefocus关键字:单片机  指令集  操作系统 手机看文章 扫描二维码
随时随地手机看文章

1> 首先讨论各种单片机与操作系统的关系


说到单片机,大家第一时间想到的应该是51单片机,对吧。不错,更高级一点的AVR,把他称为单片机,我们也还觉得可以接受。那么再高级一点的ARM7,8086,80386,Core i3,Athlon 等等我们更习惯称他们为CPU,因为学习计算机原理的时候都是这么叫的,但按照单片机的定义,他们也是归属于单片机。这也不怪大家,中国的教育都是这样,只注重告诉你是什么,而不告诉你他们之间的联系。上述几种单片机或者芯片(如果你还是觉得把core i3叫做单片机你不习惯的话)在原理上都是一样,即都是有运算器 控制器 寄存器构成的,不同之处在于它们的硬件电路实现不同,个数不同,功耗不同,计算能力不同,但都提供相同的基本功。OK,终于让cpu找到了组织,那么就介绍为什么有的单片机要操作系统,有的在我们学习的过程中压根就跟操作系统不挨边。


51/AVR单片机 在学习他们的时候,都是先介绍它们有哪些资源——有几个寄存器,有几个时钟等,然后就是怎么用汇编,用C或者是C与汇编混合编程。这里我们用的语言都是可以直接操作硬件资源的,因此我们可以自己决定什么时候使用哪个寄存器,什么时候将寄存器内容写到辅存储器中。


ARM单片机 在学习它的时候,我们可以给他搭载操作系统,如MicroC/OS,iOS X, Android或者其他定制的Linux操作系统,但有时我们也经常不让它搭载操作系统,而是直接像使用51单片机那样来操作它。


Core i3 / Athlon单片机(或者CPU,如果你还是不喜欢用单片机来形容这么牛逼的硬件) 你几乎没有听说过身边谁会在这种单片机上开发应用(如果有,一定要引荐我认识一下哦)。因为在这种单片机上开发的应用有一个很牛逼的名字——操作系统! 由于这种单片机提供的资源太多,能干的活太多,我们需要有一个专门的程序来负责管理它,从而避免对相同的功能重复开发。这样我们就可以从对硬件编程中解放出来,更专注于应用层面的开发。从某种意义上来说,操作系统也就是一个应用程序而已,只不过他有点特别。


一般这种情况下,打个比方会比较好——单车和汽车。单车很简单,我们对它的构成及零部件也很熟悉,链条掉了,我们也完全能够应付。这就好比51单片机,资源不多,我们完全能够hold住。相较而言,汽车则复杂很多,有减速系统,刹车系统,电子系统,空调系统等等,但是我们并不需要清楚他们的硬件工作原理,我们之需要知道按那个开关,踩那个踏板就好了。这就好比单片机上的操作系统,它不需要我们清楚硬件的构造,想要实现功能,直接调用系统提供的API就可以了。 在我们双脚不停的蹬着踏板,自行车就前进这个动作中,我们是清楚的知道这其中各个部件的运行原理过程的;但如果你是踏着油门,汽车就跑起来,我觉得大部分人都不了解其中涉及到了哪些部件,以及各个部件的原理的。但这不妨碍我们使用,不是吗。


2> cpu与指令集的关系


cpu依靠指令来计算和控制系统,每款CPU在设计时就规定了一些列与其硬件电路相配合的指令系统,或者说某款cpu的硬件设计其实就是针对某个指令集的一种硬件实现。指令集也就是所谓的目标代码(或称为机器代码,是可以直接在CPU上运行的代码)可以看作是要求cpu对外提供的功能,某款CPU的设计肯定是朝着某个指令集来的。所以,不同的cpu架构,也表示这他的指令集要么较之前的指令集有所拓展或者就是实现了一种全新的指令集。指令集中的一条指令,就是让cpu完成一系列的动作,而该动作的完成则表明了某种运算的完成。一个功能可能需要一条或几条指令来实现。比如汇编的MOV或者LD语句就可能对应着几条cpu指令。


下面介绍几种常见的CPU架构与指令集的对应关系(所谓架构是指硬件电路的实现):


intel X86架构CPU可能实现了多个指令集x86,x86-64,MMX,SSE,SSE2,SSE3,SSSE3 ,而这些指令集中的指令让cpu完成的动作都比较复杂,所以也称为CISC


AMD amd64架构的cpu 兼容了x86指令集还拓增了3D-Now!指令集,用于加强对3D显示的支持。


ARM ARMv1~ARMv7架构的cpu实现了Thumb指令集和ARM指令集。这些指令集中的一条指令让cpu完成的动作都比较简单,所以也称为RISC指令集


3> 指令集与操作系统的关系


这里要重新提及一下之前讲到的两个概念:指令集——就是机器代码;操作系统——就是应用程序


首先我们要知道计算机之父冯-诺伊曼说计算机只能运行在二进制上。所以不论是操作系统还是普通的应用程序最终都得转化到二进制代码才能够被cpu所处理。而用高级语言编写的普通应用程序都必须经过编译器编译后成为二进制代码(指令)才能运行。而不同的cpu所实现的指令集不同,所以不同的指令集对应的编译器也不尽相同,编译器不同,相同的高级语言程序经过编译后所得到的二进制代码也不同。这就引出了“移植”和“跨平台”两个概念。OK,重新捋一下:cpu架构-指令集-编译器-程序 环环相扣,紧密联系。所以你就会听到说Windows操作系统只能够运行在X86架构的CPU上,不能运行在Power 或 ARM 上,因为指令集不同,又所以就有了“Wintel”联盟。所以你也可以看到有的编译器是有硬件厂家提供的,比如Intel就提供C和C++的编译器,这样编译出来的程序就能更好的利用硬件的性能。那为什么又会听到linux可以运行在不同架构的CPU上呢?那是因为linux是开源的,因此就可以将它移植到不同的CPU平台上,然后在用相应的编译器编译,就得到了可以在该CPU上运行的二进制代码了。而Windows是封闭的,得不到源代码,而MS自己又没有移植到别的CPU平台上的打算,所以当然就只能在X86上运行了。(BTW,X86也是性能最好的CPU之一,而Windows对性能要求较高,所以MS当然也就不愿意移植了)


关键字:单片机  指令集  操作系统 引用地址:单片机指令集和操作系统的关系

上一篇:加深对单片机的理解,单片机的指令执行过程详解
下一篇:8、16、32位单片机概念与寻址空间

推荐阅读最新更新时间:2024-03-16 16:18

单总线单片机多机通讯系统设计
提出了用单总线完成单片机通讯的方法。结合系统既传输数字信号又传输模拟信号的特点,提出用消侧音电路解决模拟信号的方案,并给出了详细的技术解决方案。 传统的多机通讯系统一般需要四条线完成: 1.电源线;2.地线;3.发送信号线;4.接收信号线。然而,对于主机和分机距离较远、分机台数较多的系统,采用四线制的经费投入较大,安装起来也颇困难。基于这一问题,本文结合为某医院研制的既有模拟信号(语音)又有数字信号的传输呼叫系统,提出用单总线实现多机通讯,并给出了一个完整的技术方案。 1 单总线制多机通讯系统的总线设计方案 本设计实现的多机呼叫系统的主要功能是:分机呼叫主机,利用单片微机向主机发
[单片机]
单总线<font color='red'>单片机</font>多机通讯系统设计
MSP430单片机的单相正弦波逆变电源设计
本系统实现输入直流电压15V,输出交流电压有效值10V,额定功率10W,交流电压频率在20至100Hz可步进调整。以MSP430单片机为控制核心,产生SPWM波控制全桥电路,然后经过LC滤波电路得到失真度小于0.5%的正弦波。采用PID算法反馈控制使输出交流电压负载调整率低于1%,采用开关电源作为辅助电源、合理选用MOSFET等使系统效率达到90%,采用输入电流前馈法来估计输出电流以实现过流保护以及自恢复功能。 引言 要求实现单项正弦波逆变电源,输入直流15V,输出交流电压有效值10V,功率10W,且频率20至100Hz步进可调,要求波形无明显失真,负载调整率小于1%,效率尽可能高,系统要具备过流保护以及自恢复功能。由于输出功
[单片机]
MSP430<font color='red'>单片机</font>的单相正弦波逆变电源设计
51单片机流水灯的三种实现方法
首先,介绍下原理。下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。 实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。 听起来是不
[单片机]
51<font color='red'>单片机</font>流水灯的三种实现方法
51单片机学习笔记———13.1DS1302实时时钟原理部分
DS1302实时时钟 芯片原理图: 引脚图: 需要注意的是,VCC1跟VCC2都外接了电容,只是容量不一样,同常备用电源VCC2的电容值是VCC1电容值的100倍,这也不难理解,如果断电,VCC2将能够提供较长一段时间的电力。 VCC1(主电源)-----------过滤滤波作用 VCC2(备用电源)--------断电时放电提供电力 X1与X2引脚接上晶振以获取实时时间 各种不同的引脚有着不一样的作用,我们在这里只介绍了一些特殊引脚,如有所需,请自行查阅官方数据手册。 DS1302内部有8个寄存器,分别掌管着秒,分,时,天,星期,月,年还有一个写入保护。 我们将依次介绍,首先看原理图: 寄存器0: “B
[单片机]
51<font color='red'>单片机</font>学习笔记———13.1DS1302实时时钟原理部分
PIC单片机人机接口模块独立式按键的电路设计
  本实例可以分为5部分,如图1所示。   图1 系统组成原理框图   下面将对这5部分分别进行说明。   (1)复位电路。   上电时,对复位电路中的电容充电,也是对PIC单片机进行上电复位的过程,在这一过程中,还可以手工直接按动上电复位中的按键,对其进行复位。   (2)时钟电路。   时钟晶振可以采用主频为0~20MHz的晶振,接法如图2所示。   图2 复位电路和时钟电路   (3)独立式键盘输入。   通过PlC16F877的端口D直接输入,在实际电路实现时,由于会产生抖动,所以,在编程时要采用100ms的延时进行复查,确定后再输出数据。   (4)LED输出。   通过PIC16F877的端
[单片机]
PIC<font color='red'>单片机</font>人机接口模块独立式按键的电路设计
使用8051单片机原理的步进电机控制
步进电机是一种无刷同步电机,它将完整的旋转分为若干步。每个步进电动机将具有一些固定的步进角,并且电动机以该角度旋转。在本文中,我将向您展示如何使用两个不同的驱动器(L293D和ULN 2003)将步进电机与8051连接。此外,此处还将说明使用8051单片机的步进电机控制。 使用8051单片机原理的步进电机控制 这些电路的主要原理是使步进电机以特定的步进角步进旋转。由于控制器无法提供电动机所需的电流,因此ULN2003 IC和L293D电动机驱动器用于驱动步进电动机。 电路1:使用8051单片机和L293D进行步进电机控制 该项目中的第一个电路是使用L293D电机驱动器IC实现的。由于L293D电动机驱动器具有四个输出引脚的
[单片机]
使用8051<font color='red'>单片机</font>原理的步进电机控制
MSP430单片机模块设计方案解析
当前能源短缺成为制约社会经济发展的重要因素,如何实现能源高效利用是我们面临的重要问题。LED 作为一种新型的绿色光源产品,有着节能、环保、寿命长、体积小等特点,在实际生活中的利用也越来越广泛。而现在太阳能电池板充电技术已经得到了很大的发展,在公路两旁的路灯很多就是利用太阳能进行充电。现有的充电和照明技术都是根据预先的设置进行工作,不能根据环境的改变而实现自动调节,因此在能源利用率方面还可以进一步提高。 原有的充电技术中,太阳能电池板的角度位置是固定的,所以在一天中面对太阳光照的角度也不同。这样使太阳能充电无法达到最大效率。如果设计系统能够根据一天当中太阳位置的变化而调整角度,使充电电池板始终正对太阳,获得最大光照,这样就可以很大
[单片机]
如何升级STM32单片机的代码
bootloader设置: static void check_boot_mode(void) { uint32_t JumpAddress; void(*Jump_To_Application)(void); if (((*((__IO uint32_t*)(APP_SEGA_START_ADDRESS+8))) & 0x2FFE0000 ) == 0x20000000) { JumpAddress = *(__IO uint32_t*) (APP_SEGA_START_ADDRESS + 12); Jump_To_Application = (void *)JumpAddress; __set_MSP(*((__IO ui
[单片机]
如何升级STM32<font color='red'>单片机</font>的代码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved