嵌入式第六章 任务管理 第七章 时间管理.ppt

嵌入式第六章 任务管理 第七章 时间管理.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式第六章 任务管理 第七章 时间管理

第六章 任务管理 μC/OS-II中的任务 任务看起来与任何C函数一样,具有一个返回类型和一个参数,只是它从不返回。 任务的返回类型必须被定义成void型。 任务可以是一个无限的循环,也可以是在一次执行完毕后被删除掉。 任务代码并不是被真正的删除了,而只是μC/OS-Ⅱ不再理会该任务代码,所以该任务代码不会再运行 哪个参数是任务的标识符? μC/OS-II最多能够管理多少任务?用户可以使用多少个任务?用户如何使用优先级? 设计任务 例如:采集三个通道的数据,经过A/D转换后使用图形显示。 任务设计方式1: 三通道的数据采集和A/D转换 绘图任务 编程任务有重复,无法通过优先级选择通道 任务设计方式2: 单通道的数据的采集和A/D转换(通道号和数据变量作为参数),在程序中使用不同参数调用三次 绘图任务 编程任务简单,能够定义不同通道的优先级,任务调度需要一定时间 任务管理的内容 6.1/6.2 建立任务 6.3 任务堆栈 6.4 堆栈检验 6.5 删除任务 6.6 请求删除任务 6.7 改变任务的优先级 6.8 挂起任务 6.9 恢复任务 6.10 获得有关任务的信息 建立任务 通过调用函数OSTaskCreate()或者OSTaskCreateExt()建立任务。 OSTaskCreateExt()是OSTaskCreate()的扩展版本,使用更多的参数提供附加功能。 任务可以在多任务开始调度前建立,也可以在其他任务执行过程中建立。 在开始多任务调度前,至少要建立一个任务。 任务不能通过中断服务程序(ISR)建立 6.1 OSTaskCreate() INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio ) void (*task)(void *pd)//传递任务的地址 任务的地址是任务函数的函数名 void *pdata//任务中用户参数的指针 OS_STK *ptos//堆栈的栈顶 必须设置OS_CPU.H中的OS_STACK_GROWTH通知系统堆栈的类型。 typedef unsigned int OS_STK; INT8U prio//任务的优先级 typedef unsigned char INT8U ; 6.1 OSTaskCreate() OSTaskCreate (Display_Task, (void *)0, (OS_STK*)Display_Task_Stack[STACKSIZE-1], Display_Task_Prio);// 20 // 堆栈是一个数组,长度由STACKSIZE决定 优先级定义为20 6.1 OSTaskCreate() 函数的功能 校验优先级 初始化任务的堆栈 初始化任务控制块 其他初始化功能 6.1 OSTaskCreate() 校验优先级1 判断优先级是否有效 if (prio OS_LOWEST_PRIO) { return (OS_PRIO_INVALID); } 如果任务的优先级大于定义的最低优先级,返回错误信息:优先级无效! prio OS_LOWEST_PRIO63 校验优先级2 判断此优先级任务是否存在 OS_ENTER_CRITICAL(); if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { OSTCBPrioTbl[prio] = (OS_TCB *)1; OS_EXIT_CRITICAL(); /* 其他功能 */ } else { OS_EXIT_CRITICAL(); return (OS_PRIO_EXIST); } 6.1 OSTaskCreate() 初始化任务的堆栈 OS_STK_GROWTH 定义为1;堆栈地址由高向低递减 OS_STK * OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) psp = (void *)OSTaskStkInit(task, pdata, ptos, 0); psp;//返回栈顶指针 初始化任务的寄存器初值 SP为ptos,设置其他寄存器值时SP递减 PC/LR为函数地址 R1-R12为任意设定的初始值 R0用来保存用户信息pdata CPSR/SPSR设置为管理模式 6.1 OSTaskCreate() 初始化任务控制块 INT8U OS_TCBInit ( INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id,

您可能关注的文档

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档