单片机有系统吗_基于51单片机8*8led矩阵的单片机控制数字屏幕显示系统 - CSDN
  • 单片机中嵌入操作系统的利弊!!!

    千次阅读 2007-02-12 13:50:00
    早在20世纪60年代,就已经人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论...

    早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的uC/OS-II。


    uC/OS-II的特点

      1.uC/OS-II是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。

      2.uC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。拿51单片机为例,比较一下就可以发现这样做的好处。假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。所以经常采用的方法是置一标志位,然后退出中断。由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。如果使用uC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。这样可以把中断响应时间限制在一定的范围内。对于一些对中断响应时间有严格要求的系统,这是必不可少的。但应该指出的是如果数据处理程序简单,这样做就未必合适。因为uC/OS-II要求在中断服务程序末尾使用OSINTEXIT函数以判断是否进行任务切换,这需要花费一定的时间。

      3.uC/OS-II和大家所熟知的Linux等分时操作系统不同,它不支持时间片轮转法。uC/OS-II是一个基于优先级的实时操作系统,每个任务的优先级必须不同,分析它的源码会发现,uC/OS-II把任务的优先级当做任务的标识来使用,如果优先级相同,任务将无法区分。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其他任务才可以被执行。所以它只能说是多任务,不能说是多进程,至少不是我们所熟悉的那种多进程。显而易见,如果只考虑实时性,它当然比分时系统好,它可以保证重要任务总是优先占有CPU。但是在系统中,重要任务毕竟是有限的,这就使得划分其他任务的优先权变成了一个让人费神的问题。另外,有些任务交替执行反而对用户更有利。例如,用单片机控制两小块显示屏时,无论是编程者还是使用者肯定希望它们同时工作,而不是显示完一块显示屏的信息以后再显示另一块显示屏的信息。这时候,要是uC/OS-II即支持优先级法又支持时间片轮转法就更合适了。

      4.uC/OS-II对共享资源提供了保护机制。正如上文所提到的,uC/OS-II是一个支持多任务的操作系统。一个完整的程序可以划分成几个任务,不同的任务执行不同的功能。这样,一个任务就相当于模块化设计中的一个子模块。在任务中添加代码时,只要不是共享资源就不必担心互相之间有影响。而对于共享资源(比如串口),uC/OS-II也提供了很好的解决办法。一般情况下使用的是信号量的方法。简单地说,先创建一个信号量并对它进行初始化。当一个任务需要使用一个共享资源时,它必须先申请得到这个信号量,而一旦得到了此信号量,那就只有等使用完了该资源,信号量才会被释放。在这个过程中即使有优先权更高的任务进入了就绪态,因为无法得到此信号量,也不能使用该资源。这个特点的好处显而易见,例如当显示屏正在显示信息的时候,外部产生了一个中断,而在中断服务程序中需要显示屏显示其他信息。这样,退出中断服务程序后,原有的信息就可能被破坏了。而在uC/OS-II中采用信号量的方法时,只有显示屏把原有信息显示完毕后才可以显示新信息,从而可以避免这个现象。不过,采用这种方法是以牺牲系统的实时性为代价的。如果显示原有信息需要耗费大量时间,系统只好等待。从结果上看,等于延长了中断响应时间,这对于未显示信息是报警信息的情况,无疑是致命的。发生这种情况,在uC/OS-II中称为优先级反转,就是高优先级任务必须等待低优先级任务的完成。在上述情况下,在两个任务之间发生优先级反转是无法避免的。所以在使用uC/OS-II时,必须对所开发的系统了解清楚,才能决定对于某种共享资源是否使用信号量。


    uC/OS-II在单片机使用中的一些特点
      1.在单片机系统中嵌入uC/OS-II将增强系统的可靠性,并使得调试程序变得简单。以往传统的单片机开发工作中经常遇到程序跑飞或是陷入死循环。可以用看门狗解决程序跑飞问题,而对于后一种情况,尤其是其中牵扯到复杂数学计算的话,只有设置断点,耗费大量时间来慢慢分析。如果在系统中嵌入uC/OS-II的话,事情就简单多了。可以把整个程序分成许多任务,每个任务相对独立,然后在每个任务中设置超时函数,时间用完以后,任务必须交出CPU的使用权。即使一个任务发生问题,也不会影响其他任务的运行。这样既提高了系统的可靠性,同时也使得调试程序变得容易。

      2.在单片机系统中嵌入uC/OS-II将增加系统的开销。现在所使用的51单片机,一般是指87C51或者89C51,其片内都带有一定的RAM和ROM。对于一些简单的程序,如果采用传统的编程方法,已经不需要外扩存储器了。如果在其中嵌入uC/OS-II的话,在只需要使用任务调度、任务切换、信号量处理、延时或超时服务的情况下,也不需要外扩ROM了,但是外扩RAM是必须的。由于uC/OS-II是可裁减的操作系统,其所需要的RAM大小就取决于操作系统功能的多少。举例来说,uC/OS-II允许用户定义最大任务数。由于每建立一个任务,都要产生一个与之相对应的数据结构TCB,该数据结构要占用很大一部分内存空间。所以在定义最大任务数时,一定要考虑实际情况的需要。如果定得过大,势必会造成不必要的浪费。嵌入uC/OS-II以后,总的RAM需求可以由如下表达式得出:

      RAM总需求=应用程序的RAM需求+内核数据区的RAM需求+(任务栈需求+最大中断嵌套栈需求)·任务数
    所幸的是,uC/OS-II可以对每个任务分别定义堆栈空间的大小,开发人员可根据任务的实际需求来进行栈空间的分配。但在RAM容量有限的情况下,还是应该注意一下对大型数组、数据结构和函数的使用,别忘了,函数的形参也是要推入堆栈的。

      3.uC/OS-II的移植也是一件需要值得注意的工作。如果没有现成的移植实例的话,就必须自己来编写移植代码。虽然只需要改动两个文件,但仍需要对相应的微处理器比较熟悉才行,最好参照已有的移植实例。另外,即使有移植实例,在编程前最好也要阅读一下,因为里面牵扯到堆栈操作。在编写中断服务程序时,把寄存器推入堆栈的顺序必须与移植代码中的顺序相对应。

      4.和其他一些著名的嵌入式操作系统不同,uC/OS-II在单片机系统中的启动过程比较简单,不像有些操作系统那样,需要把内核编译成一个映像文件写入ROM中,上电复位后,再从ROM中把文件加载到RAM中去,然后再运行应用程序。uC/OS-II的内核是和应用程序放在一起编译成一个文件的,使用者只需要把这个文件转换成HEX格式,写入ROM中就可以了,上电后,会像普通的单片机程序一样运行。

    结语
      由以上介绍可以看出,uC/OS-II具有免费、使用简单、可靠性高、实时性好等优点,但也有移植困难、缺乏必要的技术支持等缺点,尤其不像商用嵌入式系统那样得到广泛使用和持续的研究更新。但开放性又使得开发人员可以自行裁减和添加所需的功能,在许多应用领域发挥着独特的作用。当然,是否在单片机系统中嵌入uC/OS-II应视所开发的项目而定,对于一些简单的、低成本的项目来说,就没必要使用嵌入式操作系统了。

     
    展开全文
  • 对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RTOS?单片机就这一点资源,使用RTOS能保证效率吗?”对于这个问题,我会反问:“你用单片机的目的是什么?是为了用单片机...
        

    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


    对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RTOS?单片机就这一点资源,使用RTOS能保证效率吗?”


    对于这个问题,我会反问:“你用单片机的目的是什么?是为了用单片机的C编程,单片机的汇编编程甚至于用单片机的二进制指令编程?”上个世纪80年代,工程师用二进制指令给Z80编程,现在还有谁在用?现在还有人死抱着汇编不放,但越来越多的人工程师使用C编程(我起初也是使用汇编的),为什么?因为我们的目的是在有限的时间甚至是不充足的时间内把项目保质保量的完成!使用什么工具和方法是次要的(如果你的项目以成本放在第一位,则另当别论,这时,也是要考虑开发时间的)。时间就是金钱啊,一个产品在单片机上增加些许成本是可以接受的。况且,使用8051系列单片机时,单片机资源也常有富余,CPU一般情况也只是空转,这就为它使用RTOS创造了条件。


    那么,使用RTOS的好处呢?我举一个例子吧。假设我们编一个串行通讯程序,通讯协议如下:


    数据包长度为NBYTE,起始字节为STARTBYTE1,STARTBYTE2,最后一个字节为检验和,中间字节不可能出现连续出现STARTBYTE1,STARTBYTE2。


    第一种方法,在中断中处理协议:

    unsigned char Buf[NBYTE-2];bit GetRight=0;

    void comm(void) interrupt 4//"串行口中断"{

    static unsigned char Sum,Flag=0,i;

    unsigned char temp;

    if(RI==1)

    {

    RI=0;

    temp=SBUF;

    switch(Flag)

    {

    case 0:

    if(temp==STARTBYTE1)

    {

    Flag=1;

    }

    break;

    case 1:

    if(temp==STARTBYTE2)

    {

    Sum=STARTBYTE1+STARTBYTE2;

    i=0;

    Flag=2;

    break;

    }

    if(temp==STARTBYTE1) break;

    Flag=0;

    break;

    case 2:

    if(temp==STARTBYTE1)

    {

    Flag=3;

    break;

    }

    Sum+=temp;

    if((i>=(NBYTE-3))&&Sum==0)

    {

    GetRight=1;

    Flag=0;

    break;

    }

    Buf[i++]=temp;

    break;

    case 3:

    if(temp==STARTBYTE2)

    {

    Sum=STARTBYTE1+STARTBYTE2;

    Flag=2;

    i=0;

    break;

    }

    Sum+=STARTBYTE1;

    if((i>=(NBYTE-3))&&Sum==0)

    {

    GetRight=1;

    Flag=0;

    break;

    }

    Buf[i++]=STARTBYTE1;

    if(temp==STARTBYTE1)

    {

    break;

    }

    Sum+=temp;

    if((i>=(NBYTE-3))&&Sum==0)

    {

    GetRight=1;

    Flag=0;

    break;

    }

    Buf[i++]=temp;

    Flag=2;

    break;

    }

    }}


    第二种方法,使用队列中断函数:

    void comm(void) interrupt 4//"串行口中断"{

    if(RI==1)

    {

    RI=0;

    SBUF 入队;

    }}


    主程序不断调用的函数:

    unsigned char Buf[NBYTE-2];

    unsigned char ReadSerial(unsigned char *cp){

    unsigned char i;

    unsigned char temp,Sum;

    temp=队列中数据个数;

    if(temp<(NBYTE)) return 0;

    出队 temp;

    if(temp!=STARTBYTE1) return 0;

    temp=队列首字节;

    if(temp!=STARTBYTE2) return 0;

    出队 temp;

    sum=STARTBYTE1+STARTBYTE2;

    for(i=0;i

    {

    temp=队列首字节;

    if(temp==STARTBYTE1)

    {

    temp=队列次首字节;

    if(temp==STARTBYTE2) return 0;

    }

    出队 temp;

    *cp++=temp;

    Sum+=temp;

    }

    temp=队列首字节;

    Sum+=temp;

    if(Sum!=0) return 0;

    出队 temp;

    return 1;}


    第三种方法,使用RTOS中断函数:

    void comm(void) interrupt 4//"串行口中断"{

    OS_INT_ENTER();

    if(RI==1)

    {

    RI=0;

    OSIntSendSignal(RECIVE_TASK_ID);

    }

    OSIntExit();}

    ID为RECIVE_TASK_ID的任务

    void Recuve(void){

    unsigned char temp,temp1,Sum,i;

    OSWait(K_SIG,0);

    temp=SBUF;

    while(1)

    {

    while(1)

    {

    OSWait(K_SIG,0);

    temp1=SBUF;

    if((temp==STARTBYTE1)&&(temp1==STARTBYTE2)) break;

    temp=temp1;

    }

    Sum=STARTBYTE1+STARTBYTE2;

    OSWait(K_SIG,0);

    temp=SBUF;

    for(i=0;i

    {

    OSWait(K_SIG,0);

    temp1=SBUF;

    if((temp==STARTBYTE1)&&(temp1==STARTBYTE2))

    {

    OSWait(K_SIG,0);

    temp=SBUF;

    i=-1;

    Sum=STARTBYTE1+STARTBYTE2;

    continue;

    }

    Buf[i]=temp;

    Sum+=temp;

    temp=temp1;

    }

    Sum+=temp1;

    if(Sum==0) OSSendSignal(命令解释任务 ID);

    }}


    以下为这几种方法的比较:


    可读性和编程容易性方面,第三钟方法最好(如果允许使用goto语句,程序更加简单易读),第二种次之(因为要编队列程序),第一种最差。如果协议更加复杂,这方面更加明显。程序简单易读,自然出错机会小了。


    RAM占用方面,第三种方法较少,第二种最多(因为队列占用大量空间),第一种最少。


    中断执行时间方面,第三种方法最长,第二种最短,第一种较长。


    从功能方面,第三种方法最强,它还可以进行超时处理(虽然例子程序没有),其它方法均不行。


    如果数据来的太快,命令处理程序来不及处理,三种方法处理方式不太一样,第一种和第三种方法类似:丢弃以前数据,第二种则是丢弃后到的数据。而且,第二种方法必须等命令处理程序完成后才处理下一个数据包,而第一种和第三种方只需命令处理程序将数据收取后就可处理下一个数据包。也就是说,第一种和第三种与命令处理程序并行处理,第二种方法为串行处理。


    现在,一般情况下,开发的效率第一,执行的效率(包括执行时间和资源占用)第二。在这种情况下,降低些许效率换取开发的效率的较大提高,何乐而不为?何况,单个模块的执行的效率高不等于整个程序执行效率高。例如,如果程序需要等待一段时间,一般用程序延时或定时器延时。无论何种方法,CPU不再处理其它工作,效率很低。而用RTOS,等待的时候CPU可以处理其它工作,效率得到提高。


    以下摘自《uC/OS-II--源码公开的实时嵌入式操作系统》

    “实时内核也称为实时操作系统或RTOS。使用它使得实时应用程序的设计和扩展变得容易。不需要大的改动就可以增加新的功能。通过应用程序分割为若干独立的任务,RTOS使得应用程序的设计过程大为简化。使用可剥夺性的内核时,所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的服务;如信号量、邮箱、队列、延时、超时等;RTOS使得资源得到更好的利用。


    “如果应用项目对额外的需求可以承受,应该考虑使用实时内核。这些额外的需求是:内核的价格,额外ROM/RAM开销,2至4百分点的CPU额外负担。


    “还有没提到的一个因素是使用实时内核增加的价格成本。在一些应用中,价格就是一切,以至于对使用RTOS连想都不敢想。”


    总而言之,适用的就是最好的,不要拒绝RTOS,在它适用的情况下,它工作得很好。

    640?

    1.2018年第2期《单片机与嵌入式系统应用》电子刊新鲜出炉!

    2.硬件高深莫测?这些基础知识要掌握

    3.从三大焦虑看电动汽车发展的艰难历程!

    4.中国工程师技术寿命短的原因:“大龄工程师”等同于行业失败者?

    5.嵌入式产业度过芯片企业调整期后,2018年将蓬勃发展!

    6.与 C 语言长别离

    640?wx_fmt=gif

    免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

    展开全文
  • 单片机上操作系统的好处

    万次阅读 2019-04-02 09:24:27
    自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉了一些深刻的...

    自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉有了一些深刻的体会。

    1.上操作系统有很多资源可以利用,系统的内存管理,线程进程的使用。文件系统的使用,图形系统的使用,这个是你在没有上操作系统的时候不能使用的。

    2.对于多任务的处理更加简单了,原来比方说我了个机器人的程序,用裸机进行的,我有5个传感器,我还有一个液晶屏,还有1个按键,我就得用定时器来进行,进一个定时器,我就做一件事,主程序里只能做一件事,而如果我上了操作系统,我在主进程里就可以开多个线程,来同时做这样的事,不用我自己去管理这种处理顺序,由操作系统替我进行管理。

    下面的总结来自于一个博客文章,比我总结的要到位的多,转载过来

    原文的链接如下:https://blog.csdn.net/nicekwell/article/details/17177221

    本文是2013年写的,后来整理成了系统文章,请访问 http://nicekwell.net/ 查看单片机编程系列文章。

    以下是2013年原文:

    以前对单片机编程做过一些零散的总结,近两个月又学习了一下操作系统,对操作系统原理和实现有了初步了解。所以就想到写一篇长文总结,系统总结一下单片机编程和操作系统原理,作为一个从单片机编程到操作系统的过渡文章。

    本文介绍了各种单片机编程结构,可以算是本人单片机编程的一点小小的经验。从这些单片机编程结构的不断变化中逐渐过渡到操作系统,并在s3c6410上一步一步实现一个小操作系统。

    一开始想要作为一个帖子分享的,但是内容太多,所以做成了一个PDF文件,看上去比较正规,调理也清晰一点,但是内容也就停留在帖子的水平。希望能给从单片机往操作系统过渡的童鞋带来一点帮助,正如我学操作系统时也看了别人的文章一样。

    文章的PDF文件可以从http://download.csdn.net/detail/nicekwell/6671759或者http://pan.baidu.com/s/1elUFv下载到。

    以下是文章的前言和目录。

     

     

    前言

    在2011年年初,笔者开始了单片机的学习,那时还是学生的我已经深深地被单片机吸引。之后几乎放弃了学校课程,把所有精力都放在单片机上,参加了一些比赛,并取得不错的成绩。

    在开始工作之后,笔者从事单片机开发。在工作期间的高强度编程下,尝试了多种单片机编程结构,对单片机各种结构的构建做了分析和总结,并深刻感受到操作系统产生的必要性,对操作系统的探索有着越来越强的欲望。

    在工作一段时间之后,笔者决定辞职。我不想凭仅有的那么一点单片机知识做一个嵌入式码农,我渴望学习新的知识,掌握更高级的理论……好吧~至少做一个高级一点的码农。而下一步的目标就是——linux。

    但是笔者并没有直接进行linux的学习,因为操作系统对我来说还是个新事物,我甚至不知道操作系统和单片机编程的最本质区别是什么,于是我想先搞清楚操作系统的本质原理之后再进行linux的学习。笔者是物理学专业的,并没有系统学习过操作系统的概念。事实上很多介绍操作系统的书籍也没有提到操作系统的底层实现,更没有介绍它与单片机编程之间的关系。正如我在辞职的这段时间学完uCOS之后,对操作系统内核构建有了了解,但是却仍然不知底层的任务切换是如何实现的。

    However,经过两个月的学习,笔者终于清楚了操作系统的基本原理,也深刻体会到操作系统和单片机各种编程结构的区别和联系。于是我想到把之前的单片机编程经验和近期对操作系统的学习结合到一起,写一个从单片机到操作系统过渡的文章。一方面对单片机编程结构做一个系统总结,另一方面对操作系统原理也进行一次整理。把操作系统和单片机编程整合到一个知识体系中去,以便日后接受更多的操作系统内核知识。

     

    本文分为两部分——“单片机编程篇”和“操作系统篇”。

    单片机编程篇主要介绍单片机的各种编程结构,及其实现方法。是在假设已经可以驱动单片机和各个模块的前提下,讨论如何整合和使用这些资源,以实现功能。在这一篇中,将会看到程序主体逐渐从主函数转移到定时器,并且明确这些变化的目的。最后还会接触到面向对象的程序设计方式,并体会这种方式带来的好处。

    操作系统篇将会介绍操作系统的最基本的任务切换原理,以及操作系统是如何实现在单片机编程中难以实现的功能的。并在arm平台上实现任务切换和简单的操作系统。至于更复杂的操作系统内核构建本文没有多说,各种常用的操作系统内核都有很多资料可以查阅,不过我会向大家推荐一本在网上公开但没有出版的书——《底层工作者手册之嵌入式操作系统内核》,这本书详细阐述了操作系统内核的构建方法。

     

     

    目录

    第一篇  单片机编程

    第1章 主函数顺序调用     2

    1.1 主函数顺序调用的一般结构... 2

    1.2 主函数顺序调用结构的特点... 2

    第2章 界面函数结构     4

    2.1 界面函数一般结构... 4

    2.2 更高的角度分析这种结构... 5

    第3章 定时器分配任务     8

    3.1 用界面函数构成的基础框架... 8

    3.2 结合定时器编程分析... 9

    3.3 任务分割... 11

    3.4 定时器分配任务程序结构总结... 12

    第4章 占用式与非占用式程序结构分析     14

    4.1 什么是占用式程序... 14

    4.2 占用式程序的缺点... 14

    4.3 对占用式程序的改造... 15

    4.4 改造的本质... 16

    4.5 非占用式程序结构的优势... 17

    4.6 非占用式程序的一般结构... 17

    4.7 吐槽... 18

    第5章 定时器执行任务     19

    5.1 定时器执行任务的程序结构... 19

    5.2 定时器里面任务函数的特点... 20

    5.3 过程任务的定时器化... 21

    5.4 定时器执行任务程序结构总结... 25

    5.5 我们追求的是什么... 25

    第6章 面向对象思想+事件驱动结构     27

    6.1 对象和事件... 27

    6.2 C语言对一个对象的封装... 28

    6.3 事件分配机制... 31

    6.4 系统层构建... 33

    6.5 库函数... 33

    第二篇  操作系统

    第7章 为什么要有操作系统     35

    第8章 任务切换的具体工作     36

    8.1 CPU工作原理... 36

    8.2 任务切换做的事... 38

    第9章 在s3c6410上实现任务切换     39

    9.1 了解s3c6410的寄存器... 39

    9.2 要用到的几条汇编指令... 41

    9.3 在s3c6410上实现任务切换... 45

    9.4 在s3c6410上实现简单操作系统... 46
    -------------------

     

    展开全文
  • 裸机开发和带操作系统开发的区别

    千次阅读 2020-01-07 17:15:58
    所谓裸机就是执行单任务的单片机,对应的访问外设的方式轮询、中断和DMA(看单片机是否支持);这里的操作系统一般是指嵌入式开发的操作系统,常见的UC/OS、FreeRTOS 、RT-Thread 、eCos和Linux等。 2.区别 ...

    1.概述

    • 所谓裸机就是执行单任务的单片机,对应的访问外设的方式有轮询、中断和DMA(看单片机是否支持);这里的操作系统一般是指嵌入式开发的操作系统,常见的有UC/OS、FreeRTOS 、RT-Thread 、eCos和Linux等。

    2.区别

    • 马克思主义认为,事物之间是相互联系和相互区别的。带操作系统开发由于操作系统具有并发性,所以可以支持多个任务运行,可以从本质上认为它是裸机开发效率的提升(举个例子,拿最简单的流水灯来说,在相邻两只灯依次点亮的时候,中间有一段小延时,时间就拿500ms来说,那比较弱的51来说,它执行一条简单指令需要1us,那么500ms的时间它可以执行1000*500=50 0000条指令,超乎我们小白的想象。)很少情况下,我们只有一个执行任务吧,所以裸机的延时是对CPU 的一种浪费。

    3.总结

    • 在一般比较简单的情况下,我们要选择裸机开发,打下基础,在任务比较多的时候,要选择带操作系统开发(这时对应的板载内存就需要大一些了)。
    展开全文
  • 单片机最小系统

    万次阅读 多人点赞 2017-05-05 10:23:48
    单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. ...
  • 单片机 最小系统原理图

    万次阅读 多人点赞 2016-08-02 11:06:48
    单片机最小系统的四大硬件:单片机,晶振电阻,复位电路 ,电源 最小系统就是用最少的元件组成单片机的工作系统 1.复位电路 可以自动复位,可以是高电平使他复位也可以是低电平使他复位,跳转到0地址,然后重新...
  • 单片机最小系统介绍

    千次阅读 2015-03-03 17:59:54
    单片机最小系统介绍 单片机最小系统主要由电源、复位、振荡电路以及扩展部分等部分组成。最小系统原理图如图4.1所示。 图4.1最小系统电路图 电源供电模块 图4.1.1 电源模块电路图 对于一个完整的...
  • 单片机最小系统的通俗易懂讲解

    万次阅读 多人点赞 2020-03-18 21:30:11
    下面这个就是最小系统原理图,就是靠这四个部分,这个单片机就可以运行起来了.(看下面的数字标记,1234) 我们来一,一讲解一下: 1 第一部分:电源组(标记为1的部分) 40脚接电源5V(右上角),20脚接电源负极...
  • 学习笔记之-51单片机最小系统搭建

    万次阅读 2017-02-11 20:28:46
    单片机最小系统,或者称为单片机最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.一.先说一下51单片机的引脚: 总线型 DIP40 引脚...
  • STM32单片机最小系统详解

    千次阅读 2020-07-26 20:48:38
    STM32F103RCT6: STM32F103RCT6是一种嵌入式-微控制器的...所谓单片机最小系统,就是让单片机能够正常运行,最少且必须的器件所组成的系统单片机最小系统上电之后,单片机可以正常复位,下载程序,除此之外没...
  • 单片机】51单片机最小系统

    千次阅读 2019-10-31 11:18:26
    51单片机最小系统由三部分组成:主控电路、复位电路、晶振电路。 添加LED电路和独立按键。原理图如下所示:
  • 51单片机最小系统原理图、PCB及组成原理详解

    万次阅读 多人点赞 2018-10-02 08:25:03
    单片机:单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示...
  • 51单片机自动浇水系统/51单片机自动浇花系统 整个设计由51单片机模块、湿度传感器模块(土壤湿度传感器或者温度传感器或者温湿度传感器,都可以)、lcd1602液晶显示模块等组成,实现智能浇花和智能浇水功能。该系统...
  • 单片机最小系统的概念

    千次阅读 2012-05-04 14:24:19
    单片机最小系统的概念 单片机最小系统,或者称为单片机最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对于51单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路等。有时也将按键输入、...
  • 51单片机最小系统

    千次阅读 2019-06-04 22:54:38
    51单片机最小系统板最小系统板所需物品焊接注意烧录 最小系统板 许多学习51单片机的新手都会做一个51最小系统板,下面是笔者在学习过程的一些经历: 所需物品 1.万用板(7^5cm或其他) 1块 2.51(52)单片机 1块 3....
  • 2.2 单片机最小系统

    千次阅读 2019-01-23 17:48:30
    单片机最小系统,也叫做单片机最小应用系统,是指用最少的原件组成单片机可以工作的系统单片机最小系统的三要素就是电源、晶振、复位电路,如图 2-1 所示。 图 2-1 单片机最小系统电路 这张最小系统的电路图...
  • 单片机应用系统的基本组成

    千次阅读 2016-11-21 12:50:11
    单片机的应用系统实际上是一个典型的测量与控制系统。其功能可能只有测量,或只有控制,或兼而有之。从单片机在其应用系统中所处的位置及功能来看,一个单片机应用系统不外乎以下几个部分:前向通道、后向通道、中央...
  • 51单片机最小系统

    千次阅读 2014-07-25 15:37:14
    单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. ...
  • 单片机编程到操作系统产生

    千次阅读 多人点赞 2016-11-23 15:29:08
    以前对单片机编程做过一些零散的总结,近两个月又学习了一下操作系统,对操作系统原理和实现了初步了解。所以就想到写一篇长文总结,系统总结一下单片机编程和操作系统原理,作为一个从单片机编程到操作系统的过渡...
  • 51单片机——基于单片机的智能报警系统设计

    千次阅读 热门讨论 2019-03-26 21:15:30
    基于51单片机的宿舍火警报警系统 基于单片机的智能报警系统设计 基于51单片机的报警系统实现 网上转载:本系统具备发送短信、接收短信,拨打电话、接听电话等功能。主控检测到人入侵之后会立即产生高分贝的警报,...
1 2 3 4 5 ... 20
收藏数 69,044
精华内容 27,617
关键字:

单片机有系统吗