任务的特性:
独立性:表现为逻辑上的平等性和信息传输的异步性。平等性,即可以独占CPU,一个任务“看不见”另外一个任务;异步性,指任务之间信息传递必须通过媒介。
并发性:任务交替进行,宏观上并发进行。
动态性:任务的状态是动态变化的,不能一直占有CPU。(休眠、就绪、运行、等待、中断)
任务划分小结:
关键任务:必须得到运行机会的,如火灾监控
紧迫任务:必须尽快执行的
1)、首先,以CPU为中心,将与各种输入/输出设备(或端口)相关的功能分别划分为独立的任务;
2)、发现“关键”功能,将其最“关键”部分“剥离”出来,用一个独立任务(或ISR)完成,剩余部分用另外一个任务实现,两者之间通过通信机制沟通;
3)、发现“紧迫”功能,将其最“紧迫”部分“剥离”出来,用一个独立的高优先级任务(或ISR)完成,剩余部分用另外一个任务实现,两者之间通过通信机制沟通;
4)、对于既“关键”又“紧迫”的功能,按“紧迫”功能处理;
5)、将消耗机时较多的数据处理功能划分出来,封装为较低优先级任务;
6)、将关系密切的若干功能组合成为一个任务,达到功能聚合的效果;
7)、将由相同事件触发的若干功能组合成为一个任务,从而免除事件分发机制;
8)、将运行周期相同的功能组合成为一个任务,从而免除时间事件分发机制;
9)、将若干按固定顺序执行的功能组合成为一个任务,从而免除同步接力通信的麻烦。
任务的优先级安排原则如下:
1)、中断关联性:与中断服务程序(ISR)有关联的任务应该安排尽可能高的优先级,以便及时处理异步事件,提高系统的实时性。如果优先级安排得比较低,则CPU有可能被优先级比较高的任务长期占用,以致于在第二次中断发生时连第一次中断还没有处理,从而产生信号丢失现象;
2)、紧迫性:因为紧迫任务对响应时间有严格要求,在所有紧迫任务中,按响应时间要求排序,越紧迫的任务安排的优先级越高。紧迫性为最高原则。紧迫任务通常与ISR关联。
3)、关键性:任务越关键安排的优先级越高,以保障其执行机会。
4)、频繁性:对于周期性任务,执行越频繁,则周期越短,允许耽误的时间也越短,故应该安排的优先级也越高,以保障及时得到执行。
5)、快捷性:在前面各项条件相近时,越快捷(耗时短)的任务安排的优先级越高,以使其他就绪任务的延时缩短。
6)、传递性:信息传递的上游任务的优先级高于下游任务的优先级,如信号采集任务的优先级高于数据处理任务的优先级。
行为同步 任务之间的动作配合和协调关系
类型
方法
ISR和任务之间同步(单向同步关系)
关联任务挂起等待,ISR发送信号量
两个任务单向同步
任务A在同步点挂起等待任务B发送同步的信号量(可能需要考虑AB的优先级)
可以考虑合并任务
两个任务双向同步
生产者提供消息来同步消费者,消费者回复消息来同步生产者,达到产销平衡
两个以上任务同步一个任务
总装型
逻辑与事件标记组
“或”关系
逻辑或事件标记组
多个任务相互同步
逻辑与事件标记组,同步点发出一个信号并挂起等待,多个任务尽数到达后再各自往下执行。
问题:
必须加入一个判断自身是不是最后一个到达同步点的任务是否需要清除标记组。
在最后一个任务未清除标记组的时候,前面的任务已经二次到达同步点
在同步点判断是不是最后一个到达,不是则挂起count+1,是则发送广播消息。整个过程最好关中断,可以将这个过程封装成一个函数。
资源同步
保障数据可靠性
例子:多任务相互同步时的count必须准确计数,方法在上表。
保障数据完整性
关中断
(适合访问规模小的资源)
对结构体资源进行访问的时候,它同时也在更新(例如访问RTC),访问过程如果遇到打断,则访问过程时间变长,可能导致读取一半资源后被打断回来已经刷新了(如7:59:59→8:00:00),这样得到的结果就是错的(如7:00:00,读取数字7之后被打断)。
解决方法:需要访问资源时,关中断,并且立即备份到自定义的结构体来。
关掉度
(访问规模大的资源,访问者不是ISR)
缺点:使无关任务收到牵连
使用互斥信号量
最优
使用计数信号量
多实体共享资源,加以一套管理机制
——《基于嵌入式实时操作系统的程序设计技术》[周航慈] 书摘
