ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:23.87KB ,
资源ID:20965716      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20965716.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ucosiii知识点总结Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ucosiii知识点总结Word文档格式.docx

1、RAM。11、 。 uC/OS-III内核需要1K至U 4K之间的RAM ,加上每个 任务自己所需的堆栈空间。 至少有4K大小RAM的处理器才有可 能成功移植uC/OS-HI。12、 : uC/OS-III允许多个任务拥有相同的优先级。 当多个相同优 先级的任务就绪时, 并且这个优先级是目前最高的uC/OS-HI会分配用户定义的时间片给每个任务去运行。 每个任务可以定义不同的时间片。13、 uC/OS-lll保护临界段可以通过锁定调度器代替关中断。 因此关 中断的时间会非常少。这样就使uC/OS-lll可以响应一些非常快的中 断源了。14、 uC/OS-lll允许用户在运行时配置内核。特别的,

2、所有的内核对 象如任务、堆栈、信号量、事件标志组、消息队列、 消息、互斥信 号量、内存分区、 软件定时器等都是在运行时分配的 ,以免在编 译时的过度分配。15、 uC/OS-lll对任务数量、任务大小、优先级数量无限制。每一个任务需要有自己的堆栈空间。实际上, 任务的数量和大小限制于处理器能提供的内存大小。16、 uC/OS-lll支持任何数量的任务、信号量、 互斥信号量、事件 标志组、消息队列、 软件定时器、 内存分区。用户在运行时分配 所有的内核对象。17、互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量,用于消除优先级反转。 互斥信号量可以被嵌套,因此,任务可 申请同一个互斥信

3、号量多达 250次。当然,互斥信号量的占有者需 要释放同等次数。18、 : uC/OS-III允许任务停止自身或者停止另外的任务。 停止一个任务意味着这个任务将不再执行直到被其他的任务复。 停止可以被嵌套到250级。换句话说,一个任务可以停止另外的任务多达 250次。当然,这个任务必须被恢复同等次数才有资格再次获得 CPU。19、 可以定义任意数量的一次性的、周期性的、或者两者兼有的软件 定时器。定时器是倒计时的, 执行用户定义的行为一直到计数减为0。每一个定时器可以有自己的行为, 如果一个定时器是周期性的,计数减为0时会自动重装计数值并执行用户定义的行为。20、 : uC/OS-III允许任

4、务等待多个事件的发生。 等待中的任务在所 有事件发生后被唤醒21、 uC/OS-III允许ISR或者任务直接地发送信号量给其它任务。 这样就避免了必须产生一个中间级内核对象如一个信号量或者事件 标志组只为了标记一个任务。提高了内核性能。22、 :每一个任务可以拥有用户可定义的任务寄存器,不同于CPU寄存器。uC/OS-HI能检测指针是否为 NULL、在ISR中调用的任务级服务是否允许、参数在允许范围内、配置选项的有效性、函 数的执行结果等。每一个 uC/OS-HI的API函数返回一个对应于函 数调用结果的错误代号23: uC/OS-III有内置性能测量功能。 能测量每一个任务的执行时 间,每个

5、任务的堆栈使用情况, 任务的执行次数,CPU的使用情 况,ISR到任务的切换时间,任务到任务的切换时间, 列表中的 对象的峰值数,关中断、锁调度器平均时间等。24、 uC/OS-III被设计于能够根 CPU的架构被优化uC/OS-III所用 的大部分数据类型能够被改变, 以更好地适应CPU固有的字大小。优先级调度法则可以通过编写一些汇编语言而获益于一些 特殊的指令如位设置、位清除、计数器清零指令(CLZ )、find-first-one(FF1) 指令25、 uC/OS-III中所有的挂起服务都可以有时间限制, 预防死锁。26、 uC/OS-III有时基任务, 时基ISR触发时基任务。uC/O

6、S-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、 每个任务需要创建自己的堆栈。 堆栈的数据类型 CPU_STK。堆栈可以被静态地分配或者通过 malloc()动态地分配。若任务将不会被删除,堆栈将

7、一直被使用。32、 在大部分处理器中, 中断在启动时是关闭的。 无论如何, 在启动时关闭所有的外设中断是最安全的。33、 uC/OS-III须创建空闲任务 OS_ldleTask (), 当没有其他任 务运行时就运行空闲任务。根 据配置文件中所uC/OS-HI会 创建统务OS_StatTask()、定时器任务 OS_TmrTask()、 中 断队列处理任务OS_IntQTask()。34、 OSTaskCreate()的第四个参数,第一次被调用时 OSTaskCreate()接收这个变量, 传递给所创建的任务中的唯一参数p_arg。该参数可以是任意类型的指针。35、 参数值越小优先级越高。可以

8、设置优先级数值为1到0S_CFG_PRI0_MAX-2。要避免使用优先级 #0和优先级0S_CFG_PRI0_MAX-1 。 因 为 这些是为 uC/OS-lll 保留的。36、 任务的堆栈大(以CPU_STK为数据类型而不是字节)。例 如,如果要分配1KB大小的堆栈空间,因为 CPU_STK是32位 的,所以这个其值为256.37、 )所有的uC/OS-HI任务需要被设置为无限循环。38、 互斥信号量(mutex)是一个内核对象,用于保护共享资源。 任 务要访问共享资源就必须先获得 mutex。mutex的拥有者使用完这 个资源后就必须释放这个 mutex。39、 消息队列是一个内核对象,I

