3.1任务的基本概念
一、任务及内核结构
在设计一个较为复杂的应用程序时,通常把任务分成若干个小问题,这样使系统并发运行多个任务,提高处理器的利用率,加快程序的执行速度,所以现代操作系统都是多任务操作系统。UCOSII就是一个多任务的操作系统。
UCOSII的任务由任务程序代码(函数)、任务堆栈、任务控制块这三个部分组成。
PC的值总是待要执行指令的地址,根据任务是否具有自己的私有运行空间,分为进程和线程。UCOSII中没有给任何定义私有空间,所以UCOSII中的所有任务就叫做线程。
一个任务可以在睡眠状态,就绪状态,运行状态,等待状态,中断服务状态5个状态中发生转换。
二、用户任务代码的一般结构
根据嵌入式系统任务的工作特点,任务的执行代码通常是一个无限循环结构,在这个循环中可以响应中断,这种结构也叫做超循环结构。
从程序设计的角度来说,一个UCOSII的任务代码就是一个C语言函数,为了传递各种不同的类型的数据甚至是函数,所以UCOSII的任务的参数定义成了一个VOID类型的指针。
代码中的OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()是UCOSII定义的两个宏,OS_ENTER_CRITICAL()封装了关中断的代码,而OS_EXIT_CRITICAL()封装了开中断的代码,即处于这两个宏之间的代码是不会被中断的,把这种受保护的代码段叫做临界段,所以OS_ENTER_CRITICAL()叫做临界段宏,而OS_EXIT_CRITICAL()叫做推出临界段宏。
从程序代码的形式上来看,用户任务就是一个C语言函数,但这个函数不是主函数调用 的函数,在系统中它与main函数处于平等地位,但是何时被调用以及何时被终止由操作系统决定的。
应用程序结构:
三、系统任务
操作系统除了管理用户任务之外还要管理系统任务,即系统的内部事务要处理。
UCOSII预定义了两个系统任务:空闲任务和统计任务,空闲任务的不是必须的,但是统计任务是应用程序根据实际需要来使用。
前面所说任务分为5个状态,即系统极有可能在某个时间内处于空闲状态。空闲任务是在系统空闲时,有事可做。
统计任务就是统计cpu在单位时间内被使用的时间,以百分比的形式保存在变量OSCPUsage中。用户根据实际需要来选择是否使用统计任务,若用则把定义在头文件中的OS_CFG.H中的系统配置常数OS_TASK_STAT_EN设置为