文档详情

嵌入式系统基础教程第19讲第9章嵌入式操作系统.ppt

发布:2025-03-06约1.05万字共10页下载文档
文本预览下载声明

μC/OS-II的代码结构(续)2008年12月15日南京大学计算机系*μC/OS-II的任务代码有两种框架结构,如下列出:voidUsertask(void*pdata){for(;;){用户代码;OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();用户代码;}}voidUsertask(void*pdata){用户代码;OSTaskDel(OS_PRIO_SELF);}μC/OS-II的代码结构(续)2008年12月15日南京大学计算机系*对于执行无限循环的任务,通常采用第一种形式;对于只执行一次就自我删除的任务,采用第二种形式。以下是推荐的μC/OS-II应用程序任务的基本结构voidUsertask(void*pdata){INT8UReturnNum;//返回值InitTimer();//可选for(;;)………..//应用程序代码OSTimeDly(n);//常用的语句}μC/OS-II的代码结构(续)2008年12月15日南京大学计算机系*μC/OS-II的启动过程Bootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main()函数。main()函数在执行过程中,除硬件初始化函数和用户函数外,按以下次序执行三个主要的μC/OS-II函数:①操作系统初始化OSInit();②任务创建OSTaskCreate();③任务调度开始OSStart()一旦OSStart()函数开始执行,就标志着μC/OS-II进入了多任务调度的正常运行状态μC/OS-II的内核2008年12月15日南京大学计算机系*μC/OS-II内核只提供任务调度、任务间通信(ITC)与同步、任务管理、时间管理和内存管理等基本功能01可裁剪编译到8K左右,全部只有100K左右,消耗资源非常小02在小规模的代码内实现了抢占式任务调度、多任务通信功能03μC/OS-II的内核(续1)2008年12月15日南京大学计算机系*μC/OS-II的临界区μC/OS-II调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来执行关中断和开中断,对于不同的体系结构,这两个宏定义不一样。OS_CPU.H文件中含有OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的定义μC/OS-II的内核(续2)2008年12月15日南京大学计算机系*μC/OS-II的任务状态01最大任务数64个,最高优先级为0,最低优先级取值为实际定义的最大任务数减1.02任务建立之后,拥有优先级,执行函数,自用栈空间和任务控制块(TCB),在运行时刻能够完全控制CPU的操作以及全部用户可访问寄存器的操作。03μC/OS-II的任务状态转换图2008年12月15日南京大学计算机系*μC/OS-II的每个任务都是一个无限的循环。每个任务都处在休眠态、就绪态、运行态、挂起态和被中断态的某种状态下(任务状态变迁如右图所示)μC/OS-II的内核(续3)2008年12月15日南京大学计算机系*休眠态(dormant)这种状态相当于该任务驻留在内存中,但还没有交给内核管理。把任务交给内核是通过调用任务创建函数实现的μC/OS-II两个任务创建函数OSTaskCreate()和OSTaskCreateExt()μC/OS-II的内核(续3)2008年12月15日南京大学计算机系*STEP5STEP4STEP3STEP2STEP1就绪态(ready)在这种状态下意味着该任务已经准备好,且可运行,但由于该任务的优先级比正在运行的任务的优先级低,所以还暂时不能运行μC/OS-II就绪表为每一个优先级的任务提供了一个位元,登记该任务是否就绪,就绪时取值为1,没有就绪时取值为0运行态得到了CPU的控制权正在运行之中的任务状态μC/OS-II的内核(续4)2008年12月15日南京大学计算机系*挂

显示全部
相似文档