首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

优先级反转(2)

优先级反转(2)

void task1(void)

{

...

FOREVER

{

...

us_Delay();

...

taskDelay(4);

}

void Task2(void)

{

...

FOREVER

{

...

ms_Delay();

...

}

上述两个任务之间资源是独立的,但两个任务在一起运行时,高优先级任务task1在经过一段时间后会被长期阻塞。

解决上述问题的方法比较简单,只要调整task1的任务优先级低于task2,这里选为95,则两个任务可长时间并行运行。

由于加入了中断和信号量,使系统任务调度变的复杂,从而导致两个原本看似独立的任务task1和task2,不能正常并行运行。造成此类现象的原因分析极其复杂,可视为是系统应用的一个盲点,但此类问题可通过总结规律而有效绕开。例如在上述问题中,若task1调用的定时函数的定时时间小于task2中的定时时间,则相应的任务优先级也应设有task1Priority<task2Priority,这样高优先级任务就不会被阻塞。

继承事业,薪火相传
返回列表