单片机程序架构——时间片轮询法

发布于:2024-07-17 编辑:匿名 来源:网络

时间片轮询法在很多书籍中都提到过,而且很多时候是和操作系统一起出现的,也就是说操作系统中经常会用到它。

这个方法。

不过我们这里要讲的时间片轮询方式并不是挂在操作系统下的,而是用在前后端程序中的。

这也是本文将要详细解释和介绍的方法。

  虽然介绍时间片轮询方法的书籍很多,但大多不系统,只是提概念。

接下来我会详细介绍一下我自己的模型,并参考别人的代码创建一个时间片轮询架构程序。

我想对于初学者来说可以有一定的参考价值。

  我记得不久前发过帖子《1个定时器多处复用的问题》。

由于时间问题,我没有详细解释如何在多个地方重用一个定时器。

这里先介绍一下定时器的复用功能。

  使用1个定时器,可以是任何定时器。

这里没有给出特殊说明。

假设有以下3个任务,那么我们应该做以下工作:  1。

初始化定时器。

这里我们假设定时器调度的中断是1ms(当然你可以改成10ms。

这个和操作系统是一样的,如果中断太频繁,效率就会低,如果中断太长,实时性会较差)。

  2。

定义一个值:  复制内容到剪贴板代码:  #define TASK_NUM(3)//这里定义的任务数量为3,也就是说将使用这个定时器来计时3个任务。

  uint16 TaskCount[TASK_NUM];//这里为三个任务定义了三个变量,用于存储计时值  uint8TaskMark[TASK_NUM];//也对应了三个标志位,0表示时间未到, 1 表示预定时间已到。

  3。

