ucos iii知识点总结_第1页
ucos iii知识点总结_第2页
ucos iii知识点总结_第3页
ucos iii知识点总结_第4页
ucos iii知识点总结_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、其中最有用的功能应该是时间片轮转法(roun drob in),这个是 uC/OS-ll中不支持的,但是现在已经是 uC/OS-HI的一个功能了2、uC/OS-III被设计用于32位处理器,但是它也能在16位或8 位处理器中很好地工作。3、一共有2种类型的实时系统:软实时系统和硬实时系统。硬实时系统中,运算超时是不允许发生的,运算超时会导致严重后果。但是 在软实时系统中,超时不会导致严重后果4、前后台系统:包含一个无限循环的模块实现需要的操作(后台)。中断处理程序实现异步事件(前台)。前台也叫做中断级,后台也叫 作任务级。5、临界操作应该在任务级中被执行,不可避免地必须在中断处理程序中执行

2、也要确保是在很短的时间内完成。因为这会导致ISR占用 更长的时间。通常的,ISR中使能相关的信息而在后台程序中执行 相应的操作。6、ucos-iii中的任务(也叫做线程)是一段简单的程序,运行时完 全地占用CPU。在单CPU中,任何时候只有1个任务被执行。CPU。7、内核的责任是管理任务,协调和切换多个任务依次享用让我们感觉是多个 CPU在同时运行,也有利于处理模块化的应用它也负责管理任务间的交流, 系统资源的管理(内存 和I/O )等。8 uC/OS-HI是一个抢占式内核,这意味着uC/OS-HI总是执行最重要的就绪任务9、ISR响应中断请求设备, 但是ISR只做非常少的工作。ISR应该标记

3、或发送消息到一个高优先级的任务,让中断能够快速处理完毕10、系统中加入内核需要额外的支出,因为内核提供服务时需要时间去处理。内核占用 CPU的时间介于2%至y 4%之间因为uC/OS-lll是一个软件,添加到目标系统中需要额外的ROM 禾口RAM 。11、。 uC/OS-III内核需要1K至y 4K之间的RAM,加上每个任务自己所需的堆栈空间。 至少有4K大小RAM的处理器才有可能成功移植uC/OS-HI。12、: uC/OS-III允许多个任务拥有相同的优先级。当多个相同优先级的任务就绪时, 并且这个优先级是目前最高的uC/OS-III 会分配用户定义的时间片给每个任务去运行。每个任务可以定

4、义不同的 时间片。13、uC/OS-III保护临界段可以通过锁定调度器代替关中断。因此关 中断的时间会非常少。这样就使uC/OS-lll可以响应一些非常快的中 断源了。14、uC/OS-III允许用户在运行时配置内核。特别的,所有的内核对象如任务、堆栈、信号量、事件标志组、消息队列、消息、互斥信 号量、内存分区、 软件定时器等都是在运行时分配的 ,以免在编译时的过度分配。15、uC/OS-III对任务数量、任务大小、优先级数量无限制。每一个任务需要有自己的堆栈空间。实际上,任务的数量和大小限制于处理器能提供的内存大小。16、uC/OS-III支持任何数量的任务、信号量、互斥信号量、 事件标志组

5、、消息队列、软件定时器、内存分区。用户在运行时分配所有的内核对象。17、互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量,用于消除优先级反转。 互斥信号量可以被嵌套,因此,任务可 申请同一个互斥信号量多达 250次。当然,互斥信号量的占有者需要释放同等次数。18、: uC/OS-III允许任务停止自身或者停止另外的任务。停止一停止可以个任务意味着这个任务将不再执行直到被其他的任务复。被嵌套到250级。换句话说,一个任务可以停止另外的任务多达250次。当然,这个任务必须被恢复同等次数才有资格再次获得CPU。19、可以定义任意数量的一次性的、周期性的、或者两者兼有的软件定时器。定时器是倒

6、计时的, 执行用户定义的行为一直到计数减为0。每一个定时器可以有自己的行为, 如果一个定时器是周期性的, 计数减为0时会自动重装计数值并执行用户定义的行为。20、: uC/OS-III允许任务等待多个事件的发生。等待中的任务在所 有事件发生后被唤醒21、uC/OS-III允许ISR或者任务直接地发送信号量给其它任务。这样就避免了必须产生一个中间级内核对象如一个信号量或者事件 标志组只为了标记一个任务。提高了内核性能。22、:每一个任务可以拥有用户可定义的任务寄存器,不同于CPU寄存器。uC/OS-HI能检测指针是否为 NULL、在ISR中调用的任务级服务是否允许、参数在允许范围内、配置选项的有

