3.1-uC/OS-III的特点:
1.C/OS-III是一个可扩展的, 可固化的, 抢占式的实时内核, 它管理的任务个数不受限制。 它是第三代内核, 提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。 uC/OS-III也提供了很多特性是在其他实时内核中所没有的。比如能在运行时测量运行性能, 直接得发送信号或消息给任务, 任务能同时等待多个信号量和消息队列。
2.特点
(1).源代码: uC/OS-III完全根据 ANSI-C标准写的。
(2).用程序接口( API): uC/OS-III是很直观的。
(3).抢占式多任务处理: uC/OS-III是一个抢占式多任务处理内核, 因此, uC/OS-III正在运行的经常是最重要的就绪任务.
(4).时间片轮转调度: uC/OS-III允许多个任务拥有相同的优先级。 当多个相同优先级的任务就绪时,并且这个优先级是目前最高的。uC/OS-III会分配用户定义的时间片给每个任务去运行。每个任务可以定义不同的时间片。当任务用不完时间片时可以让出 CPU给另一个任务.
(5).快速响应中断: uC/OS-III 有一些内部的数据结构和变量。uC/OS-III保护临界段可以通过锁定调度器代替关中断。因此关中断的时间会非常少。这样就使 uC/OS-III可以响应一些非常快的中断源了。
(6).确定性的: uC/OS-III的中断响应时间是可确定的, uC/OS-III提供的大部分服务的执行时间也是可确定的.
(7).扩展的:根据应用的需求,代码大小可以被调整。 编译时通过调整uC/OS-III源代码中的大约40个#define(见 OS_CFG.H)可以在添加或移除一些功能。 uC/OS-III的服务还提供一些实时检查功能。特别的, uC/OS-III能检传递的参数是否为NULL指针, ISR是否就绪了任务级服务。 参数有允许范围, 指定选项都是有用的。 检测功能可以被关闭(在编译时)以提供更好的性能和缩减代码大小。实际上,可扩展的uC/OS-III支持更广泛的应用和项目。
(8).易移植的: uC/OS-III可以被移植到大部分的 CPU架构中。大部分的支持uC/OS-II的器件通过改动就能支持uC/OS-III。
(9).可固化的: uC/OS-III专为嵌入式系统设计, 它可以跟应用程序代码一起被固化。
(10).可实时配置的: uC/OS-III允许用户在运行时配置内核。特别的,所有的内核对象如任务、堆栈、信号量、事件标志组、消息队列、消息、互斥信号量、内存分区、软件定时器等都是在运行时分配的,以免在编译时的过度分配。
(11).任务数无限制: uC/OS-III对任务数量无限制。 实际上, 任务的数量限制于处理器能提供的内存大小。每一个任务需要有自己的堆栈空间, uC/OS-III在运行时监控任务堆栈的生长。 uC/OS-III对任务的大小无限制.
(12).优先级数无限制: uC/OS-III对优先级的数量无限制。 然而, 配置uC/OS-III的优先级在32到256之间已经满足大多数的应用了。
(13).内核对象数无限制: uC/OS-III支持任何数量的任务、信号量、 互斥信号量、 事件标志组、 消息队列、 软件定时器、 内存分区。 用户在运行时分配所有的内核对象。
(14).服务: uC/OS-III提供了高档实时内核所需要的所有功能, 例如任务管理、时间管理、信号量、事件标志组、互斥信号量、消息队列、软件定时器、内存分区等。
(15).互斥信号量( Mutexes): 互斥信号量用于资源管理。它是一个内置优先级的特殊类型信号量, 用于消除优先级反转。 互斥信号量可以被嵌套,因此,任务可申请同一个互斥信号量多达250次。当然,互斥信号量的占有者需要释放同等次数。
(16).嵌套的任务停止: uC/OS-III允许任务停止自身或者停止另外的任务。停止一个任务意味着这个任务将不再执行直到被其他的任务恢复。 停止可以被嵌套到250级。 换句话说, 一个任务可以停止另外的任务多达250次。 当然, 这个任务必须被恢复同等次数才有资格再次获得CPU。
(17).软件定时器: 可以定义任意数量的一次性的、周期性的、或者两者兼有的定时器。 定时器是倒计时的, 执行用户定义的行为一直到计数减为0。 每一个定时器可以有自己的行为, 如果一个定时器是周期性的,计数减为0时会自动重装计数值并执行用户定义的行为。
(18).挂起多个对象: uC/OS-III允许任务等待多个事件的发生。特别的,任务可以同时等待多个信号量和消息队列被提交。等待中的任务在事件发生的时候被唤醒.
(19).任务信号量: uC/OS-III允许ISR(中断服务程序)或者任务直接地发送信号量给其它任务。这样就避免了必须产生一个中间级内核对象如一个信号量或者事件标志组只为了标记一个任务。提高了内核性能。
(20).任务消息: uC/OS-III允许ISR或者任务直接发送消息到另一个任务。这样就避免产生一个消息队列,提高了内核性能。
(21).任务寄存器:每一个任务可以拥有用户可定义的任务寄存器,不同于CPU寄存器。
(22).错误检测: uC/OS-III能检测指针是否为NULL、 在ISR中调用的任务级服务是否允许、 参数在允许范围内、 配置选项的有效性、 函数的执行结果等。每一个uC/OS-III的API函数返回一个对应于函数调用结果的错误代号。
(23).内置的性能测量: uC/OS-III有内置性能测量功能。 能测量每一个任务的执行时间,每个任务的堆栈使用情况,任务的执行次数, CPU的使用情况, ISR到任务的切换时间,任务到任务的切换时间, 列表中的峰值数,关中断、锁调度器平均时间等。
(24).可优化: uC/OS-III 被设计于能够根据 CPU 的架构被优化。uC/OS-III所用的大部分数据类型能够被改变, 以更好地适应CPU固有的字大小。
(26).死锁预防: uC/OS-III中所有的挂起服务都可以有时间限制, 预防死锁。
(27).任务级的时基处理: uC/OS-III有时基任务,时基 ISR触发时基任务。 uC/OS-III使用了哈希列表结构,可以大大减少处理延时和任务超时所产生的开支。
(28).用户可定义的钩子函数: uC/OS-III允许程序员定义 hook函数,hook函数被uC/OS-III调用。 hook函数允许用户扩展 uC/OS-III的功能。有的 hook函数在任务切换的时候被调用,有的在任务创建的时候被调用,有的在任务删除的时候被调用。
(29).时间戳:为了测量时间, uC/OS-III需要一个 16位或者 32位的时时间戳计数器。这个计数器值可以在运行时被读取以测量时间。例如: 当ISR提交消息到任务时, 时间戳计数器自动读取并保存作为消息。 当接收者接收到这条消息, 时间戳被提供在消息内。 通过读取现在的时间戳,消息的响应时间可以被确定。
(30).嵌入的内核调试器:这个功能允许内核调试器查看uC/OS-III的变量和数据结构通过一个用户定义的通道。(但是只能在调试器遇到断点的时候查看)。 uC/OS-III内核也支持uC/Probe( 探针) 在运行时显示信息。
(31).对象名称: 每个uC/OS-III的内核对象有一个相关联的名字。这样就能很容易的识别出对象所指定的作用。分配一个ASCII码的名字给任务、 信号量、 互斥信号量、 事件标志组、 消息队列、 内存块、 软件定时器。对象的名字长度没有限制,但是必须以空字符结束。
3.1-uC/OS-III的特点:的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- uc/os 任务删除
问题描述: uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注: 如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- 关于uC/OS的简单学习(转)
1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...
- STM32F40G-EVAL_UC/OS III
micrum官网下载uc/os程序包: 包含文件cotex_M4.h:
- 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理
LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...
- 【原创】uC/OS II 任务切换原理
今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...
随机推荐
- 一、Bitcoin比特币与BlockChain区块链技术
一.比特币历史 2008 年 10 月 31 日,一个网名叫中本聪(英文翻译过来滴)的家伙发布比特币唯一的白皮书:<Bitcoin:A Peer-to-PeerElectronic Cash S ...
- mysql 第二高薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | ...
- 5 -- Hibernate的基本用法 --6 深入Hibernate映射
Hibernate提供三种方式将POJO变成PO类: 1. 使用持久化注解(以JPA标准注解为主,如果有一些特殊要求,则依然需要使用Hibernate本身提供的注解). 2. 使用JPA2 提供的XM ...
- Redis集成到Spring做mybatis做二级缓存
一.原理: 要缓存的 Java 对象必须实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis,比如本文中的 com.defonds.bdp.city.bean. ...
- isinstance函数
isinstance isinstance(object, classinfo) 判断实例是否是这个类或者object是变量 classinfo 是类型(tuple,dict,int,float,bo ...
- day_6.26 反射
#utf-8 #2018-6-26 17:58:36 #反射,, 应用:从类里面获取字符串 #在python中万物皆对象 class Teacher: dic = {"查看学生信息" ...
- callback 模式
回调,是一种机制,同时也是一种设计模式. 我们定义一个函数,让能够回调 import _products from './products.json' const TIMEOUT = 100 cons ...
- LogisticRegression 和 LogisticRegressionCV
在scikit-learn中,与逻辑回归有关的主要是这3个类.LogisticRegression, LogisticRegressionCV 和logistic_regression_path.其中 ...
- Missing artifact com.h2database:h2:jar:1.4.197
之前OK的项目再次打开pom上报错: 一起出现的现象: maven库中这个包和H2数据库的包每次项目右键→maven→update project都会产生.lastupdate文件.原来是以前从mav ...
- PAT甲级1061 Dating
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805411985604608 题意: 给定四个字符串. 前两个字符串 ...