在定时器中断服务函数中添加:   复制内容到剪贴板代码:   void TimerInterrupt(void){uint8 i;for (i=0; i{if (TaskCount[i] ){TaskCount[i ]--;if (TaskCount[i] == 0){TaskMark[i] = 0x01;}}}}  代码解释:定时中断服务函数,在中断中一一判断,如果定时的话值为0时,表示定时器没有被使用或者定时器已完成计时,否则定时器减1,当为0时,对应的标志值为1,表示该任务的计时值已完成。

   4. 在我们的应用程序中,需要应用程序计时的地方添加以下代码:   将内容复制到剪贴板代码:  。

TaskCount[0] = 20;//延迟20ms  TaskMark[0]= 0x00;//启动该任务的定时器  此时我们只需判断任务中TaskMark[0]是否为0x01即可能。

以同样的方式添加其他任务,现在就实现了一个定时器的复用问题。

有需要的朋友可以尝试一下,效果不错。

  通过上面定时器的复用,我们可以看到,在等待定时器到来的同时,我们可以循环判断标志位,同时执行其他函数。

  循环判断标志:  那么我们可以想一下,如果使用了循环判断标志,是不是和上面介绍的顺序执行程序一样呢?一个很大的循环,但是这个延迟比普通的for循环更精确,可以实现精确的延迟。

  执行其他函数:  那么如果我们在某个函数延迟的同时执行其他函数,充分利用CPU时间,是不是和操作系统类似呢?但任务管理和操作系统的切换非常复杂。

下面我们将使用这种方法来构建一个新的应用程序。

  时间片轮询方式的架构:  1.设计一个结构体:   代码:  //任务结构体  typedefstruct_TASK_COMPONENTS  {  uint8Run;//程序运行标记:0-不运行,1运行  uint8Timer;//定时器  uint8ItvTime;//任务运行间隔   void(*TaskHook)(void);//要运行的任务函数  }TASK_COMPONENTS;//任务定义   这个结构体的设计非常重要。

每个使用 4 个参数。

评论很详细,这里不再赘述。

  2。

当任务运行标志显示时,该函数相当于中断服务函数。

该函数需要在定时器的中断服务函数中调用。

这里是独立的,可以移植、可以理解。

  Code:  voidTaskRemarks(void)  {  uint8i;  for(i=0;i//任务时间一一处理  {  if(TaskComps[ i] .Timer)//时间不为0  {  TaskComps[i].Timer--;//减一拍  if(TaskComps[i].Timer==0)//时间减少 Done  {  TaskComps[i].Timer=TaskComps[i].ItvTime;//恢复定时器值并重新开始  TaskComps[i].Run=1;//任务可以运行了  }  }  }  }  我们仔细对比一下下一个函数,看看是不是和上面的一样上面的定时复用函数又是什么呢? ? if(TaskComps[i].Run)//时间不为0  {  TaskComps[i].TaskHook();//运行任务  TaskComps[i].Run=0; // 标志位清为0  }  }  }  这个函数是为了判断什么时候该执行哪个任务,实现任务管理操作。

用户只需要在main()函数中调用这个函数即可,不需要单独调用和处理任务函数。

  至此,一个时间片轮询应用的架构就完成了。

让我们看看这个架构是否只需要两个。

函数,一个结构体,出于应用目的,我们下面将创建一个枚举变量。

  我来说一下如何应用。

假设我们有三个任务:时钟显示、按键扫描、工作状态显示。

1。

单片机程序架构——时间片轮询法

定义结构体变量  代码:  staticTASK_COMPONENTSTaskComps[]=  {  {0,60,60,TaskDisplayClock},//显示时钟   {0,20,20,TaskKeySan}, //按键扫描   {0,30,30,TaskDispStatus},//显示工作状态   //在此添加您的任务。

;  定义变量时,我们已经初始化了值。

这些值的初始化非常重要,与具体的执行时间优先级有关。

这个需要自己掌握。

  ① 大致意思是我们有三个。

单片机程序架构——时间片轮询法

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 晨光医疗拟在创业板上市,现正在接受西部证券股份有限公司辅导,

    晨光医疗拟在创业板上市,现正在接受西部证券股份有限公司辅导,

    2019年6月7日,上海晨光医疗科技股份有限公司公告称,公司拟首次发行股票并上市在创业板。 现接受西部证券股份有限公司企业辅导。   上海晨光医疗科技有限公司是一家专业从事磁共振射频线圈设计、研发、生产和维护的企业。 公司拥有近平方米的研发生产基地和6人的MRI射频线

    06-18

  • “雷雷西创”获近千万元天使轮融资,深度开拓汽车后市场,

    “雷雷西创”获近千万元天使轮融资,深度开拓汽车后市场,

    据投资界1月7日消息,据亿欧报道,汽车后服务软件解决方案提供商“事雷新创”获得近千万人民币融资。 元天使轮融资,本轮融资的投资方为朗科投资。 据雷思创创始人及CEO兰霆介绍,本轮融资将主要用于公司产品的后续研发和市场投放。 公开信息显示,迅雷科技成立于2018年12月,

    06-18

  • Inuitive 与 Arteris IP 合作,为边缘设备提供下一代视觉处理技术

    Inuitive 与 Arteris IP 合作,为边缘设备提供下一代视觉处理技术

    选择 Arteris FlexNoC IP 在高级平台部署中提供卓越的性能、可预测的时序收敛和灵活性 2020 年 7 月 11 日 – Inuitive? 和 Arteris? Inc.,业界领先的片上网络 (NoC) 互连和 IP 部署软件提供商,旨在加速片上系统 (SoC) 的创建,宣布 Inuitive 已为其下一代计算机视觉平台部

    06-06

  • 据报道,三星将推迟其泰勒大型工厂的大规模芯片生产至2025年

    据报道,三星将推迟其泰勒大型工厂的大规模芯片生产至2025年

    Austin American-Statesman 据媒体报道,三星位于美国泰勒的大型制造工厂可能不会开始量产半导体芯片的生产要到2025年。 与其预计量产日期相比,至少推迟了半年。 彭博社援引《首尔经济日报》的话说,工厂要到今年才会开始量产。 报道援引三星代工业务总裁 Choi Siyoung 在旧

    06-06

  • 空气产品公司与国内多家工业客户签订了长期液氢供应合同

    空气产品公司与国内多家工业客户签订了长期液氢供应合同

    这些合同增强了公司在液氢领域的先发优势和领先地位。 2019年12月8日,空气产品公司在氢能源领域拥有65年经验,服务中国。 拥有35年市场经验的全球领先工业气体供应商空气产品公司今天宣布,已获得国内多家领先高端制造制造商的长期液氢供应合同。 这些长期合同增强了空气产品

    06-06

  • 新冠疫情是否会影响公司业绩?奥普生物回复科创板第二轮IPO问询

    新冠疫情是否会影响公司业绩?奥普生物回复科创板第二轮IPO问询

    2月20日,我们获悉,上海奥普生物制药股份有限公司(以下简称:奥普生物)回复科创板第二轮IPO问询科创板IPO问询。

    06-18

  • 纸箱哥获得余杭产业基金战略投资,被誉为“快递行业分众传媒”

    纸箱哥获得余杭产业基金战略投资,被誉为“快递行业分众传媒”

    据投资界3月18日消息,纸箱哥获得余杭产业基金战略投资。 本轮融资资金将主要用于支持纸箱哥团队的建设。 据悉,纸箱哥此前已获得印江资本的A+轮融资,以及圣道投资、鸿泰基金、奇一创投等机构的数千万元A轮融资。 纸箱哥 成立于 2006 年,是一家电子商务包裹广告公司,常被

    06-18

  • “气泡水+火锅”是元气森林的销售救星吗

    “气泡水+火锅”是元气森林的销售救星吗

    你最喜欢的“火锅菜”是什么? 寒冷的冬日,吃着热气腾腾的火锅,喝上一杯汽水,生活十分惬意。 苏打水也成为了大多数火锅消费者解油解辣的最爱伴侣。 在这样的消费趋势组合下,不少饮料品牌在火锅店里“热气腾腾”。 近日,主打无糖气泡水的元气森林与小龙坎合作,在成都开设

    06-18

  • PVA将在productronica China上展示全面的涂布-点胶解决方案

    PVA将在productronica China上展示全面的涂布-点胶解决方案

    三月 - PVA,全球点胶、涂布和定制自动化领域的专家,将在productronica China上展出。 慕尼黑上海电子生产设备展(productronica China)将于3月20日至22日在上海新国际博览中心盛大举办。 JIT 将展示配备 SJ、FCSES 和 FCCF 阀门的 Delta 8。 W1 展厅的 JIT 展位还将展示 Q

    06-06

  • 丑的东西成了中小企业的热门生意

    丑的东西成了中小企业的热门生意

    “太丑了!我太喜欢了!可以买来减肥。 我连一口饭都吃不下去了,每一口都感觉像我正在亲吻青蛙的舌头。 ”前两个月,一个把手覆盖了整个身体。 这只青蛙的瓷勺,绿色、大眼睛、大嘴巴,在小红书等社交平台上走红。 由于它太“丑”,尤其是它躺在红豆粥里的画面,被年轻人广为

    06-17

  • 海外电商智能客服:利用人工智能提升客户体验

    海外电商智能客服:利用人工智能提升客户体验

    .wp-block-column h3{margin-left:0} 随着海外电商市场不断扩大,客户体验成为重要因素来决定消费者的购买行为。 因素。 为了提供更好的客户服务,许多海外电商已经开始引入智能客服系统。 本文将探讨海外电商智能客服的内涵、优势及实施策略,帮助企业提升客户体验和商业竞争

    06-18

  • 蓝色光标:四家子公司引入战略投资者拓展国际营销业务

    蓝色光标:四家子公司引入战略投资者拓展国际营销业务

    蓝色光标(58.SZ)公告,全资子公司蓝色光标国际旗下四家全资子公司拟引入战略投资者,加速国际营销业务发展业务由技术和数据驱动。

    06-17