7、效性、函 数的执行结果等。每一个 uC/OS-HI的API函数返回一个对应于函数调用结果的错误代号23: uC/OS-III有内置性能测量功能。能测量每一个任务的执行时间,每个任务的堆栈使用情况,任务的执行次数,CPU的使用情况,ISR到任务的切换时间,任务到任务的切换时间,列表中的 对象的峰值数,关中断、锁调度器平均时间等。24、uC/OS-lll被设计于能够根 CPU的架构被优化uC/OS-lll所用的大部分数据类型能够被改变,以更好地适应 CPU固有的字大小。优先级调度法则可以通过编写一些汇编语言而获益于一些特殊的 指令如位设置、位清除、计数器清零指令(CLZ )、find-first-

8、one(FF1) 指令25、uC/OS-III中所有的挂起服务都可以有时间限制,预防死锁。26、uC/OS-lll有时基任务, 时基lSR触发时基任务。uC/OS-HI使27、uC/OS-III使用了哈希列表结构,可以大大减少处理延时和任务 超时所产生的开支。28、uC/OS-III允许程序员定义 hook函数。hook函数允许用户扩展 uC/OS-III 的功能。29、为了测量时间,uC/OS-HI需要一个16位或者32位的时时间戳计数器。30、每个uC/OS-lll的内核对象有一个相关联的名字。这样 就能很容易的识别出对象所指定的作用。对象的名字长度没有限制, 但是必须以空字符结束。31、

9、每个任务需要创建自己的堆栈。堆栈的数据类型 CPU STK 。堆栈可以被静态地分配或者通过mallocO动态地分配。若任务将不会被删除,堆栈将一直被使用。32、在大部分处理器中, 中断在启动时是关闭的。无论如何,在 启动时关闭所有的外设中断是最安全的。33、uC/OS-III须创建空闲任务 OS_ldleTask (),当没有其他任 务运行时就运行空闲任务。根 据配置文件中所uC/OS-HI会 创建统务OS_StatTask()、定时器任务 OS_TmrTask()、 中 断队列处理任务OS_IntQTask()。34、OSTaskCreate()的第四个参数,第一次被调用时 OSTaskCr

10、eate()接收这个变量,传递给所创建的任务中的唯一参数p_arg。该参数可以是任意类型的指针。35、参数值越小优先级越高可以设置优先级数值为1到OS CFG PRIO MAX-2要避免使用优先级#0和优先级OS CFG PRIO MAX-1因 为 这些是为uC/OS-IIl保留的。36、任务的堆栈大(以CPU_STK为数据类型而不是字节)。例如,如果要分配1KB大小的堆栈空间,因为 CPU_STK是32位的,所以这个其值为256.37、)所有的uC/OS-HI任务需要被设置为无限循环。38、互斥信号量(mutex )是一个内核对象,用于保护共享资源。 任务要访问共享资源就必须先获得mutex

11、。mutex的拥有者使用完这个资源后就必须释放这个 mutex。39、消息队列是一个内核对象,ISR或任务可以直接发送消息到另一个任务。 发送者制定一个消息并将其发送到目标任务的消息队 列。目标任务等待消息的到达。40、定义消息队列可接受消息的个数。这个值必须大于0。如果 消息者发送消息数超过了消息接收任务的承受能力。那么消息将会被 丢失。可以通过增加消息队列的大小或者提供消息接收任务的优先级 提升其承受能力。41、uC/OS-III定义了一个进入临界段的宏和两个出临界段的宏(退出临界段后是否调用调度器)。42、测得消息是什么时候被发送的,用户就能测得任务接收这 个消息所用的时间。 读取现在的

12、时间戳并减去消息被发送时的时 戳。需注意的是,消息被发送时,等待消息的任务可能不会立即接 收到消息,因为ISR或更高优先级的任务可能抢占了当前任务。显然,测出的时间还包括了测量时消耗的额外时间。然而减掉测量时 所耗时间就是实际上的时间。43、时间戳的控制单元位于 CPU_TS中。例如,如果CPU速率为1MHz ,时间戳的速率为1MHz。那么CPU_TS的分辨率为1 微秒44、当任务第一次执行时,会传入一个变量p_arg。这是一个指 向void的指针。用于变量的地址、 结构体地址、 或者函数的地址 等。如果需要,可以创建多个相同的任务,使用相同的代码(相同 任务体),而产生有不同的运行结果。45

