完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
下面是while语句的两种情况为什么结果不同???
情况一: z2 =0; while(z2 == 0){;} 没有延时,最后在中断里把z2置1,结果程序死循环出不来。 情况二: z2 =0; while(z2 == 0){delay_us(1);} 加了一句延时,最后在中断里把z2置1,结果没有死循环。 想请问这原因是什么? |
|
相关推荐
8个回答
|
|
|
|
|
|
云汉达人 没有延时设置z2,因为CPU全部运行在while上进不了中断,所以z2是设置不成功的,所以死循环。加了延时,给了CPU一点响应中断的时间,z2设置成功,所以不会死循环。
|
|
|
|
云汉达人 主要还是延时函数的过程中给了响应中断的时间。
|
|
|
|
云汉达人 while(1){……}是让单片机一直执行{……}中内容,防止程序跑飞,通常用于主程序主体,确保程序持续执行
while(1);是一条指令,它让单片机停在这个位置,一般用来检测中断,只有cpu收到中断指令,才会跳出while(1),进入中断服务子程序; 你只要记住whlie(1)本质是死循环,while(1)中的指令会不断重复执行,除非有中断,while(1);可以看作while(1){//空指令},它执行的是空指令,于是单片机就停在这行代码处 |
|
|
|
您好,如果是在ISR更新z2的值的話,您的z2需要宣告成global volatile變數
volatile u8 z2=0; 或者 volatile short z2=0; 然後再次嘗試看看 以上供參考 |
|
|
|
|
|
|
|
第二种情况下是有其他的程序在运行,即这个延时函数,在延时函数进行的时候会进入到中断中进行置位。
但是第一种情况下,在while中没有函数在运行,那么程序就一直在while里,不会进中断的。 |
|
|
|
第一个把cpu强制占着不释放,导致没有时间响应中断
|
|
|
|
只有小组成员才能发言,加入小组>>
672 浏览 0 评论
1096 浏览 1 评论
2462 浏览 5 评论
2791 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2626 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
643浏览 9评论
639浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
770浏览 6评论
614浏览 5评论
656浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 14:35 , Processed in 1.021132 second(s), Total 62, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号