1个系统节拍 c语言_一种基于系统节拍时间的单片机程序设计模式( 思想的提出 -01)...

本文探讨了一种单片机程序设计模式,即基于系统节拍时间的程序设计,旨在解决因任务延时导致的其他程序实时响应问题。通过在每个系统节拍时间只运行一个任务,确保各个任务按需执行,从而实现类似并发的效果。该模式适用于不同响应时间要求的任务,如按键扫描、LED动态扫描和温度数据采集等。
摘要由CSDN通过智能技术生成

单片机又称微控制器,其工作原理与PC机相似,也就是存储程序和程序控制的工作方式。这里的程序有可能是汇编语言也有可能是C语言,但这里我们即将要讨论的不是用哪种语言编写程序的问题。我想和大家讨论的是一种程序设计模式,也就是讨论一下单片机程序设计中的一种比较通用,合理的方法。当然了,这里还是以C语言程序设计作为例程。我们都知道,从微观上来讲,CPU只能一条条的执行指令。(这里为方便讨论问题,有可能不区分指令和程序)。也就是说,在微观上来讲,CPU在某一个时刻,只能执行一个指令动作,这是我们要明白的第一点。第二点,我们还要知道单片机中还有一个特别好的运行机制,那就是中断。中断可以让任劳任怨的CPU专注于眼前的事情,而不必时刻“担心”着“突然事件”。待到“突然事件”发生,CPU再转头去处理。还有一点,我们要明白,那就是单片机的主频越高,指令执行的越快。(当然了,频率高带来的附作用,也不是我们这篇文章要讨论的)。知道了以上三点,我们现在就开始有关文章主题的讨论。

平时生活中,我们经常用快慢这两个字。比如说,这个人做事真快,吃饭也快,写程序也快,总之吃喝拉撒,衣食住行都快。那么一个人做事快,有什么好处呢?很明显,节约时间,能处理更多的事情,看起来像是很多事情同时做了一样。慢,则一切相反。对单片机这种MHZ频率的机器来讲,实现”看起来像”同时处理更多的事情更是不在话下。这也是单片机程序能并发的物质基础之一。单片机虽然快,但我们也不能随随便便把所有任务都直接丢给单片机去处理,那样会出问题的。比如,我们在刚一接触单片机程序设计时,会这样写程序://主程序:                                 //中断服务程序

void main()                                void ISR(void)

{                                               {

//初始化单片机系统                  Task1();

Task2();

Inital()                                  Task3();

}

//超级循环

while(1)

{

Task1();

Task2();

Task3();

}

}

这样写单片机程序会因为一个任务的“阻塞”而耽误其他程序的实时响应。比如,Task1,是一个按键扫描程序,其中有大概10ms的消抖时间,如果我们在程序中直接写一个delay_10ms()程序,那么Task2和Task3势必会因为这个延时而耽误运行。所以,为了解决类似这样的冲突,我们提出了一种单片机程序设计模式,一种基于系统节拍时间的程序设计模式。这种设计模式的思想是,在一个系统节拍时间到来,只运行其中一任务(注意,一定是一个任务)。所谓节拍时间是单片机系统提供给每一个任务的运行时间。在实际应用中,其实每个任务的最低响应时间要求可以是不同的,比如,按键可以10 - 20ms扫描一次,动态扫描的LED,总的刷新周期不超过20ms,人眼还是可以接受的,再比如,温度数据采集甚至可以500ms一次,正因为这些差异我们可以实现单片机程序的“并发执行“。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值