2016-07-05 LT
OS_CFG.H中的核心功能函数
OS_ENTER_CRITICAL()
OS_EXIT_CRITICAL()
OSInit()
OSStart()
OSIntEnter()
OSIntExit()
OSSchedLock() OS_SCHED_LOCK_EN
OSSchedUnlock() OS_SCHED_LOCK_EN
OSVersion()
3.00 临界段
- 处理临界段代码,须关中断,处理完毕后,再开中断。
- 调用uC/OS-Ⅱ功能函数时,中断总应当是开着的。
- OS_ENTER_CRITICAL 和 OS_EXIT_CRITICAL 有3种实现方法。
3.01 任务
- 任务通常是一个无限的循环。
- 必须给每个任务赋以不同的优先级。
- 优先级可以由功能函数改变。
3.02 任务状态
- 睡眠态(task dormant):指任务驻留在程序空间,还没交给uC/OS-Ⅱ来管理。
- 就绪态(task ready): 任务一旦建立,这个任务就进入就绪态,准备运行。
- 运行态(task running):调用OSStart()可以启动多任务。
- 等待状态(task waiting):通过OSTimeDly() 和OSTimeDlyHMSM()这两个函数可以将自身延迟一段时间,这个任务进入等待状态。
- 中断服务态(ISR running):被中断的任务进入中断服务态,中断结束之后任务重新调度。
- 当所以的任务都未运行时,uC/OS执行空闲任务OSTaskIdle()。
3.03 任务控制块(OS_TCB)
- 在uC/OS初始化时,所有的任务控制块OS_TCB都被链接成单向空任务链表。
- 一旦任务建立,一个任务的控制块OS_TCB被赋值。
3.04 就绪表
- 在就绪表中可以迅速的计算出进入就绪态的优先级最高的任务。
3.05 任务调度
- uC/OS任务调度的执行时间是常数。
3.06 任务级的任务切换,OS_TASK_SW()
- 任务的contest,其实就是CPU中的全部寄存器,contest-switch就是任务切换。
- uC/OS假定任务切换是靠中断级代码完成的。
3.07 给调度器上锁和开锁
- 调度器上锁后中断可以响应。
- 调度器上锁后用户应用程序不得调用可能会使当前任务挂起的系统功能函数。
3.08 空闲任务
- 空闲任务优先级永远最低。
- 空闲任务永远处于就绪状态。
- 借助OSTaskIdelHook()可以让系统处于低功耗模式。
3.09 统计任务
- 通过计算1秒内系统的空闲时间,计算出CPU的占用率。
- OSTaskStat()的优先级为次低优先级。
3.10 uC/OS-Ⅱ中的中断
- 中断返回时检查是否有更高优先级的任务需要执行。
3.11 时钟节拍
- uC/OS中的周期性信号源,用于实现时间延时和确认超时。
- 必须在多任务系统启动以后,也就是在调用OSStart()之后,再开启时钟节拍器。