7.对于共享资源,可以采用图示方式编写。这种方式表明,当两个任务想要使用共享资源时,每个任务用Pend和Post的组合包围住想要操作的资源(比如一个函数,一个公共变量)。其中一个任务用完资源后执行Post,将会使另一个Pend等待资源的任务得以往下执行,不论二者的优先级如何。图中的任务也包含了每次时钟节拍对任务的延时作用。不过像这种信号量通讯的场合会涉及到优先级反转问题,我们后面会分析。
8.这里演示了一个比较恶劣的中断嵌套实例,可以看出所有任务/中断级的任务调度只有等最后一层中断嵌套执行结束后才能执行,在中断嵌套中若使用Post或Resume想要执行任务调度也只能等到嵌套结束才能执行。uCOS-II支持中断嵌套,不用担心中断的响应问题,但是一旦中断嵌套之后就会出现很多延时的问题,将会导致整个系统的实时性下降,比如图示的TaskA就因为中断嵌套,并且因为中断嵌套结束后TaskB接受到信号量而执行,使得其延时效果大大超出我们想象,而且中间还缺了一步时钟周期,甚至导致这个周期满负荷(空闲任务不会执行到)。虽然画的有点夸张,但是这不得不引起我们的注意。所以通常推荐中断服务函数写的越短越好,一个好的方法是,清除了中断标志后仅仅发送一个信号量通知别的任务执行,将所有需要花时间运行的工作交给任务而不是留给中断服务函数处理。
以上的分析包含了少量几个任务和间可能出现的常见情况,对于大型程序来说,任务的调度和中断的响应可能比这个更加复杂,需要更进一步分析。
|