单遗程/单缄程樸型 单进程/多程模型 多进程/单戴程模型 多进程多线程模型 口大多数实时内核:单进程/多线程模型, 或筒单地称为任务模型 ◆把整个应用当作一个没有定义的进程来对 待; ◆应用则被划分为多个任务的形式来进行处 理 口也有一些嵌入式实时操作系统采用了多 进程/多线程模型 令系统中包含多个进程,每个进程对应又包含 多个线程 今多进程/多线程模型适合于处理复杂的应用 任务模型则适用于实时性要求较高的、相对 简单的应用
6 单进程/单线程模型 单进程/多线程模型 多进程/单线程模型 多进程/多线程模型 大多数实时内核:单进程/多线程模型, 或简单地称为任务模型 把整个应用当作一个没有定义的进程来对 待; 应用则被划分为多个任务的形式来进行处 理。 也有一些嵌入式实时操作系统采用了多 进程/多线程模型: 系统中包含多个进程,每个进程对应又包含 多个线程 多进程/多线程模型适合于处理复杂的应用 任务模型则适用于实时性要求较高的、相对 简单的应用
第一节 任务 务的定义及其玉特 任务的内容 任务的分粪 任务参 任务的定义及其主要特性 口任务 具有独立功能的无限循环的程序段 活动,是实时内核调度的单位,其 有以 心动态性:任务状态是不断变化的 般分为就绪态、运行态和等待态 在多任务系统中,任务的状态将随着系统的需要不断进行 今并行性 系统中同时存在多个任务,这些任务在宏观上是同时运行 今异步独立性 每个任务各自按相互独立的不可预知的速度运行,走走停 多任务运行情况
7 第一节 任 务 任务的定义及其主要特性 任务的内容 任务的分类 任务参数 任务的定义及其主要特性 任务是一个具有独立功能的无限循环的程序段 的一次运行活动,是实时内核调度的单位,具 有以下特性: 动态性:任务状态是不断变化的。 • 一般分为就绪态、运行态和等待态。 • 在多任务系统中,任务的状态将随着系统的需要不断进行 变化。 并行性: • 系统中同时存在多个任务,这些任务在宏观上是同时运行 的。 异步独立性: • 每个任务各自按相互独立的不可预知的速度运行,走走停 停。 多任务运行情况
任务的内容 口任务主要包含以下内容: 今代码:一段可执行的程序 数据:程序所需要的相关数据(变量、工作 空间、缓冲区等 令堆栈 令程序执行的上下文环境 任务的内容 口任务所包含的程序通常为一个具有无限 循环的程序 /ioTask implements data obtaining and handling continuously*/ void io Task( void) int data initial; .The following sentences get data and handle data continuously */ while(TRUe)
8 任务的内容 任务主要包含以下内容: 代码:一段可执行的程序 数据:程序所需要的相关数据(变量、工作 空间、缓冲区等) 堆栈 程序执行的上下文环境 任务的内容 任务所包含的程序通常为一个具有无限 循环的程序 /*ioTask implements data obtaining and handling continuously*/ void ioTask(void) { int data; initial(); /*The following sentences get data and handle data continuously*/ while(TRUE) { data = getData(); handleData(data); } } /*ioTask implements data obtaining and handling continuously*/ void ioTask(void) { int data; initial(); /*The following sentences get data and handle data continuously*/ while(TRUE) { data = getData(); handleData(data); } }
void Your Task (void *pdata) for (:i)4 Call one of uC/Os-II's services STaskDel (OS PRIO SELE) d(OS PRIO SELF) void Your Task (void *pdata) /* USER C。DE* STaskDel (OS PRIO SELF) void TestTask2(void *pdata) while (1) printf(”84u:*★★★ Test Task22****\n", OSTime) OSTimeDly(1)i void TestTask3(void *pdata) printf("4u:*★** Test Task33★★n", OSTime) STimeDly(1)i void TestTask4(void *pdata) rinf(84 est Task 10 +++++\n", OSTime) STaskSuspend (10); //Suspend yourself
9 void YourTask (void *pdata) { for (;;){ /* USER CODE */ Call one of uC/OS-II’s services: OSFlagPend(); OSMboxPend(); OSMutexPend(); OSQPend(); OSSemPend(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /* USER CODE */ } } void YourTask (void *pdata) { /* USER CODE */ OSTaskDel(OS_PRIO_SELF); } void TestTask2(void *pdata) { while (1) { printf("%4u: ***** Test Task 22 *****\n", OSTime); OSTimeDly(1); } } void TestTask3(void *pdata) { while (1) { printf("%4u: ***** Test Task 33 *****\n", OSTime); OSTimeDly(1); } } void TestTask4(void *pdata) { while (1) { printf("%4u: +++++ Test Task 10 +++++\n", OSTime); OSTaskSuspend(10); //Suspend yourself } }
任务的内容 口任务与程序的区别: 令任务能真实地描述工作内容的并发性,而程 序不能; 今程序是任务的组成部分 除程序外,任务还包括数据、堆栈及其上下文环 境等内容; ◆程序是静态的,任务是动态的; 任务有生命周期,有诞生、有消亡,是短暂 的;而程序是相对长久的 今一个程序可对应多个任务,反之亦然; ◆任务具有创建其他任务的功能,而程序没 有 任务的内容 口任务上下文环境( context) 包括了实时内核管理任务、以及处理器执行 任务所需要的所有信息。 任务优先级、任务的状态等实时内核所需要的信 息,以及处理器的各种寄存器的内容 ( hardware context):程序计数器、堆栈指 针、通用寄存器等的内容 任务的上下文环境通过任务控制块(task control block,TCB)来体现
10 任务的内容 任务与程序的区别: 任务能真实地描述工作内容的并发性,而程 序不能; 程序是任务的组成部分 • 除程序外,任务还包括数据、堆栈及其上下文环 境等内容; 程序是静态的,任务是动态的; 任务有生命周期,有诞生、有消亡,是短暂 的;而程序是相对长久的; 一个程序可对应多个任务,反之亦然; 任务具有创建其他任务的功能,而程序没 有。 任务的内容 任务上下文环境(context) 包括了实时内核管理任务、以及处理器执行 任务所需要的所有信息。 • 任务优先级、任务的状态等实时内核所需要的信 息,以及处理器的各种寄存器的内容 (hardware context):程序计数器、堆栈指 针、通用寄存器等的内容 任务的上下文环境通过任务控制块(task control block,TCB)来体现