第4章C55x处理器的软件设计 4.1.2应用嵌入式操作系统 任务是一个无限循环,它必须处于下列5个状态之一: 休眠状态是任务驻留在内存之中,但并没有被系统内核所调用; 就绪状态是任务已经准备好,但由于该任务的优先级比正在运行的任务的 优先级低,还暂时不能运行; 运行状态是任务拥有CPU的使用权,正在运行; 挂起状态是任务正在等待某一个事件的发生以结束目前的等待(如等待外 设的O操作、等待共享资源、等待定时或超时信息等事件); 发生中断时,CPU进入中断服务程序,而暂时不能运行当前的任务,任务 就进入了被中断态。 2010年7月18日 TMS320C55xDSP原理及应用 16
第4章C55x处理器的软件设计 4.1.2应用嵌入式操作系统 操作系统需要在多个任务之间转换和调度,这是因为CPU 在某一时刻只能为一个任务提供服务,CPU必须为一系列任务 轮流服务。多任务运行可以使CPU的利用率达到最高,并使应 用程序模块化,使用多任务可以使程序更容易设计和维护。 当任务从当前任务切换到另一个任务时,必须保存正在执 行的任务的当前状态。所谓“任务的当前状态”即CPU寄存器 中的所有内容;这些内容被保存在任务自已的堆栈中,以备任 务下次执行时恢复当前状态。在保存完当前任务后,要把下一 个任务的当前状态装入CPU寄存器,并开始下一个任务的运行 ,这一过程叫做“任务切换” 2010年7月18日 TMS320C55xDSP原理及应用 17
第4章C55x处理器的软件设计 4.1.2应用嵌入式操 挂起 状态 每个任务都 L、之 OSFlagPost() 任务越重oead OSMboxPost() OSMboxPend() 的 OSTaskDel() 高 OSMboxPost() OSMutexPost() 行过程中 OSMutexPend() OSQPost() OSQPend() 不变,则称为静 OSQPostFront() OSSemPost() 之则称为 OSSemPend() OSTaskResume() OSTaskSuspend() OSTimeDlyResume() OSTimeDly ( 所谓 “任务管理 OSStart() 核的控制性务仕五 OSTaskCreate() OSIntExt() 小换。 OSTaskCreateExt() OS TASK SW() 中断 休眠 挂起 运行 被中断 状态 状态 状态 状态 OSTaskDel() CPU使用权被剥夺 OSIntExit(】 OSTaskDel() 2010年7月18日 TMS320C55xDSP原理及应用 18
第4章C55x处理器的软件设计 4.1.2应用嵌入式操作系统 不同任务之间有可能会使用共同的资源,当它们 同时使用共享资源时有可能发生错误,嵌入式操作系 统提供了信号量这一约定机制,通过该机制可以控制 共享资源的使用权,或标志某一事件的发生,也可以 用来为两个任务同步。信号量有两种类型—二进制 型和计数器型,实际上二进制型可以看作一个只有一 位的计数器型信号量。 2010年7月18日 TMS320C55xDSP原理及应用 19
第4章C55x处理器的软件设计 4.1.2应用嵌入式操作系统 信号量可以看作一把钥匙。当任务要运行时首先 要取得这把钥匙。如果信号量已经被其他任务占用, 那么该任务只好挂起并等待信号量被当前使用者释放 2010年7月18日 TMS320C55xDSP原理及应用 20