优先级翻转问题:
一,优先级翻转问题;
正常情况下,信号量被低优先级任务所占用的时候,其他任务想要使用必须等待低优先级任务释放信号量后才能使用。但是优先级翻转就会出现,在低优先级任务正常使用二值信号量时,高优先级的任务占用了CPU的使用权,此时会出现中优先级的任务去抢占CPU的使用权,去执行中优先级的任务,由于此时低优先的信号量没有释放,此时会较长时间的执行中优先级的任务。
二,优先级翻转功能需求:
1,新建三个任务,优先级分别是中,高,低
2,新建二值信号量,用于模拟低优先级翻转。
3,低优先级任务获取信号量后,被中优先级的任务打断,中优先级任务执行较长时间,因为低优先级任务还没有释放信号量,高优先级任务就无法获取信号量继续运行。
void taskYIELD(void);
功能概述:释放当前任务CPU使用权,开启上下文切换。
三,优先级翻转功能实现:
低优先级任务流程:
获取二值信号量–>循环释放CPU使用权—>释放二值信号量—>系统延时500ms。
高优先级任务流程:
获取二值信号量—>释放二值信号量—>系统延时500ms。