ΜC/OSⅡ中的任务调度 Group01小组 柴永锋 李逢春 苗 冬.

Slides:



Advertisements
Similar presentations
高三英语有效复习策略 程国学. 一、高考备考的方向把握 1. 认真研究普通高中《英语课程标准》和《福建 省考试说明》关注高考命题原则和发展方向,定 准复习教学起点 1. 认真研究普通高中《英语课程标准》和《福建 省考试说明》关注高考命题原则和发展方向,定 准复习教学起点 一是明确高考英语可能考什么,我们应该怎样准.
Advertisements

考纲研读 语言知识要求 语言运用能力 附录 1: 语音项目表 附录 2: 语法项目表 附录 3: 功能意念项目表 附录 4: 话题项目表 附录 5: 词汇表 听力 阅读 写作 口语.
100 學年度 勞委會就業學程 國際企業管理學系-物業管理學程介紹. 何謂物業管理? 以台灣物業管理學會 所述,物業管理區分為 「物」、「業」、「人」三區塊。台灣物業管理學會 「物」係指傳統的建物設備、設施 「業」為不動產經營的資產管理 「人」則以生活服務、商業服務為主,並以人為 本位連結物與業,形成今日物業管理三足鼎立新.
图书馆管理实务.
行政命令.
共产党领导的多党合作和政治协商制度: 中国特色的政党制度.
主讲:材料工程学院党总支宣传委员、党务秘书 教工党支部书记 王国志 2015年12月7日
普通高中新课程实验 若干问题 广东省教育厅教研室 吴惟粤 2004年4月29日 广州.
前言 採購程序每一環節所涉及人員,無論是訂定招標文件、招標、審標、決標、訂約、履約管理、驗收及爭議處理,如缺乏品德操守,有可能降低採購效率與品質,影響採購目標之達成,甚有違法圖利情事發生,致阻礙政府政策之推動並損害公共利益。因此,較之一般公務人員,採購人員更需遵循較高標準之道德規範。 主講人:林中財.
欢迎新同学.
2015年新课标高考历史试题分析 暨考试方向研判 李树全 西安市第八十九中学.
课题四 以天池、博斯腾湖 为重点的风景旅游区
“健康的基督徒” 入门.
南台科技大學電子工程系 指導老師:楊榮林 老師 學生姓名:蔡博涵 巨物索餌感測裝置(第II版)
2015年汕头一模质量分析会 34(1)题分析 濠江区河浦中学 詹金锋 34(2)题分析 汕头市实验学校 董友军
士師逐個捉(II) 石建華牧師 24/07/2016.
宣讲数学课程标准 增强课程改革意识.
高考地理全国卷和安徽卷 的对比分析及备考策略
快乐生活,快乐学习 《中国古代诗歌散文欣赏》.
班級經營之再思 香港班級經營學會 黃鳳意
佛法原典研習 五陰誦 (II) 2007/5/13 整理此報告的方式 : 主要節錄 果煜法師說法之重點.
2014年度合肥市中小学生学业质量 绿色指标测试相关情况说明及考务工作要求
普通高中课改方案介绍.
曾一 陈策 重庆大学计算机学院基础科学系 重庆
高三物理后期复习策略 秦皇岛市实验中学 刘苏祥.
理想与现实 有一所大学叫做“社会”,它教会人们奉承比自己强的,挤兑和自己差不多的,欺凌比自己弱的。
101學年度第二學期 呼吸治療學系 師生座談會 102年5月15日.
第七章 机械加工工艺规程的制定.
家庭教育與服務學習.
压缩语段 II.
普通高中课程改革的方案与推进策略 安徽省教育厅 李明阳.
高校人才培养与学科建设的一些探索 徐哲峰 西北大学数学学院 2015年6月30日.
新课程背景下 高中教务主任工作的思考 南京市教学研究室 陆静.
精彩纷呈的 桂剧和彩调 ——桂林地方戏曲赏析.
網路填報系統學生異動轉銜操作及科技化評量6月 成長測驗施測說明
機械工程學系課程地圖 先進材料與精密製造組 設計分析組 校訂共同必修課程 機械系訂 必修課程 組訂 必修課程 畢業專題 工學院訂必修課程
生命轉化 (II) 天父的心 石建華牧師 13/09/2015.
全国高考语文试卷解析 与备考建议 张彬福.
Oracle数据库 Oracle 子程序.
Nucleus嵌入式操作系统.
第五章 C/OS-II在ARM系统中的应用与开发
嵌入式系统概论 —基于32位微处理器与实时操作系统 第五讲实时操作系统C/OS-Ⅱ分析 北京航空航天大学 机器人研究所 魏洪兴.
嵌入式系统及应用.
嵌入式操作系统ucOS-II分析.
第7章 移植μC/OS-II到ARM7.
UcOS-II任务管理.
嵌入式系统及应用.
《手把手教你学STM32-UCOS》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
UCOS -II的使用 撰写:李湧 2006-06-29.
《手把手教你学STM32-UCOS》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
移植μC/OS-Ⅱ.
嵌入式系统 —嵌入式实时操作系统C/OS-Ⅱ分析 2006年5月.
第48组:姜立群(SC ) 谭兆路(SC ) 闫 佼(SC )
第五讲 C/OS-Ⅱ移植分析和系统初始化
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
UcOS-II时间管理.
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 北京航空航天大学 智能嵌入式技术工作室 王田苗 魏洪兴.
3. µC/OS-II内核 2019/4/11.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
5. µC/OS-II应用实例.
UcOS-II任务之间的通讯与同步.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
6. 面向任务程序设计(TOP).
Ch6. uC/OS-II分析 宋健建 南京大学软件学院.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Ch7 uC/OS-II分析(2) 宋健建 南京大学软件学院 2006/11.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
§2 方阵的特征值与特征向量.
《手把手教你学STM32-UCOS》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
大學學群學類卡 林宏茂 中壢高中 李欣樺 振聲高中.
Presentation transcript:

