ucos-ii
fillthesky
雄关漫道真如铁,而今迈步从头越。
展开
-
uc/os-ii开关中断
ucos是利用禁止中断来保护临界段的。 ucos给我们提供了三种方法: 一:直接关中断和直接开中断。 二:先把原来的中断状态压入栈中,然后再关闭中断。恢复时直接从栈中返回原来存储的中断状态。 三:先保存原来的中断状态到一个变量中,然后再关闭中断。在STM32F103上移植uC/OSII采用第三种方法,代码如下:#if OS_CRITICAL_METHOD == 3#define OS_E原创 2015-06-29 15:40:57 · 992 阅读 · 0 评论 -
uc/os-ii消息队列
使用消息队列可以在任务之间传递多条消息。消息队列由三个部分组成:事件控制块、消息队列和消息。 消息队列的数据结构如下图所示。从图中可以看到,消息队列相当于一个共用一个任务等待列表的消息邮箱数组,事件控制块成员OSEventPtr指向了一个叫做队列控制块(OS_Q)的结构,该结构管理了一个数组MsgTbl[ ],该数组中的元素都是一些指向消息的指针。原创 2015-07-03 16:59:36 · 733 阅读 · 0 评论 -
uc/os-ii消息邮箱
消息邮箱是一种通信机制,它能使任务或中断服务向另一个任务发送一个指针型的变量,这个指针指向一个包含指定“消息”的数据结构。消息邮箱发送的不是消息本身,而是消息的地址指针。使用消息邮箱之前,必须先建立消息邮箱,并且要指定指针的初始值。一般情况下,这个初始值是NULL,但也可以在初始化时,就使其在最开始就包含一条消息。 消息邮箱主要用于两种目的:① 通知一个事件的发生;② 作二值信号量用。原创 2015-07-03 13:20:14 · 888 阅读 · 0 评论 -
uc/os-ii互斥型信号量
互斥信号量(Mutual Exclusion Semaphores)也称为Mutex,用于实现对共享资源的独占处理,互斥信号量也是一个二值信号量,利用它可以降解优先级反转问题。原创 2015-07-03 10:06:35 · 1783 阅读 · 0 评论 -
uc/os-ii任务延时
μC/OS-Ⅱ的任务是一个无限循环,由于μC/OS-Ⅱ是可剥夺型内核,如果高优先级任务不主动挂起,低优先级任务就永远无法取得运行权,最高优先级任务将独占CPU的使用权。因此,μC/OS-Ⅱ规定:除了永不挂起的空闲任务外,其它所有的任务都要在合适的时候调用系统服务函数,自我挂起,暂时放弃CPU使用权,使低优先权任务能够得以运行。原创 2015-07-02 13:58:37 · 1401 阅读 · 0 评论 -
uc/os-ii信号量
信号量有两种类型:一种是只有0和1两种值的信号量,称为二值信号量;另一种是可以有多种值的信号量,称为计数式信号量。计数式信号量的值的大小取决于信号量的数据类型,如若是8位整型变量,则其值可以是0~255;若是16位整型变量,则其值可以是0~65 535。 µC/OS-Ⅱ的信号量由两个部分组成:一个是信号量的计数值,范围是0~65 535;另一个是由等待该信号量的任务组成的等待任务列表。原创 2015-07-02 20:28:03 · 561 阅读 · 0 评论 -
uc/os-ii事件控制块
任务间的同步依赖于任务间的通信。在μC/OS-II中,使用信号量、互斥信号量、消息邮箱、消息队列、事件标志组这些被称作事件的中间环节来实现任务之间的通信的。为了把描述事件的数据结构统一起来,μC/OS-II使用叫做事件控制块ECB的数据结构来描述诸如信号量、互斥信号量、消息邮箱、消息队列、事件标志组这些事件。原创 2015-07-02 16:21:20 · 785 阅读 · 0 评论 -
uc/os-ii任务的挂起与恢复
任务挂起函数OSTaskSuspend()无条件挂起一个任务,它必须和任务恢复函数OSTaskResume()成对出现。任务一旦被挂起,被挂起的任务就只能通过其它任务调用OSTaskResume()函数来恢复。原创 2015-07-01 15:29:51 · 771 阅读 · 0 评论 -
uc/os-ii任务与任务管理
把一个大型任务分解成多个小任务,然后在计算机中通过运行这些小任务,最终达到完成大任务的目的。在μC/OS-II中,与上述那些小任务对应的程序实体就叫做“任务”(实质上是一个线程–有私有空间的任务叫做进程,没有私有空间的任务叫做线程),μC/OS-II就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。原创 2015-07-01 10:59:36 · 572 阅读 · 0 评论 -
uc/os-ii统计任务
uC/OS-II定义了两个系统任务,空闲任务与统计任务。空闲任务OSTaskIdle()是μC/OS-Ⅱ必不可少的系统函数,当没有其它任务进入就绪态时,该任务立即转入运行态。空闲任务的优先级永远设为最低,即OS_LOWEST_PRIO,永远不被挂起,也不能被删除。原创 2015-06-30 21:27:32 · 1673 阅读 · 0 评论 -
uc/os-ii任务调度的锁定与解锁
调度器上锁函数OSSchedlock()的功能是用于禁止任务调度,使任务保持对CPU的控制权。调度器开锁函数OSSchedUnlock()的功能是解除对任务调度的禁止。 调度器上锁和开锁的实现原理是:对全局变量锁定嵌套计数器OSLockNesting进行操作,OSLockNesting跟踪OS SchedLock() 函数被调用的次数,允许嵌套深度达255层。原创 2015-06-30 16:15:03 · 7697 阅读 · 1 评论 -
uc/os-ii删除任务
uC/OS-II中与删除任务相关的函数有两个,删除任务函数OSTaskDel() 和请求删除任务函数OSTaskDelReq() 。原创 2015-07-01 14:34:33 · 726 阅读 · 0 评论 -
uc/os-ii任务调度(二)
任务调度关键是任务运行环境的切换。任务运行环境包括以下: 1. 程序的断点地址(PC) 2. 程序状态字寄存器(xPSR) 3. 通用寄存器内容 4. 任务堆栈指针(SP) 其中1、2、3保存在任务堆栈中,4保存在任务的任务控制块中。 程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指针PSP。原创 2015-06-30 15:47:45 · 885 阅读 · 0 评论 -
uc/os-ii任务就绪表
就绪表就是用于存放任务准备就绪标志的列表,它是为了保证每次任务切换时间的可确定性、一致性和高速性而设置的,整个算法由两个变量、一个表格和三个程序组成。原创 2015-06-29 21:55:48 · 327 阅读 · 0 评论 -
uc/os-ii任务调度(一)
多任务操作系统的核心工作就是任务调度。所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器。μC/OS-II进行任务调度的思想是 “近似地每时每刻总是让优先级最高的就绪任务处于运行状态” 。为了保证这一点,μC/OS-II在系统或用户任务调用系统函数及执行中断服务程序结束时总是调用调度器,来确定应该运行的任务并运行它 。原创 2015-06-29 22:35:18 · 1104 阅读 · 0 评论 -
uc/os-ii信号量集
在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。μC/OS-II为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。原创 2015-07-04 10:00:32 · 673 阅读 · 0 评论