9、SR或任务可以直接发送消息到另 一个任务。 发送者制定一个消息并将其发送到目标任务的消息 队 列。目标任务等待消息的到达。40、 定义消息队列可接受消息的个数。 这个值必须大于0。如果消息者发送消息数超过了消息接收任务的承受能力。那么消息将会被 丢失。可以通过增加消息队列的大小或者提供消息接收任务的优先级 提升其承受能力。41、uC/OS-III定义了一个进入临界段的宏和两个出临界段的宏(退出临界段后是否调用调度器)。42、测得消息是什么时候被发送的, 用户就能测得任务接收这个消息所用的时间。 读取现在的时间戳并减去消息被发送时的时 戳。需注意的是,消息被发送时, 等待消息的任务可能不会立即接

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

11、数减少。46、 一个任务可以创建其它任务( 调OSTaskCreate()、停止或 者恢复其它(调用 OSTaskSuspned()和 OSTaskResume()、提交 信号量到其它任务、发送消息到其它任务、提供共享资源等。换 句话说,任务不是只被限制于 等待事件”。47、 在嵌入式系统中动态地分配堆栈是被允许的,但是,一旦堆栈被动态分配,它就不能被回收。 换句话说,对于有些不需要被删除的任务,动态分配它们的堆栈是一种很好的解决方法。48、 可以人工地计算出任务需要的堆栈空间大小,逐级嵌套所有可能 被调用的函数, 添加被调用函数中所有的参数, 添加上下文切换时 的CPU寄存器空间, 添加切换

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

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

14、2个内部的任务(OS_IdleTask()和 OS_TickTask(), 3 个可选择的任务(OS_StatTask(),OS_TmrTaks(), OSntQTask()。这些可选择的任务在编译时由OS_CFG.H中的配置决定。55、 当CPU中没有其它就绪任务运行时,空闲会被运行。空闲任务 是一个无限循环的不会等待任何事件的任务。空闲任务的每次循环, 都会调用OSIdleTaskHook()函数,这个函数提供给用户扩展应用, 如让处理器进入低功耗模式等。56、)使用硬件定时器并被设置为以 10到1000Hz之间的频率产生时基中断,时基中断并不是一定要用 CPU产生,事实上,它可以从其他的

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

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

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

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

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

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

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

22、方式保护共享资源。只有任务才允许使用信号量,ISR是不允许的。 用信号量保护共享资源不会导致中断延迟。 当任务在执行信号量所保 护的共享资源时,ISR或高优先级任务可以抢占该任务。74、 信号量经常被过度使用。很多情况下,访问一个简短的共享资源 时不推荐使用信号量,请求和释放信号量会消耗 CPU时间。通过关/ 开中断能更有效地执行这些操作。 信号量会导致一种严重的问题:优 先级反转。75、 优先级反转是实时系统中的一个常见问题, 仅存在于基于优先级 的抢占式内核中。uC/OS-HI支持一种特殊类型的二值信号量叫做 mutex,用于解决优先级反转问题。76、 死锁,就是两个任务互相等待对方所占用

23、的资源的情况。除一般 的防死锁方式外,uC/OS-Il还可以在申请信号量或 mutex时允许设置 其期限,这样能防止死锁,但是同样的死锁可能稍后再次出现。77、 uC/OS-III中用于同步的两种机制:信号量和事件标志组。两个 任务间可以用一个信号量实现单向同步,用两个信号量实现双向同步。当任务要与多个事件同步时可以使用事件标志。 若其中的任意一个事件发生时任务被就绪,叫做逻辑或(OR)。若所有的事件都发生时 任务被就绪,叫做逻辑与(AND )。78、 有些情况下任务或ISR与另一个任务间进行通信,这种信息交换 叫做作业间的通信。可以有两种方法实现这种通信:全局变量、发送 消息。需注意的是:任

24、务与ISR通信只能通过全局变量。如果全局变 量被ISR改变,任务将不会知道全局变量被改变,除非该任务检测该 变量或者ISR标记任务告知该变量被改变。79、消息可以被发送到媒介一消息队列中,也可以直接发送给任务,因为uC/OS-HI中每个任务都有其内建的消息队列。如果多个任务等 待这个消息时建议将该消息发送到外部的消息队列。 当只有一个任务 等待该消息时建议直接将消息发送给任务。80、 消息中包含一个指向数据的指针、该数据的大小、时间戳变量。该指针可以指向数据区域甚至是一个函数。 当然,消息的发送方和消息的接收方都应该知道消息所包含的意义。81、 消息队列是先入先出模式(FIFO)。然而,uC/

25、OS-HI也可以将 其设置为后入先出模式(LIFO)。若任务或ISR发送紧急消息给另一 个任务时,后入先出模式是非常有用的,在这种情况下,该紧急消息绕过消息队列中的其他消息。82、任务A发送多个消息给任务B,如果更高优先级的任务抢占了 任务B,那么任务A所存放在消息队列中的数据就可能被溢出。 解决 这个问题的一种方法是在处理中添加流量控制: 所有任务在发送消息给任务B之前必须获得信号量。任务B消息队列的空余量为多少, 信号量计数值就为多少。83、任务可以等待多个内核对象。然而,uC/OS-HI只允许任务同时 等待多个信号量或消息队列。换句话说,不能同时等待多个事件标志 组或mutex。但这将花费uC/OSJII较多时间去处理。84、可以通过使用编译器提供的函数 malloc()和free()动态地分配和释放内存快。然而,在嵌入式实时系统中使用 malloc()和free()可能是非常危险的。因为它可能会导致很多内存碎片 被仅会导致个存可以分配的必须返回同于存存分内存分的数据存这根可需方

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1