前一段时间笔者学习uCOS-III,第一次接触OS这个概念吧。下面把个人的学习笔记分享出来,仅供参考。
1、前后台系统:后台程序是一个死循环,也称为“任务级”,前台程序则是中断服务程序,也称为“中断级”;一般的低成本应用多采用这种程序结构。
2、实时内核:仅为一段软件代码,它把系统功能划分为多个任务,每个任务只完成特定的一个功能,通常都为死循环;CPU在任意时刻只能执行一个任务,但每个任务都认为自己在独自使用整个CPU,由于处理器速度非常快,任务切换的速度也非常快,所以看起来几乎多个任务同时被执行;对多任务的管理就是实时内核所要做的工作,实现CPU资源的最大化利用。
3、uC/OS-III是一个可剥夺型内核(抢占式内核,Preemptive Kernel),它总是执行当前就绪任务中优先级最高的那个;uC/OS-III被设计用于32位处理器;uC/OS-III至少需要4KB RAM资源的微控制器上运行
4、uC/OS-III的特性:
- l 同优先级任务的时间片轮转调度
- l 任务数目不受限制
- l 优先级数目不受限制
- l 内核对象数目不受限制
- l 可嵌套的任务挂起(suspension),嵌套挂起深度最大可达250层
- l 直接向任务发送信号
- l 直接向任务发送消息
- l 任务级时钟节拍处理
5、临界段代码:不可被打断的代码(在运行这些代码时,需要关闭中断,运行完后再开启)。有两种方式保护临界段代码:1、关中断;2、调度器上锁。两种方法均可以测得中断关闭时间
6、任务的类型有两种:运行至完成型、无限循环型(大多数嵌入式系统采用这种);任务与C函数不同,任务不允许返回;在创建一个任务时,必须为任务分配一个任务控制块(OS_TCB);每一个任务都要有属于自己的栈(类型为CPU_STK);每一个任务都必须调用一个可以引发任务“等待某事件”的函数,比如一段延迟结束(OSTimeDly()或OSTimeDlyHMSM()),在等待一个事件时,它不会占用CPU时间,这是与前后台系统不同的地方;任务的三个重要参数:任务控制模块TCB、优先级、栈空间(存放局部变量、函数调用返回地址、ISR嵌套。如果出现一些很奇怪的结果,首先怀疑占空间是否给小了);每个任务都有自己独立的CPU寄存器
7、uC/OS-III 允许任务停止自身或者停止另外的任务。停止一个任务意味着这个任务将不再执行直到被其他的任务恢复。停止可以被嵌套到250级。换句话说,一个任务可以停止另外的任务多达250次。当然,这个任务必须被恢复同等次数才有资格再次获得 CPU。
8、OSInit()会创建2~5个任务,其中空闲任务(OS_IdleTask())和时钟节拍任务(OS_TickTask())是必须要创建的2个任务,其他的统计任务(OS_StatTask())、定时任务(