单核单线程下的编程要点

一句话概括

多用switch、if和return,少用while,和for。用查询代替死等,尽一切可能减少大循环执行的时间,关键目标是为了不浪费CPU的时间,能够做更多判断,响应更多输入事件。

等待:占着茅坑不拉屎是不对的

避免等待!
大部分的问题出在死等,不管你是delay(),还是等某个信号while(XX_FLAG==1),通通不行。这会造成CPU宝贵时间的浪费。造成其它程序无法得到执行。应该转变思路,整个程序应该作为一种逻辑判断而非过程。在大循环中快速处理各种可能的逻辑。

长任务:高速上不许开慢车

避免长任务!
一个函数执行的时间太长也是不好的。道理一样,其它代码得不到执行。尽量用改变状态类的代码,而不是持续处理后才返回的代码。等待也可以理解为一种长时间的处理。

状态机:下班了就打游戏,赢了这局就睡觉

使用状态机!
实际上当你明白上面的思想,从程序执行效率的角度来说也没必要利用状态机了。状态机在单片机编程中使用原因有二:
1.并发
2.理清思路。
状态机的思想,规定了现态,跳转条件,次态。这样无形中就引导你要用if或者switch语句。如果你在状态机里用了死等。那状态机也救不了你。
状态机实际上是通过静态的变量保存了状态,这样就可以去干别的事情了,也就是释放了CPU。
用状态机画状态图可以理清业务逻辑,有助于组织代码避免混乱。

更一般的说(变量/成员/属性)即状态。就连函数调用的过程都是通过栈帧保存状态。

中断:老板来了提醒我

使用中断!
中断提供了在主循环之外执行代码的手段。中断的可以理解为一种事件处理机制,其等待触发的过程不占用CPU时间。

凡事无绝对

面对类似“软件实现I2C协议”这种不能被打断又必须有us级延时的需求。通常这种用普通IO口模拟时序的任务也只能用delay。因为你的整个大循环的执行时间做不到us级。并且在此过程中还要禁用中断,以免被打断。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值