uC/OS-III
西贡小傻
这个作者很懒,什么都没留下…
展开
-
uC/OS-III-2.6-控制块的理解
1.操作系统实质上就是一种管理软件。而所谓的管理,就是在了解管理对象的基本信息之后在需要时,按照某种规则对这些管理对象进行分配、调度等操作。对所有的被管理对象登记造册,建立一些管理用表并在这些表格中记录被管理对象的信息。在某种意义上说,操作系统就是由各种表格和对这些表格的操作组成的。 在操作系统中的每一个被管理的对象,不管这个对象是一个软件模块还是一个硬件装置,他都至少会有一个记录其基本信息的数...翻译 2018-07-01 21:44:53 · 200 阅读 · 0 评论 -
uC/OS-III-6.4-uC/OS-III任务管理
1.OSTaskCreate () 要使用 uC/OS 的任务必须先声明任务控制块和创建任务,调用 OSTaskCreate () 函数可以创建一个任务。 2.OSTaskSuspend () OSTaskSuspend () 函数用于挂起一个任务,令任务暂停运行。 任务可以多次调用 OSTaskSuspend() 对任务进行挂起操作,即一个任务被挂起是可以嵌套的,但是想要将任务脱离挂起状...转载 2018-07-25 09:10:33 · 410 阅读 · 0 评论 -
uC/OS-III-7.0-uC/OS-III就绪列表(优先级)
准备运行的任务被放置于就绪列表中。就绪列表包括2个部分:位映像组包含了优先级信息,一个表包含了所有指向就绪任务的指针。 1.优先级 图6-1到6-3显示了优先级的位映像组。它的宽度取决于CPU_DATA的数据类型( 见CPU.H), 它可以是8位、 16位、 32位。根据处理器相应地设定。 uC/OS-III支持多达OS_CFG_PRIO_MAX种不同的优先级( 见OS_CFG.H)。在...转载 2018-07-25 10:10:56 · 462 阅读 · 0 评论 -
uC/OS-III-7.1-uC/OS-III就绪列表
准备好运行的任务被放到就绪列表中, 如图6-1。就绪列表是一个数组( OSRdyList[]),它一共有OS_CFG_PRIO_MAX条记录,记录的数据类型为OS_RDY_LIST(见OS.H)。就绪列表中的每条记录都包含了三个变量 .Entries 、 .TailPtr 、 .HeadPtr。 .Entries中该优先级的就绪任务数。当该优先级中没有任务就绪 时, .Entries就会被...转载 2018-07-25 10:40:32 · 225 阅读 · 0 评论 -
uC/OS-III-7.2-uC/OS-III添加任务到就绪队列
1.uC/OS-III提供很多服务可以把任务添加到就绪列表中。 最明显的服务是OSTaskCreate(), 它通常创建准备运行的任务并将任务放入就绪列表中。如图6-6所示,就绪列表中该优先级中已经有两个任务了。OSTaskCreate()就会将这个任务插入到列表的未部。 ( 1).在调用OSTaskCreate()之前, 已经有两个任务在就绪列表中的该优先级中了。 ( 2).一个新的TC...转载 2018-07-25 10:45:34 · 344 阅读 · 0 评论 -
uC/OS-III-6.0-uC/OS-III任务管理
1.实时应用中一般将工作拆分为多个任务,每个任务都需要是可靠的。任务(也叫做线程)是简单的程序。单CPU中,在任何时刻只能是一个任务被执行。 2.uC/OS-III支持多任务且对任务数量没有限制, 任务数仅取决于处理器内存的大小(RAM)。多任务调度是任务间占用CPU的过程。 3.任务用于监控输入、更新输出、计算、循环控制、显示、读按钮和键盘、 与其它系统交流等。 4.任务看起来像 C函数...转载 2018-07-19 19:03:54 · 229 阅读 · 0 评论 -
uC/OS-III-6.1-uC/OS-III任务堆栈空间
1.设置任务优先级 嵌入式系统中的重要的应用应该被设置为高优先级,一些显示操作就应该被设置为低优先级。 然而, 由于实时系统的复杂性, 在大多数情况下任务的优先级是不能被事先确定的。多数系统中,不是所有的任务都是重要的,不重要的任务应该被设置为低优先级。 2.堆栈空间大小的确定 堆栈的大小取决于该任务的需求。设定堆栈大小时,你就需要考虑: 所有可能被堆栈调用的函数及其函数的嵌套层数, 相关局...转载 2018-07-21 17:53:04 · 248 阅读 · 0 评论 -
uC/OS-III-6.2-uC/OS-III内部任务管理(任务状态)
1.任务状态 从用户的观点来看,任务可以是有 5种状态,见图 5-6。展示了任务状态间的转换关系。 {休眠状态,就绪状态,运行状态,挂起状态,中断状态} (1).处于休眠状态的任务驻留于内存但未被uC/OS-III使能。通过调用OSTaskCreate()函数uC/OS-III创建任务。 任务代码是存在于ROM的。但需要用OSTaskCreate()函数通知uC/OS-III关于任务的相...转载 2018-07-21 20:07:31 · 752 阅读 · 0 评论 -
uC/OS-III-6.2-uC/OS-III内部任务管理(TCB)
任务控制块 TCB 1.任务控制块是被uC/OS-III用于维护任务的一个结构体。每个任务都必须有自己的 TCB。 uC/OS-III 在 RAM 中分配 TCB。当调用uC/OS-III提供的与任务相关的函数(以OSTask???()形式命名)时,任务的TCB地址需会被提供给该函数。 TCB的结构定义于OS.H中,如列表 5-3所示(在 OS.H中代码是有注释的)。 TCB中的一些变量可以根据...转载 2018-07-23 08:52:46 · 575 阅读 · 0 评论 -
uC/OS-III-5.0-uC/OS-III临界段
1.临界段 (1).临界段代码,也称作临界域,是一段不可分割的代码。 uC/OS-III中包含了很多临界段代码。 如果临界段可能被中断, 那么就需要关中断以保护临界段。 如果临界段可能被任务级代码打断, 那么需要锁调度器保护临界段。 (2).uC/OS-III中的临界段的保护方法决定于 ISR中对消息的处理方式。 (3).如 果OS_CFG_ISR_POST_DEFERRED_EN被设为0(...转载 2018-07-19 10:11:11 · 182 阅读 · 0 评论 -
uC/OS-III-4.2-uC/OS-III多任务应用
1.app.c: ( 1) .分别为每个任务分配一个OS_TCB。 (2). 斥信号量( mutex)是一个内核对象(一个结构体),用于保护共享资源。任务要访问共享资源就必须先获得 mutex。 mutex的拥有者使用完这个资源后就必须释放这个mutex。 这个例子示范了这个过程。 (3). 消息队列是一个内核对象, ISR或任务可以直接发送消息到另一个任务。发送者制定一个消息并将其发送...转载 2018-07-18 17:49:35 · 365 阅读 · 0 评论 -
uC/OS-III-3.0-uC/OS-III简介
1.OS-III是一个第 3代的系统内核,支持现代的实时内核所期待的大部分功能。 例如资源管理, 同步, 任务间的通信等等。然而, uC/OS-III提供的特色功能在其它的实时内核中是找不到的, 比如说完备的运行时间测量性能, 直接地发送信号或者消息到任务,任务可以同时等待多个内核对象等。 2.在 uC/OS-II中很少使用的功能已经被删除或者被更新, 添加了更高效的功能和服务。 其中最有用的功...翻译 2018-07-03 16:03:59 · 3061 阅读 · 0 评论 -
uC/OS-III-3.1-uC/OS-III的特点:
1.C/OS-III是一个可扩展的, 可固化的, 抢占式的实时内核, 它管理的任务个数不受限制。 它是第三代内核, 提供了现代实时内核所期望的所有功能包括资源管理、同步、内部任务交流等。 uC/OS-III也提供了很多特性是在其他实时内核中所没有的。比如能在运行时测量运行性能, 直接得发送信号或消息给任务, 任务能同时等待多个信号量和消息队列。 2.特点 (1).源代码: uC/OS-III完...转载 2018-07-16 19:48:16 · 379 阅读 · 0 评论 -
uC/OS-III-4.0-uC/OS-III目录结构
本文章都是基于学习野火STMF4系列的开发板的学习做的,大部分都是开发手册的内容,做笔记用,具体请参考野火官方的开发手册。 1. uC/OS-III 文件结构 ①配置文件,通过定义这些文件里宏的值可以轻易地裁剪 uC/OS-III 的功能。 ②用户应用文件, 定义和声明应用任务。 ③内核服务文件,其代码与 CPU 无关,可以不做任何修改移植到任何 CPU。 ④底层函数库,比如字符串的...转载 2018-07-17 15:38:49 · 337 阅读 · 0 评论 -
uC/OS-III-6.3-uC/OS-III内部任务(时基任务OS-TickTask())
几乎所有的实时系统都需要有一个能提供周期性时间的时间源,叫做时基周期或系统周期。 uC/OS-III的时基周期处理程序封装在OS_TICK.C文件中。 OS_TickTask()任务被uC/OS-III创建, 其优先级是用户可配置的。(通过配置OS_CFG_APP.H中的OS_CFG_TICK_TASK_PRIO)。通常设置其优先级较高。 事实上, 它的优先级应该设置比重要任务的优先级稍低。 ...转载 2018-07-23 10:37:41 · 818 阅读 · 0 评论 -
uC/OS-III-6.3-uC/OS-III内部任务(统计任务 OS_StatTask())
1.这个任务能够统计总的CPU使用率(0到100%),每个任务的CPU使用率( 0到100%),每个任务的堆栈使用量。 2.统计任务在uC/OS-III中是可选的,当设置OS_CFG.H中的OS_CFG_STAT_TASK_EN为1时,统计任务的代码会被包含在程序中。当然, 统计任务的优先级和它的任务堆栈大小在OS_CFG_APP.H中配置。 3.最好在main()中只创建的一个任务,通常叫做...转载 2018-07-23 11:08:15 · 744 阅读 · 0 评论 -
uC/OS-III-6.3-uC/OS-III内部任务(定时器任务 OS_TmrTask())
{这节所说的定时器都是软件定时器} 1.uC/OS-III为用户提供了定时器任务,相应代码在OS_TMR.C中。定时器任务是可选的,通过将OS_CFG.H中的OS_CFG_TMR_EN设置为1使能。当设置为1时,它的代码才会被添加到最终代码中。 2.当定时器任务递减计数变量到0时,任务中就会调用回调函数。回调函数是一个函数, 它被用户定义。 因此, 回调函数可以用来开启或关闭LED、电机、或者...转载 2018-07-23 11:22:53 · 442 阅读 · 0 评论 -
uC/OS-III-6.3-uC/OS-III内部任务(中断处理任务 OS_IntQTask())
1.当设置OS_CFG.H中的OS_CFG_ISR_POST_DEFERRED_EN为1时, uC/OS-III就会创建一个任务,它的作用是尽快完成ISR中对post函数的调用, 将信号量、消息等对象先存在媒介中, 退出中断后,由中断处理任务完成将这些对象提交给任务。 2.正如“ 临界段” 所介绍的, uC/OS-III通过开启/关闭中断、锁/开锁调度器管理临界段。如果选择后一种方法, ISR调...转载 2018-07-23 11:34:40 · 834 阅读 · 0 评论 -
uC/OS-III-4.1-uC/OS-III单任务应用
1.单任务应用 app.c文件: (1).APP_CFG.H 是用于配置的头文件。例如, APP_CFG.H 中包含的#define常量确定了任务优先级,堆栈大小,以及其他特性。 BSP.H 是 BSP 的头文件,包含了 #define 及函数原型如BSP_Init(),,SP_LED_On(), OS_TS_GET()等。 OS.H是uC/OS-III的主要头文件,包含了以下头文件:...转载 2018-07-18 16:07:24 · 203 阅读 · 0 评论 -
uC/OS-III-6.3-uC/OS-III内部任务(空闲任务OS_IdleTask())
1.内部任务-空闲任务 在uC/OS-III初始化的时候,它会创建至少2个内部的任务(OS_IdleTask()和OS_TickTask()), 3个可选择的任务 ( OS_StatTask(),OS_TmrTaks(), OS_IntQTask())。这些可选择的任务在编译时由OS_CFG.H中的配置决定。 2.空闲任务 OS_IdleTask() OS_IdleTask()是uC/OS-...转载 2018-07-23 09:52:43 · 827 阅读 · 0 评论