μC/OSⅡ中的任务调度 Group01小组 柴永锋 李逢春 苗 冬

相关介绍 C/OS是占先式实时多任务内核,优先级最高的任 务一旦准备就绪,则拥有CPU的所有权开始投入运 行。 C/OS –II 2.51版本支持64个任务,每个任务一 个特定的优先级。优先级越高,数字越小。 C/OS任务调度所花的时间为常数,与应用程序中 建立的任务数无关

任务状态 3

任务控制块(TCB) 任务控制块 OS_TCB是一个数据结构,保存 该任务的相关参数,包括任务堆栈指针, 状态,优先级,任务表位置,任务链表指 针等。 所有的任务控制块分为两条链表,空闲链 表和使用链表。 4

µC/OS-II任务控制块.ucos-ii.h typedef struct os_tcb { OS_STK *OSTCBStkPtr; 指向当前任务栈顶的指针 #if OS_TASK_CREATE_EXT_EN>0 void *OSTCBExtPtr; 指向用户定义的任务控制 块扩展 OS_STK *OSTCBStkBottom; 指向任务栈底的指针 INT32U OSTCBStkSize; 栈中可容纳的指针元数 INT16U OSTCBOpt; 把“选择项”传给 OSTaskCreateExt() INT16U OSTCBId; 任务的识别码 #endif struct os_tcb *OSTCBNext; 任务控制块OS_TCBs的双重 链接 struct os_tcb *OSTCBPrev; #if OS_EVENT_EN OS_EVENT *OSTCBEventPtr; /* 指向事件控制 块*/ 5

µC/OS-II任务控制块.ucos-ii.h #if ((OS_Q_EN>0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN >0) void *OSTCBMsg; 指向传给任务的消息的指 针 #endif INT16U OSTCBDly; 任务延时若干时钟节拍 INT8U OSTCBStat; 任务的状态字 0,就绪 INT8U OSTCBPrio; 任务优先级 INT8U OSTCBX; INT8U OSTCBY; 用于加速任务进入就绪态的过 程 INT8U OSTCBBitX; 或进入等待事件发生状态的过 程 INT8U OSTCBBitY; #if OS_TASK_DEL_EN BOOLEAN OSTCBDelReq; 表示该任务是否需要删除 自身 } OS_TCB; 6

与TCB相关的结构 7

两个关键: 优先级数分解为高三位和低三位分别确定; 高优先级有着小的优先级号 ; 8

优先级和就绪任务表的位置关系 每个就绪的任务都放入就绪表中(ready list) 中,就绪表有两个变量:OSRdyGrp、OSRdyTbl[] 9

优先根据优先级确定就绪表(1) 假设优先级为12的任务进入就绪状态,12=1100b,则 OSRdyTbl[1]的第4位置1,且OSRdyGrp的第1位置1,相应 的数学表达式为: OSRdyGrp |=0x02; OSMapTbl[1]=(0000 0010) OSRdyTbl[1] |=0x10; OSMapTbl[4]=(0001 0000) 而优先级为21的任务就绪21=10 101b,则OSRdyTbl[2]的 第5位置1,且OSRdyGrp的第2位置1,相应的数学表达式为 : OSRdyGrp |=0x04; OSMapTbl[2]=(0000 0100) OSRdyTbl[2] |=0x20; OSMapTbl[5]=(0010 0000) 10

根据优先级确定就绪表(2) 从上面的计算我们可以得到:若OSRdyGrp及OSRdyTbl[]的第n位置1, 则应该把OSRdyGrp及OSRdyTbl[]的值与2n 相或。uC/OS中,把2n的 n=0-7的8个值先计算好存在数组OSMapTbl[7]中,也就是: OSMapTbl[0] =20=0x01(0000 0001) OSMapTbl[1] =21=0x02(0000 0010)   …… Index Bit Mask (Binary) 00000001 1 00000010 2 00000100 3 00001000 4 00010000 5 00100000 6 01000000 7 10000000 11

使任务进入就绪态 如果prio是任务是优先级,也是任务的识别号, 则将任务放入就绪表,即使任务进入就绪态的方 法是: OSRdyGrp |=OSMapTbl[prio>>3]; OSRdyTbl[prio>>3] |=OSMapTbl[prio & 0x07]; 假设优先级为12——1100b OSMapTbl[1]=00000010 OSMapTbl[4]=00010000 OSRdyGrp |=0x02; OSRdyTbl[1] |=0x10; 12

根据就绪表确定最高优先级 通过OSRdyGrp值确定高3位,假设为0x24=100 100b, --- 〉 对应OSRdyTbl[2] 和OSRdyTbl[5],高优先级为2 通过OSRdyTbl[2]的值来确定低3位, 假设为0x12=010 010b ,---〉第2个和第5个任务,取高 优先级为2,则最高优先级的任务号为17 13

源代码中使用了查表法 查表法具有确定的时间,增加了系统的可预测性, uC/OS中所有的系统调用时间都是确定的 High3 =OSUnMapTbl[OSRdyGrp]; Low3 =OSUnMapTbl[OSRdyTbl[High3]]; Prio =(High3<<3)+Low3; 14

优先级判定表OSUnMapTbl[256] (os_core.c) 举例: 如OSRdyGrp的值为00101000B,即0X28,则查得OSUnMapTbl[OSRdyGrp]的值是3,它相应于OSRdyGrp中的第3位置1; 如OSRdyTbl[3]的值是11100100B,即0XE4,则查OSUnMapTbl[OSRdyTbl[3]]的值是2,则进入就绪态的最高任务优先级 Prio=3*8+2=26 INT8U const OSUnMapTbl[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; 15

Task scheduler void OS_Sched (void) /*os_core.c中*/ { INT8U y; OS_ENTER_CRITICAL(); if ((OSLockNesting =0)&&(OSIntNesting= 0)) { y = OSUnMapTbl[OSRdyGrp]; OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]) if (OSPrioHighRdy != OSPrioCur) { OSTCBHighRdy=OSTCBPrioTbl[OSPrioHighRdy]; OSCtxSwCtr++; OS_TASK_SW(); } OS_EXIT_CRITICAL(); 16

谢谢!