在stm32中使用while循环导致程序卡死

本文探讨了STM32程序中因等待数据读取而导致的卡死问题,并提出了解决方案,包括添加串口输出确认卡死位置及设置超时判断避免无限等待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用stm32的过程中发现这样一个问题,程序莫名卡死。
先来看导致卡死的代码

这里写图片描述

    while ( ReadRawRC ( CommandReg ) & 0x10 );

这是我们在程序中经常用到的写法,容易理解,程序的作用的读出一份数据,然后判断他的第4位是否为0,如果为0,则跳出循环,否则程序卡死等待。

也正因为这里的等待,导致读出的数据第4位不为0时程序卡死。

我自己的建议是:
(1)如果程序需要写成while卡死等待的形式,可以在while循环后面加一句串口输出,当程序卡死时,如果没有串口输出数据,就证明程序是卡死在了while循环处
(2)加超时判断,这是我们单片机老师在讲课的时候提到的,当等待的时间超过一定限度时,很明显单片机不能总在这里等待,可以在超时时返回一个错误报告,进而让程序可以执行其他的任务。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值