UC/OS II_基本概念和常识

UCOS-II的基本概念和常用知识
1.        所有UC/OS-II 的要素(函数、变量、常数定义、宏)都已OS开头
2.        临界区:指处理时不可分割的代码。一旦开始执行,则不允许任何中断打入。
3.        资源:任何为任务所占用 的实体(如:打印机、键盘、变量、结构体等)
4.        共享资源:可以被一个以上的任务所使用的资源。  (必须存在互斥即每个任务使用时独占资源。)
5.        任务:也叫线程,是一个简单的程序。典型的每个任务都是一个无限的循环。处于5种状态之下:休眠、就绪、运行、挂起、中断。见图1.1
休眠态:  驻留在内存中,但不被多任务内核调度。
就绪态:该任务可以运行,但是priority比较低,暂不能运行
运行态:掌握了CPU的控制权
挂起态:该任务在等待,等待某一事件的发射。
中断态:进入被中断的状态。
6.        任务切换:(上下文切换/CPU寄存器内容切换)
将当前状态即CPU寄存器全部入栈,将新任务状态出栈,并进行下一个任务。
7.        内核(kennel)
负责管理各个任务。其提供的基本服务就是任务切换!
8.        调度(scheduler)
内核的职责之一,就是决定轮到那个任务运行了。UCOS采用的是占先式内核。采用的是优先级调度法:让处在就绪态的优先级最高的任务运行。
8.1        占先式内核:响应时间得到了最优化,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件。
8.2        占先式内核总是让就绪态的高优先级的任务运行,中断服务程序可以抢占CPU,到ISR完成后,内核让优先级最高的任务运行,并不一定是被中断了的任务了。
8.3        可重入性(reentrancy)
可重入型函数可以被一个以上的任务调用,不用担心数据破坏,可被中断,因为其使用的是局部变量,或者在使用全局变量时,进行了保护。
                不可重入型函数会使数据等破坏,使用以下三点可以使其成为可重入型:
1.        把全局变量定义成局部变量
2.        调用函数时关中断,然后开中断
3.        用信号量禁止该函数在使用时被调入。
9.        时间片 轮番调度法
UC/OS没有用,它要求当优先级相同时的一种方法,UC/OS要求priority都不相同。
10.优先级   PRIORITY
        静态优先级  :其优先级在编程时确定了。
动态优先级  :应用程序执行时,任务的优先级可变。但要避免出现优先级反转的问题。(优先级反转和任务优先级的分配将会单独列一个专题)
11.         互斥条件:在处理共享数据时,要避免竞争和数据的破坏。有以下四种方法:
11.1关中断和开中断
                利用宏OS_ENTER_CRITICAL() 关中断
                           OS_EXTI_CRITCAL()   开中断
在处理内部变量和数据结构时常用这种方法,但时间不要太长,否则影响时间特性

11.2        测试并置位(可以用一个全局变量测试能否使用这个共享资源)
11.3        禁止,然后允许任务切换  (给任务切换上锁,但不建议使用)
11.4        信号量(semaphore)
一种约定机制。其像一把钥匙,任务要想运行下去,就得拿到这把钥匙,否则只能被挂起
        控制共享资源的使用权
        标志某事件的发生
        使两个任务的行为同步
对信号量进行三种操作,
        初始化 Initilize/建立 Create   (要给信号量赋初值,等待信号量的任务表要清空)
        等信号 Wait /挂起 Pend   (想要得到信号量的执行等待操作 OSSemPend( , , ) 如果信号量有效,则信号量值减1,如果为0,则进入等待信号量的任务表,等待超时或有效)
        给信号 Signal/发信号 Post   (任务发信号释放信号量)
        有的情况要隐藏信号量,有些简单的共享变量在处理时,就不要用信号量了,否则浪费时间太多,得不偿失,可以用开中断,关中断的方法。
12.         死锁 :(两个任务无限期等待对方控制的资源)
13.         同步:可以使某个任务和ISR同步。
14.        事件标志:Event Flag UC/OS-II不支持。
15.        任务之间的通信:两个途径:1.全程变量2.发消息给另一个任务
16.        消息邮箱: message mail box   mbox  
是一个指针型变量,通过内核服务,一个任务或者ISR可以把一则消息放到邮箱中去,一个任务或多个任务也可以解释这个消息,但是,要有约定。改指针指向的内容就是那则消息。
17.        消息队列 : message queue 给任务发消息。和邮箱差不多
18.        中断  ISR:中断服务子程序。允许中断嵌套。。。
19.        中断延迟: 关中断的最长时间+开始执行ISR的第一个条指令的时间。
20.        中断响应:从中断发生到开始执行用户的ISR代码来处理这个中断的时间。 
  对于占先式内核:中断响应时间是:  中断延迟+保存CPU内部寄存器的时间
                                            +内核的进入ISR的执行时间。
21.        中断恢复时间:微处理器返回到被中断了的程序代码所需要的时间
   对于占先式内核:中断恢复时间: 判定是否有优先级更高的任务进入了就绪态的时间+恢复那个优先级更高任务的CPU寄存器的时间+执行中断返回指令的时间。
22.        中断延迟、响应和恢复。  见图1.2
23.        非屏蔽中断 NMI : 对于其服务子程序,不能使用内核提供的服务。
24.        时钟节拍 :clock tick  特定的周期性中断。
25.        对存储器的要求:(8位单片机基本服务1K到3K) ROM 应用程序代码+内核代码

RAM :应用程序代码 +内核RAM  + SUM (任务堆栈+MAX(ISR堆栈))??????
UC/OS II_基本概念和常识_第1张图片
图1.1 (原文件名:293679_1293458449KAGC_副本.jpg) 

UC/OS II_基本概念和常识_第2张图片

你可能感兴趣的:(数据结构,编程,Semaphore,OS,测试,任务)