13、、只运行一次的任务结束时必须通过调用OSTaskDeK)删除自己。这样可以使系统中的任务数减少。46、一个任务可以创建其它任务( 调OSTaskCreateO )、停止或 者恢复其它(调用 OSTaskSuspned()和 OSTaskResume()、提交信号量到其它任务、发送消息到其它任务、提供共享资源等。换 句话说,任务不是只被限制于 等待事件”。47、在嵌入式系统中动态地分配堆栈是被允许的,但是,一旦堆栈被动态分配,它就不能被回收。 换句话说,对于有些不需要被删除的任务,动态分配它们的堆栈是一种很好的解决方法。48、可以人工地计算出任务需要的堆栈空间大小,逐级嵌套所有可能被调用的函数,

14、添加被调用函数中所有的参数,添加上下文切换时的CPU寄存器空间, 添加切换到中断时所需的CPU寄存器空间,添加处理ISRs所需的堆栈空间。 把上述的全部相加, 得到的值定义为最小的需求空间。 因为我们不可能计算出精确的堆栈空间。通 常是再乘以1.5以确保任务的安全运行。49、另一种防止堆栈溢出的方法是分配的空间远大于可能需要的。首先,当任务创建时其堆栈被清零。 程序运行一段时间后,通过一 个低优先级任务, 计算该任务整个堆栈中值为 0的内存大小。 这 是一种非常有效的方法。 注意的是,程序需用运行很长的时间以让 堆栈达到其需要的最大值。50、从用户的观点来看,任务可以是有 5种状态,休眠状态,

15、就绪状态,运行状态,挂起状态,中断状态51、调用OSTaskSuspend()会任务无条件地停止运行。有些时候调 用OSTaskSuspend()不是为了等待某个事件的发生,而是等待另一 个任务调用OSTaskResumeO函数恢复这个任务。52、任务控制块是被uC/OS-HI用于维护任务的一个结构体。每个 任务都必须有自的己 TCB。TCB中的一些变量可以根据具体应用进行裁剪。用户程序不应该访问这些变量(尤其不能更改它们)53、有些处理器有硬件寄存器可以自动地检测并确保堆栈不发生溢出,如果处理器没有这些硬件施,ucos-iii的堆栈检测可以用软件模 拟。然而,软件模拟不如硬件可靠。54、在u

16、C/OS-lll初始化的时候,它会创建至少 2个内部的任务(OS_ldleTask()和 OS_TickTask() ,3 个可选择的任务(OS_StatTask(),OS_TmrTaks(), OS_IntQTask()。这些可选择的任务在编译时由OS CFG.H中的配置决定。55、当CPU中没有其它就绪任务运行时,空闲会被运行。空闲任务是一个无限循环的不会等待任何事件的任务。空闲任务的每次循环, 都会调用OSIdleTaskHookO函数,这个函数提供给用户扩展应用, 如让处理器进入低功耗模式等。56、)使用硬件定时器并被设置为以10到1000Hz之间的频率产生时基中断,时基中断并不是一定

17、要用 CPU产生,事实上,它可以从其他的具有较精确的周期性时间源中获得,比如电源线(50-60HZ )等。57、当时基任务执行时,它会遍历挂起队列中所有等待期满的任务或等待事件超时的任务。 它会就绪时基列表中的那些期满、超时的任 务。使用轮转法遍历队列(此队列为二维数组的形式)大大减少了遍 历队列所占用CPU的时间。58、统计任务能够统计总的 CPU使用率,每个任务的CPU使用率,每个任务的堆栈使用量。59软件定时器通常需要的频率可由用户设置,通过软件将时基分频。换句话说如果时基速率为 1000H Z,但是想要的定时器速率为 10Hz,软件定时器任务会每100个时基被标记一次。时基任务的优先级

18、要 高于定时器任务,定时器任务的优先级需要于统计任务60、当一个任务创建了一个具有相同优先级的任务,这个新任务会被没有理添加到该优先级队列的尾部(因为具有相同优先级情况下, 由让新任务先运行)。然而,当一个任务创建了一个具有不同优先级 的任务时,这个新的任务就会放到对应优先级列表中的首部。注意: 正在运行的任务也被放在就绪列表中。61会发生调度的调度点:任务被标记或发送消息给另一个任务、任务调用 OSTimeDIyO或OSTimeDlyHMSM()、任务所等待的事件发生或超时、任务被取消挂起、新任务被创建、任务被删除、内核对象被删除、任务改变自身的优先级或其它任务的优先级、任务通过调用 OST

19、askSuspend()停止自身、任务调用 OSTaskResume()恢复其它停止了的任务、退出中断服务程序、通过调用OSSchedUnlock()调度器被解锁、调用 OSSchedRoundRobinYield()任务放弃了分配给它的时间片、用户调用OSSched()62、任务提交一个事件后调用调度器。当然,任务可以一次性提交 多个事件, 但在最后一个事件提交后才调用调度器。63、uC/OS-III有2种调度方式:OSSched()被用于任务级。OSIntExit()被用于中断级。由于中断产生时已经将任务A的状态保存在任务A的堆栈中,所以ISR返回时无需再保存任务 A的状态,而是直接载入任

20、务 B的CPU寄存器到硬件CPU寄存器中即64、当uC/OS-IIl转向执行另一个任务的时候,它保存了当前任务的CPU寄存器到堆栈。并从新任务堆栈中 相关内容载入CPU寄存器。这个过程叫做上下文切换。上下文切换需要一些开支。CPU的寄存 器越多,开支越大。上下文切换的时间基本取决于有多少个 CPU寄存器需要被存储和载人。保存状态寄存器和程序指针寄存器到当前 的任务堆栈。保存的顺序与中断发生时 CPU保存寄存器的顺序相同。65、CPU处理中断有两种模式:1所有的中断指向同一个ISR2每个中断指向各自的ISR。) ISR的工作完成后, 用户必须调用OSIntExitO告诉uC/OS-lll中断服务

21、程序已经完成。66、uC/OS-III有两种方法处理来自于中断的时间;直接提交和延迟提交。其区别在于如何处置中断中所产生的事件。延迟提交的方式为事件不是直接发送给任 务,而是先发送到中断队列。然后中断处理任务(其优先级为 0)被就绪,这样,事件的提交便可在任务级完成,从而减少了ISR处理的时间。67、uC/OS-III必须有系统时基是普遍的误解。事实上, 很多低功 耗应用中没有系统时基,因为需额外的能量用于维护时基源。 换句话说,将能量用于维护时基源是不合理的。因为uC/OS-HI是一个可抢占式内核, 一个事件可以唤醒进入低功耗模式处理器(按键或其它事件)没有时基意味着用户不能再对任务进行延时

22、或超时设置。用 户在研发低功耗产品时可以考虑这个特性。68、任务在挂起队列中是根据优先级分类的。咼优先级任务被 放置在队列的头部,低优先级任务被放置在队列的尾部。69、任务不是直接链接到挂起队列中,而是通过叫OS_PEND_DATA的结构体作为媒介。 这个媒介在任务被挂起时分配到任务堆栈的。挂起队列中的对应指针指向该结构体。70、延时函数OSTimeDly(),任务调用这个函数后就会被挂起直到期满。以时基为单位,但需注意,当任务在时基中断将要到来时被挂起,那么实际的延时时基会少1个时基。这个函数可以有设置为三种模式:相对延时模式,周期性延时模式,绝对延时模式(用于对时 间要求很高的应用)。71

23、、uC/OS-III定时器的分辨率决定于时基频率。定时器可以被设置为3种模式:一次性定时模式,无初始定时周期模式, 有初始定时周期模式。如果定时器被停止,那其定时值也将被停止, 直到定时器被恢复时,定时器值继续被递减。不能在定时器的执行代 码中等待事件发生。否则定时器任务会被挂起,导致定时器任务崩溃。72、uC/OS-III可能要维护上百个定时器。使用定时器列表会大大降低更新定时器列表所占用的 CPU时间。定时器列表类似于时基列表,以二维数组的形式存储记录。73、uC/OS-III提供关中断方式、锁调度器方式、信号量方式、mutex方式保护共享资源。只有任务才允许使用信号量,ISR是不允许的。

24、用信号量保护共享资源不会导致中断延迟。 当任务在执行信号量所保 护的共享资源时,ISR或高优先级任务可以抢占该任务。74、信号量经常被过度使用。很多情况下,访问一个简短的共享资源时不推荐使用信号量,请求和释放信号量会消耗 CPU时间。通过关/开中断能更有效地执行这些操作。 信号量会导致一种严重的问题:优 先级反转。75、优先级反转是实时系统中的一个常见问题, 仅存在于基于优先级 的抢占式内核中。uC/OS-HI支持一种特殊类型的二值信号量叫做mutex,用于解决优先级反转问题。76、死锁,就是两个任务互相等待对方所占用的资源的情况。除一般的防死锁方式外,uC/OS-Il还可以在申请信号量或 mutex时允许设置其期限,这样能防止死锁,但是同样的死锁可能稍后再次出现。77、uC/OS-III中用于同步的两种机制:信号量和事件标志组。两个任务间可以用一个信号量实现单向同步,用两个信号量实现双向同 步。当任务要与多个事件同步时可以使用事件标志。 若其中的任意一个事件发生时任务被就绪,叫做逻辑或(OR)。若所有的事件都发生时 任务被就绪,叫做逻辑与(AND )。78、有些情况下任务或ISR与另一个任务间进行通信,这种信息交换叫做作业间的通信。可以有两种方法实现这种通信:全局变量、发送 消息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论