会看main函数
OSInit(); 对全局变量的初始化,TCB EVent flag mem timer
OSTaskCreate(startup_task, (void *)0, &startup_task_stk[STARTUP_TASK_STK_SIZE - 1], STARTUP_TASK_PRIO); 注册任务
OSTaskCreate(task1, (void *)0, &task1_stk[APP_TASK_1_STK_SIZE-1], APP_TASK_1_PRIO);
OSTaskCreate(task2, (void *)0, &task2_stk[APP_TASK_2_STK_SIZE-1], APP_TASK_2_PRIO);
OSStart(); 开启多个任务
这里就涉及到具体的任务管理和调度
进程由代码、数据、堆栈和进程控制块构成 其中的堆栈是干什么的呢??
•任务上下文环境(context)
–包括了实时内核管理任务、以及处理器执行任务所需要的所有信息。
•任务优先级
•任务的状态等实时内核所需要的信息
•以及处理器的各种寄存器的内容(hardware context):程序计数器、堆栈指针、通用寄存器等的内容
–任务的上下文环境通过任务控制块(Task Control Block,TCB)来体现。
•任务拥有的资源情况是不断变化的,导致任务状态也表现出不断变化的特性。
•不同的实时内核实现方式对任务状态的定义不尽相同,但是都可以概括为三种基本的状态:
–等待(waiting):任务在等待某个事件的发生;
–就绪(ready): 任务等待获得处理器资源;
–执行(running):任务获得处理器资源,所包含的代码内容正在被执行。
•在单处理器系统中:
–任何时候都只有一个任务在CPU中执行
•如果没有任何事情可做,就运行空闲任务执行空操作
–任何一个可以执行的任务都必须处于就绪状态
•调度程序从任务的就绪队列中选择下一个需要执行的任务。
•处于就绪状态的任务拥有除CPU以外的其他所有需要的资源。
–任务还可能处于等待状态
•如果任务在需要等待I/O设备或其他任务提供的数据,而数据又还没有到达该任务的情况下,就处于等待状态
等待是等待资源(不包括CPU)
就绪时因为当前的人物被高优先级的占掉了,故不能执行