void task1(void) { ... FOREVER { ... us_Delay(); ... taskDelay(4); } void Task2(void) { ... FOREVER { ... ms_Delay(); ... } | 上述两个任务之间资源是独立的,但两个任务在一起运行时,高优先级任务task1在经过一段时间后会被长期阻塞。 解决上述问题的方法比较简单,只要调整task1的任务优先级低于task2,这里选为95,则两个任务可长时间并行运行。 由于加入了中断和信号量,使系统任务调度变的复杂,从而导致两个原本看似独立的任务task1和task2,不能正常并行运行。造成此类现象的原因分析极其复杂,可视为是系统应用的一个盲点,但此类问题可通过总结规律而有效绕开。例如在上述问题中,若task1调用的定时函数的定时时间小于task2中的定时时间,则相应的任务优先级也应设有task1Priority<task2Priority,这样高优先级任务就不会被阻塞。 |