嵌入式μCOS-II内核实验三优先级继承.ppt
内核实验(三),优 先 级 继 承,实验目的,掌握嵌入式实时操作系统C/OS-II解决优先级反转的策略优先级继承的原理。,当高优先级任务因申请某共享资源失败被阻塞时,把当前拥有该资源的、且优先级较低的任务的优先级提升,提升的高度等于这个高优先级任务的优先级(可以指定一个PIP)。,优先级继承的主要思想,任务A申请共享资源S,S是否被占用,任务A获得共享资源S,S被任务B占用,任务A被挂起,Priority(B)Priority(A)?,提升B的优先级到PIP,B释放资源s并恢复原来的优先级,等待队列中优先级最高的任务获得s,任务A继续执行,N,Y,N,Y,优先级继承的主要思想,它们的原始优先级:TASK0 TASK1 TASK2。,3个应用任务竞争同一互斥资源 mutex;,使用mutex时采用优先级继承策略,PIP(优先级继承优先级)为8;,实验设计,#define OS_LOWEST_PRIO 14/*任务优先级不可以大于14*/,#define OS_TASK_CREATE_EN 1/*允许使用OSTaskCreate()*/,#define OS_MAX_TASKS 6/*最多可以创建6个任务*/,#define OS_MAX_EVENTS 1/*最多可以有1个事件*/,操作系统配置,#define OS_MUTEX_EN 1/*是否允许使用互斥信号量的功能*/,#define OS_TASK_CHANGE_PRIO_EN 1/*是否允许使用 OSTaskChangePrio()*/,#define OS_TIME_DLY_HMSM_EN 1/*是否允许使用OSTimeDlyHMSM()*/,#define OS_TICKS_PER_SEC 200/*设置每秒之内的时钟节拍数目*/,操作系统配置,OSTaskCreate():建立一个新任务,本实验中所用到的C/OS-II相关函数,OSMutexCreate():创建互斥信号量,OSMutexPend():申请互斥信号量,OSTimeDlyHMSM():将一个任务延时若干时间,OSMutexPost():释放互斥信号量,、应用初始化,OSTaskCreate(TaskStart,(void*)0,mutex=OSMutexCreate(8,设置互斥信号量,其中8为PIP(优先级继承优先级)的值,创建起始任务TaskStart,源程序说明,TaskStart负责:,安装时钟中断服务例程ucos_x86_idt_set_handler(0 x20,(void*)OSTickISR,0 x8e00);初始化操作系统时钟ucos_timer_init();创建应用任务TaskStartCreateTasks();,源程序说明,2、创建应用任务,for(i=0;i N_TASKS;i+)TaskDatai=i;/*Each task will pass its own id*/OSTaskCreate(Task,(void*),源程序说明,void Task(void*pdata)for(;)/*无限循环*/OSMutexPend(mutex,0,/*延时*/,3、应用任务,源程序说明,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,12,优先级,11,10,8,t12,t13,t14,2,1,0,1,2,1,2,0,2,1,2,2,0,2,1,2,t1时刻任务Task2首先获得mutex,运行流程,输出信息,