资源描述
内核实验三内核实验三优优 先先 级级 继继 承承实验目的实验目的 掌握嵌入式实时操作系统掌握嵌入式实时操作系统C/OS-II处理优先级反转的战略处理优先级反转的战略优先级承优先级承继的原理。继的原理。当高优先级义务因恳求某共享资源失败被当高优先级义务因恳求某共享资源失败被阻塞时,把当前拥有该资源的、且优先级较阻塞时,把当前拥有该资源的、且优先级较低的义务的优先级提升,提升的高度等于这低的义务的优先级提升,提升的高度等于这个高优先级义务的优先级个高优先级义务的优先级(可以指定一个可以指定一个PIP)。优先级承继的主要思想优先级承继的主要思想义务义务A恳求共享资源恳求共享资源S S能否被占用能否被占用义务义务A获得共享资源获得共享资源S S被义务被义务B占用,义务占用,义务A被挂起被挂起 Priority(B)Priority(A)?提升提升B的优先级到的优先级到PIP B释放资源释放资源s并恢复原来的优先级并恢复原来的优先级 等待队列中优先级最高的义务获得等待队列中优先级最高的义务获得s义务义务A继续执行继续执行NYNY优先级承继的主要思想优先级承继的主要思想它们的原始优先级它们的原始优先级: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,&TaskStartStkTASK_STK_SIZE-1,9);mutex =OSMutexCreate(8,&err);设置互斥信号量,其中设置互斥信号量,其中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*)&TaskDatai,&TaskStkiTASK_STK_SIZE-1,12-i);源程序阐明源程序阐明void Task(void*pdata)for(;)/*无限循环无限循环*/OSMutexPend(mutex,0,&err);/*恳求资源恳求资源*/OSTimeDlyHMSM(0,0,0,200);/*坚持资源坚持资源*/OSMutexPost(mutex);/*释放资源释放资源*/OSTimeDlyHMSM(0,0,0,(3-id)*150);/*延时延时*/3、运用义务、运用义务源程序阐明源程序阐明t1t2t3t4t5t6t7t8t9t10 t1112优先级优先级11108t12 t13 t142101212021220212t1时辰义务时辰义务Task2首先获得首先获得mutex运转流程运转流程输出信息输出信息
展开阅读全文