[原创]我的uC/OS-II,我的读书笔记之任务划分(下)
我的uC/OS-II,我的读书笔记之任务划分(下)
上一节,我们讲到任务划分的原则,多在理论层面上,而这一节我们主要针对应用所面对的各种情况,具体给出任务划分的方法。 任务划分的方法 设备信赖性任务的划分,输入/输出设备与CPU的速度差别是“并发运行”的前提和基础,也是一个通常都满足的事实。输入/输出设备分为“主动型设备”和“被动型设备”两种。“主动型设备”通过触发中断“主动”与CPU打交道,其任务的实现通常由两部分程序单元组成:一个尽可能短的中断服务程序(ISR)和一个与之关联的任务,ISR通过通信机制激活关联任务。“被动型设备”不能产生中断,必须由其他任务通过通信机制向该设备发出“请求”,激活该设备的相关任务。 关键任务的划分,“关键性”是指某种功能在应用系统中的重要性。这种包含“关键”功能的任务称为“关键任务”,关键任务必须得到运行机会,即使遗漏执行一次也不行。例如火灾监控系统中,传感器信号的检测不能正常实现,将造成重大影响,甚至引发灾难性的后果;如果一个任务包含有检测火灾,又包含打电话求助,但这时电话未通,而造成该任务挂起,而无法完成检测火灾,那么这也是不允许的。由此,我们得到一条原则:对于关键功能,必须尽可能与其他功能剥离,独立成为一个任务,通过通信方式再触发其他任务,完成后续操作。 如果关键功能可以由中断启动,则可将该关键功能直接由ISR完成。但ISR必须尽可能简短、快速,以免影响其他关键任务的实时响应。如果需要ISR通知的信息比较多,那需要使用消息分发任务,在uC/OS-II中,使用消息发送函数OSMboxPostOpt()。 如果关键功能不能由中断启动,则可将该关键功能用一个独立的任务来实现。 如果该关键任务有严格的实时性要求,则必须赋予它足够高的优先级,以便及时获得运行权。实时性要求不高的关键任务可以安排较低的优先级,将高优先级留给下面将要介绍的紧迫任务。 紧迫任务的划分,“紧迫性”是指某种功能必须在规定的时间内得到运行权(及时运行),并在规定的时刻前执行完毕(按时完成),可见这类功能有严格的实时性要求。 大多数紧迫任务是由异步事件触发的,这些异步事件一般能够引发某种中断。在这种情况下,将紧迫任务安排在相应的ISR中是最有效的方法。如果紧迫任务不能安排在ISR中,则为它安排尽可能高的优先级是解决“及时性”的有效方法。“紧迫任务”需要的执行时间尽可能短,其办法是对紧迫任务进行“瘦身”,尽可能剥离“不太紧迫”的操作,只剩下“必须立刻做”的操作,将被剥离的“不太紧迫”的操作另外封装为一个任务。“紧迫”任务不一定是“关键”任务,遗漏执行虽然使用工作品质下降,但不一定引起严重后果。 数据处理任务的划分,项目执行时,一般消耗机时最多的是各种数据处理程序单元,这种单元通常不只一个,毕竟为不同的功能服务。应该将这些单元划分出来,分别包装成不同的任务,并将优先级安排得比较低,以便使用其他任务剩余的机时。这里提供一种在uC/OS-II系统下实现“并发运行”的目的。我们将需要并行运行的数据处理任务各自分解为多个数据处理任务,每个任务完成其中的一个运算阶段。如下图所示,将原来一个数据处理任务触发到就绪任务,改为将它的各个分解任务触发到就绪状态,并按执行先后由高到低分配优先级,只要交叉分配各个分解任务的优先级,就可以达到“时间片轮转”的效果,使各个数据处理任务并发运行。
功能聚合任务的划分,将关系密切的若干功能组合成为一个任务,达到功能聚合的效果。这里大家只需要注意:数据关系密切和时序关联紧密两个。 触发条件相同任务的划分,如果若干功能由相同的事件触发,就可以将这些功能组合成为一个任务,从而免除将事件分发给多个任务的工作量。这个是有条件的,各个功能在执行中不会出问题。不能因为此时某个功能的未响应而影响到其它功能的实时性。这里的任务通常是内部事件。 运行周期相同任务的划分,我们将周期相同的功能组合在一起封装为一个任务,就可以避免一个时间事件触发几个任务,省去“事件分发”操作与它们之间的通信。 顺序操作任务的划分,如果若干功能按固定顺序进行流水作业,相互之间完全没有“并发性”,则应该将这些功能组合为一个任务。 任务划分基本上按照上述的方法来操作,现在我们对其做一个小结: Ø 首先,以MCU为中心,将与各种输入/输出设备相关的功能分别划分为独立的任务。 Ø 发现“关键”功能,将其最“关键”部分“剥离”出来,用一个独立任务(或ISR)完成,剩余部分用另外一个任务实现,再者之间通过通信机制沟通。 Ø 发现“紧迫”功能,将其最“紧迫”部分“剥离”出来,用一个独立的高优先级任务(或ISR)完成,剩余部分用另外一个任务实现,再者之间通过通信机制沟通。 Ø 对于既“关键”又“紧迫”的功能,按“紧迫”功能处理。 Ø 将消耗机时较多的数据处理功能划分出来,封装为低优先级任务。 Ø 将关系密切的若干功能组合成为一个任务,达到功能聚合的效果。 Ø 将由相同事件触发的若干功能组合成为一个任务,从而免除事件分发机制。 Ø 将运行周期相同的功能组合成为一个任务,从而免除时间事件分发机制。 Ø 将若干按固定顺序执行的功能组合为一个任务,从而免除同步接力通信的麻烦。 任务的可调试性分析,这里提供了速度单调分析(RMA)方法,我觉得这个方法的前提假设的较多,存在于理论上,而且中评价参数也是基于现在平台得出的,因此,是先有平台,才有数据。我认为,如果有了平台,直接运行试,如果能正常调度那就OK了,如果不能,即使算出来能,那么也不可能部署,网友们,你们说是吗?
关键词: 原创 我的 OS-II 读书 笔记 任务 划分 设
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 | |
【换取逻辑分析仪】rtthread添加RRH62000传感器驱动-基于野火启明6M5被打赏48分 | |
换逻辑分析仪+Verilog多输入门被打赏27分 |