单片机编程思想之消除阻塞

本人写单片机程序也有五六年了,其实在三年前我写的程序里几乎没有 delay() 了,如果你的程序没有 delay 那么整个程序执行起来会非常的快。下面我们来分析下平时写单片机程序中所遇到的阻塞,以及解决思路。

在讲之前我们的程序框架是 main 函数里先初始化,然后 while(1),前台程序是各种中断。

阻塞有:

  1.  按键程序判断会用到 delay 消抖,典型的消抖是 5ms。
  2.  动态显示时候显示一位数码管时候也会用到延时 5ms 左右。
  3.  等待串口发送完成。
  4.  好像就这些比较耗时的了。

解决方法:

  1. 像这样的程序,我们可以在定时中断里面判断按键的状态。
  2. 解决方法同上。
  3. 串口中断发送估计很多人没有用过,也有很多人觉得没有必要,我想说的是你没有写过大型项目,对实时性要求不高,如果你的程序很大,需要服务的地方很多,那你用阻塞式发送很可能会降低整个程序的实时性了,例如 9600 波特率发送一个字符 1ms时间,如果一次发送 50 个字符就是相当于执行 delay(50); 那怎么用中断发送呢?很简单,打开串口发送中断,第一个字符你程序发送,剩余的在发送中断里面发送即可。

 

以上是比较单一的情况,大部分情况下我们遇到的是一个完整型操作里面有的执行很快,有的又必须阻塞。例如一个温度传感器,它要求先下发转换命令然后等待一定时间后才能进行下一步操作,这个时候你该怎么去写呢?

我想说的解决方法有很多种,你需要把这个任务分解成两个部分,一个是启动转换,另一个是

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值