单片机 架构 程序 经验总结_单片机用定时器分配任务的程序结构总结

http://blog.sina.cn/dpool/blog/s/blog_6f2b6ba80101bwka.html?vt=4

本文是2013年写的,后来整理成了系统文章,请访问 http://nicekwell.net/ 查看单片机编程系列文章。

以下是2013年原文:

经过这几天做的程序,和以前做电子钟时的感悟,现在对单片机的整个程序结构做一下总结。相信这个总结是很有必要的,在组织大型复杂程序结构时需要有一个正确的理论指导。

感觉这种程序结构的很多想法和操作系统非常像,但是毕竟没学过操作系统,有些表述可能不准确,欢迎批评指正。

首先介绍一下任务的概念,main函数最后是一个死循环,它就是一个任务,是整个系统最基础的任务。除main函数的主循环无条件执行外,其实每一个进程和任务都是一个有条件跳出的循环,当这个任务没有完成时就会一直在这个循环里,当任务完成了就会从循环跳出,结束这个任务。当然也有一些简单的任务没有循环,就是一些顺序代码执行完了就结束,也可以认为它是一个简单的任务。

其实所谓的任务在单片机里本质上也就是一个函数,只不过这个函数可能“没那么容易结束”,需要达到一定的目的才会结束,把这样的函数称作“任务”。

如果要完成的是一个很简单的功能,我们可以把这个功能的一小段代码直接放到主循环里,单片机所有的精力都会放在这段代码上(暂不考虑中断)。

但是如果程序结构比较复杂,有多种任务可能会处理,主循环可以调用其它的任务函数而转到其它任务,但是一旦跳转到其它任务里,主循环和其它任务都不会得到执行。

所以有这么一个特点:由主循环调用的任务都只能单独地运行,进入一个任务,就不能处理其它任务。

对于比较大型复杂的系统,main函数的主循环里根本不放要实际处理的代码,而是把所有任务函数归到一起,根据选择进入相应的任务函数,当处理完该任务之后又会回到主循环,由主循环再次分配任务。

此时主循环的作用就是调配任务(当然用来调配任务的主循环本身也是一个 最基本的任务),而在被调配的任务里面可能还会再次被该任务调配的子任务。

既然主循环用来调配任务,那什么时候该进入什么任务呢?

1、 顺序调用。这是最简单的了,几个任务按顺序进行。

像飞思卡尔智能车的程序就是这种结构,先进行传感器扫描 - 再进行转向角计算 - 再进行最大速度计算 - 再进行速度控制,就这几个任务不断重复。虽然在主循环里只是简单调用一下函数,而被调用的任务函数可能很复杂,比如转向角计算这个函数,对它支持函数专门写出一个c文件,而这个文件的代码量甚至比main函数所在文件的代码量都要大。

2、 可能各个任务之间存在逻辑关系,在各个任务里面直接指定下一个要进入的任务。

比如电子钟里面的模式切换,1602从一个界面进入到另一个界面都

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值