文档介绍:该【UCOS重点 】是由【儒林】上传分享,文档一共【49】页,该文档可以免费在线阅读,需要了解更多关于【UCOS重点 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。UCOS重点任务1任务的基本概念uC/OS-II就是一个能对任务的运行进行管理和调度的多任务操作系统。(2)uC/OS-II任务的组成:任务代码:任务的执行部分任务堆栈:保存任务工作环境任务控制块:保存任务的属性(3)uC/OS-II的任务有两种:用户任务:由应用程序设计者编写的任务为解决应用问题而编写的56个系统任务:系统提供的任务为应用程序提供某种服务(预留)8个:空闲任务和统计任务用户任务的代码voidMyTask(void*pdata){for(;;){可以被中断的用户代码;OS_ENTER_CRITICAL(); //进入临界段(关中断)户任务3第4个参数prio:优先级别……OSStart(); //启动任务……}空闲任务(OSTaskIdle())在多任务系统运行时,系统经常会在某个时间内无用户任务可运行而处于空闲状态,为使CPU在没有用户任务可执行时有事可做,uC/OS-II提供了空闲任务。voidOSTaskIdle(void*pdata){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifpdata=pdata; //防止某些编译器报错for(;;){OS_ENTER_CRITIVAL(); //关中断OSdleCtr++; //计数OS_EXIT_CRITICAL(); //开中断}}统计任务(OSTaskStat())每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUUsage中,以便应用程序通过访问它来了解CPU的利用率如果用户应用程序要使用统计任务,,并且必须在创建统计任务之前调用函数OSStatInit()对系统任务进行初始化最多可以对64个任务每隔个任务都已优先级别:0-::::0,1,2,…,OS_LOWEST_PRIO低任务个数:OS_LOWEST_PRIO+1OS_LOWEST_PRIO-1统计任务(存在的话)OS_LOWEST_PRIO空闲任务状态:睡眠状态就绪状态运行状态等待状态(时间、事件、手工挂起)中断服务状态uC/OS-II任务的代码结构是一个带有临界段(关中断)的无限循环结构。2任务堆栈(1)堆栈:存储器中按数据“后进先出(LIFO)”的原则组织的连续存储空间。92)任务堆栈:任务的重要组成部分每个任务都配有自己的堆栈满足任务切换和响应中断时保护CPU寄存器中的内容及存储任务私有数据的需要::保存工作环境堆栈的创建typedefunsignedintOS_STK;//该类型长度为16位OS_STKTaskStk[TASK_STK_SIZE]//定义数组使用:当调用函数OSTaskCreate()来创建一个任务时,把数组的指针传递给函数OSTaskCreate()中的堆栈栈顶参数ptos,就可以把该数组与任务关联起来而成为该任务的任务堆栈INT8UOSTaskCreate( void(*task)(void*pd),//指向任务的指针 void*pdata, //传递给任务的参数 OS_STK*ptos, //指向任务堆栈栈顶的指针 INT8Uprio //任务的优先级 )#defineMyTaskStkN64OS_STKMyTaskStk[MyTaskStkN];voidmain(void){......OSTaskCreate(MyTask, //任务的指针&MyTaskAgu, //传递给任务的参数&MyTaskStk[MyTaskStkN-1],//任务堆栈栈顶地址20 //任务的优先级);......}堆栈的增长方向(是栈顶(后放入的)在变化):向上的堆栈:向高地址向下的堆栈:向低地址(2)CPU启动运行一个任务时,各寄存器需要预置一些数据,如:指向任务的指针、PSW程序状态字任务堆栈初始化函数OSTaskStkInit()OS_STK*OSTaskStkInit(void(*task)(void*pd),只想任务的指针void*pdata,OS_STK*ptos,INT16Uopt);void*OSTaskStkInit(void(*task)(void*pd),void*ppdata,void*ptos,INT16Uopt)reentrant{OS_STK*stk;ppdata=ppdata;opt=opt;//opt没被用到,保留此语句防止告警产生stk=(OS_STK*)ptos;//用户堆栈最低有效地址*stk++=15;//用户堆栈长度*stk++=(INT16U)task&0xFF;//任务地址低8位*stk++=(INT16U)task>>8;//任务地址高8位3任务控制块(OS_TCB):1用来记录任务的堆栈指针、任务的当前状态、任务的优先级别等一系列与任务管理有关的属性的表