内核实验三(优先级继承)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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