uCos-II
文章平均质量分 72
seven-soft
十几年工作经验,软件破解、软件反编译、网络抓包;精通c、c++、java语言,熟悉eclipse、Microsoft Visual Studio、XCODE 开发环境,精通wince和Android开发。精通嵌入式CPU软件开发。
展开
-
软实时和硬实时操作系统的区别
操作系统按硬件范畴的表现形式分:芯片级嵌入(含程序或算法的处理器)、模块级嵌入(系统中的某个核心模块)系统级嵌入。 按软件范畴实时性要求分:非实时系统、软实时系统、硬实时系统。对实时系统,他的正确性不仅与系统的逻辑正确性相关,而且与系统响应时间相关,如果系统响应不能满足时限的要求,即使它能得到正确的输出,我们也只能说他是一个失败的响应。“软”意味着如果没有满足指定的时间约束并不会导致灾难性后原创 2016-07-10 16:55:27 · 16994 阅读 · 1 评论 -
uC/cos-II系统函数管理
任务管理 1 OSTaskCreate() 建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务可以为无限循环的结构。函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);参数说明:task原创 2016-07-13 10:00:09 · 1454 阅读 · 0 评论 -
浅析μC/OS-ⅡAPI的设计思想及实现机制
任何一个操作系统都会提供大量的API供程序员使用,μC/OS-Ⅱ也不例外。由于μC/OS-Ⅱ面向的是嵌入式开发,并不要求大而全,所以内核提供的 API也就大多和多任务息息相关。本文通过分析μC/OS-Ⅱ中提供的API来引出μC/OS-Ⅱ中API的设计思路和实现机制。 API全称Application Programming Interface,中文是应用程序编程接口的意思。API是操作系原创 2016-07-13 09:58:47 · 1005 阅读 · 0 评论 -
UC/OS II任务管理
UC/OS 初始化 在调用μC/OS-Ⅱ的任何其它服务之前,μC/OS-Ⅱ要求用户首先调用系统初始化函数OSIint()。 OSIint()初始化μC/OS-Ⅱ所有的变量和数据结构(见OS_CORE.C)。 OSInit()建立空闲任务OSTaskIdle() ,优先级总是最低的 如果统计任务允许OS_TASK_STAT_EN和任务原创 2016-07-13 09:57:55 · 838 阅读 · 0 评论 -
μC/OS-II的任务切换机理及中断调度优化
文章讲了UCOS最核心的内容,可以说基本上是全部,这对于我们理解UCOS的工作原理很有意义,希望搞这方面的人可以消化消化,虽然内容有点老了,但是是很基础的东西,对于做更高层次的开发非常有好处! 引 言:在嵌入式操作系统领域,由Jean J. Labrosse开发的μC/OS,由于开放源代码和强大而稳定的功能,曾经一度在嵌入式系统领域引起强烈反响。而其本人也早已成为了嵌入式系统会议(原创 2016-07-13 09:57:02 · 1795 阅读 · 0 评论 -
μC/OS-Ⅱ内核调度分析
一. 内核概述: 多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以 大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用 量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间原创 2016-07-13 09:50:37 · 1469 阅读 · 0 评论 -
μC/OS-Ⅱ之任务设计
在用户任务函数中,必须包含至少一次对操作系统服务函数的调用;否则比其优先级低的任务将无法得到运行机会。这是用户任务函数与普通函数的明显区别。任务函数的结构按任务的执行方式可以分为三类:单次执行类、周期执行类和事件触发类。单次执行类:任务在创建后只执行一次,执行结束后即自行删除;采用创建任务函数来启动。void MyTask(void *pdata){原创 2016-07-13 09:47:53 · 440 阅读 · 0 评论 -
μC/OS-Ⅱ之任务控制块、任务就绪表
任务其实就是一个线程,或者更通俗点说就是一个函数和与之相关联的一些数据结构构成的一个实体,可执行程序单元。任务的特性:动态性:就绪态、运行态、等待态(挂起态、阻塞态)。一个任务的开始运行并不代表着一只占有CPU的使用权。独立性:表现为逻辑上的“平等性”和信息传输的“异步性”。并发性:“已经就绪的高优先级任务”可以剥夺另一个“正在运行的低优先级任务”的运行权而进入运行原创 2016-07-13 09:45:15 · 653 阅读 · 0 评论 -
μC/OS-Ⅱ之任务控制块、任务就绪表
μC/OS-Ⅱ中任务控制块分为两个部分:1、 空任务链表因为此链表中这些控制块还没有与具体任务相关联,所以叫做空任务链表。大小为μC/OS-Ⅱ.H中定义的OS_MAX_TASKS + OS_N_SYS_TASKS(即用户任务最大数+系统任务总数)个。其初始化由系统初始化函数OSInit()完成。其头指针为OSTCBFreeList,其为一个OS_TCB类型的数组。原创 2016-07-13 09:33:28 · 582 阅读 · 0 评论 -
uCOS-II任务机制
1.任务是一个无返回的无穷循环。uc/os-ii总是运行进入就绪状态的最高优先级的任务。2. 任务是如何调度(切换)的?因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。所以,确定哪个任务优先级最高,下面该哪个任务运行,这个工作就是由调度器(scheduler)来完成的。任务级的调度是由函数OSSched()完成的,而中断级的调度是由函数 OSIntExt()完成。对原创 2016-07-13 10:00:51 · 439 阅读 · 0 评论 -
uCOS-II任务调度过程
uC/OS-II的任务一般格式为:void TASKn(void *pdata){ pdata = pdata; while (1) { OSTimeDly(OS_TICKS_PER_SEC); } } ucos-II是基于任务优先级抢占式任务调度法的原创 2016-07-13 10:01:36 · 534 阅读 · 0 评论 -
ucosii之任务的同步与通信
为了把描述事件的数据结构统一起来,ucosii使用了事件控制块ECB的数据结构来描述诸如信号量、邮箱、消息队列等事件。任务或中断服务子程序可以通过事件控制块ECB来向另外的任务发信号。用于通信的数据结构叫事件控制块。对事件控制块操作的函数有4个:(XXX为信号量,邮箱或消息队列等)事件控制块初始化函数OS_EventWaitListInit(),该函数被OS原创 2016-07-14 10:02:30 · 546 阅读 · 0 评论 -
uCOS II 之事件控制块学习
一。 事件控制块ECB数据结构: typedef struct { INT8U OSEventType; //事件类型 INT8U OSEventGrp; //等待任务所在的组 INT16U OSEventCnt; //当事件是信号量时的计数器 void *OSEventPtr; //指向消息或消息队列的指针 INT8U OSE原创 2016-07-13 10:29:38 · 451 阅读 · 0 评论 -
uCOS-II 常用函数参考手册
任务管理 1 OSTaskCreate() 建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务可以为无限循环的结构。函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);参数说明:t原创 2016-07-13 10:28:50 · 3110 阅读 · 0 评论 -
ucos-ii 信号量的使用
信号量使用主要涉及三个函数: OSSemCreat(), OSSemPend(), OSSemPost(); 第一个负责建立一个信号量,同时需要的参数是设定信号量的值;第二个是等待该信号量,当信号量值为0时,将调用改函数的任务加入该信号量的等待任务列表 中,当信号量值大于0时,该函数紧紧将信号量值减1;第三个函数负责置位指定的信号量,当指定的信号量是0或者大于0时,该函数将信号量值加1然后返回。原创 2016-07-13 10:26:55 · 965 阅读 · 0 评论 -
ucos ii信号量的理解
线程同步互斥的控制方法,四种进程或线程同步互斥的控制方法:1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。2、互斥量:为协调共同对一个共享资源的单独访问而设计的。3、信号量:为控制一个具有有限数量用户资源而设计。4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)原创 2016-07-13 10:26:12 · 1434 阅读 · 0 评论 -
ucos-ii的任务调度
uC/OS-II的任务一般格式为:void TASKn(void *pdata){ pdata = pdata; while (1) { OSTimeDly(OS_TICKS_PER_SEC); } } ucos原创 2016-07-13 10:25:17 · 450 阅读 · 0 评论 -
ucos任务调度
1)OSTimeDly产生延时,假设当前任务A调用OSTimeDly函数,则OSTimeDly函数就将任务A从任务就绪表中去掉,并将延时时间赋值给任务A的任务控制块中的OSTCBDly,然后调用OS_Sched。(2)OS_Sched函数,它利用任务就绪表,将就绪任务中的优先级最高的任务查出,赋值给OSPrioHighRdy,然后用OS_TASK_SW切换任务。(3)OSTimeT原创 2016-07-13 10:02:58 · 461 阅读 · 0 评论 -
uC/OS-II中断及时钟节拍
中断uC/OS-II的中断服务子程序要用汇编程序来编写。下面是用户中断服务子程序的一般处理过程的伪代码:保存全部CPU寄存器;调用OSIntEnter或OSIntNesting直接加1;中断服务;调用OSIntExit;恢复所有CPU寄存器;执行中断返回指令;uC/OS-II的中断处理与PC的中断处理类似。当发生中断时,首先保护现场,原创 2016-07-13 09:29:25 · 1027 阅读 · 0 评论 -
uC/OS-II的任务管理和调度
任务管理一个任务时一个完整的功能程序。该程序可认为CPU完全属于自己。每个任务被赋予一定的优先级,并拥有自己的一套CPU寄存器和栈空间。任务处于非运行态时,该任务被保存到自己的栈空间。当被调度处于运行状态时,任务的现场从栈空间恢复到CPU寄存器中运行。uC/OS-II最多可以管理64个任务。为了简化设计,uC/OS规定各任务的优先级必须不同。任务的优先级号就是任务编号,任务的优先级原创 2016-07-13 09:27:07 · 1416 阅读 · 0 评论 -
uC/OS II学习时的一个重要函数 OSInit( )
在uC/OS II的学习中,OSInit( );是一个重要的函数,它在OS应用中的void main();函数中首先被调用,是OS运行的第一个函数,如下程序,它完成各初始变量的初始化,建立任务空闲键表OSTCBFreeList, 建立事件空闲键表OSEventFreeList.创建一个空闲任务OS_TaskIdle,以及初始化其它如果有用到的功能 Q,MEM等。我个人的理解也是从这里开始的。通过空原创 2016-07-12 22:14:54 · 674 阅读 · 0 评论 -
μCOS-ii初学心得
μC/OS-II 是一个源代码公开、可移植、可裁剪的实时多任务操作系统,具有稳定可靠、实时性好等优点,是专门针对微处理器和微控制器设计的实时内核,它的内核可以做到很小,很适合在单片机系统上移植。移植了μC/OS-II 的嵌入式系统可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化。在这个星期内,我通过对禁用了邮箱、队列、文原创 2016-07-12 22:13:19 · 1905 阅读 · 0 评论 -
uC/OS-II内核架构解析---uC/OS-II应用开发
1. 应用开发步骤 (1) 包含uC/OS-II的总头文件includes.h; (2) 定义任务栈的大小和任务栈; (3) 分配任务优先级; (4) 实现任务功能; (5) 调用OSInit()函数初始化uC/OS-II的数据结构; (6) 创建用户任务,启动uC/OS-II;2. 编写任务函数原创 2016-07-12 22:11:41 · 488 阅读 · 0 评论 -
uC/OS-II内核架构解析---uC/OS-II内存管理
1. memPart基本原理 uC/OS-II根据需要将内存空间分成多个内存分区,每个内存分区由具有相同大小的内存块(Block)组成。主要包含在C源文件OS_MEM.C中。OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];OS_EXT OS_MEM *OSMemFreeList;memPart控制块结构体: typedef struc原创 2016-07-12 22:10:37 · 933 阅读 · 0 评论 -
uC/OS-II内核架构解析---uC/OS-II通信与同步
1. 消息邮箱Mbox Mbox用于多任务间单一消息的传递,uC/OS-II使用ECB管理Mbox的基本信息,OSEventPtr指向创建Mbox时指定的内存空间。事件的创建由具体的事件管理程序实现。主要包含在C源文件OS_MBOX.C中。OS_EVENT *OSMboxCreate(void *msg);void *OSMboxPend(OS_EVENT *pevent原创 2016-07-12 22:09:26 · 2373 阅读 · 0 评论 -
uC/OS-II内核架构解析---uC/OS-II任务管理
1. C可执行代码结构 (1)代码段.text:存放CPU执行的机器指令,通常.text是可共享且只读的。 (2)数据段.data:.rodata(常量数据)、.rwdata(已初始化全局变量、静态变量)。 (3)未初始化数据段.bss:未初始化的全局变量、静态变量。 (4)栈.stack:存放函数参数、局部变量及任务切换时的上下文原创 2016-07-12 22:08:27 · 673 阅读 · 0 评论 -
uC/OS-II内核架构解析---uC/OS-II系统核心
1. uC/OS-II任务调度(1) uC/OS-II调度算法 uC/OS-II采用基于优先级的调度算法,总是选择当前处于就绪状态的优先级最高的任务进行调度。uC/OS-II是可抢占性的强实时性OS,在完成中断后允许进行新的任务调度。 uC/OS-II有两种调度方式:任务级任务调度、中断级任务调度。(2) 任务就绪表 INT8U con原创 2016-07-12 22:07:02 · 1329 阅读 · 0 评论 -
μCOS/II v2.85内核OSSemPend()和OSSemPost()函数工作原理
//----------------------------------------------------------------------//1.OSSemPend()函数void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *perr){ INT8U pend_stat;#if OS_CRITICAL_ME原创 2016-07-10 16:57:24 · 833 阅读 · 0 评论 -
μC/OS-II基本原理简介
μC/OS-II,意为“微控制器操作系统版本”。其不仅提供了一个完整的嵌入式实时 内核的源代码,而且对这些代码的细节进行了详尽的解释。他不仅告诉读者该实时内核是怎么写的,还解释了为什幺这么写,而且该实时内核可以被方便的移植到几 乎所有的嵌入式应用类CPU上。对于商业应用中哪些昂贵的实时操作系统软件,μC/OS-II是一个很好的学习平台。 说到μC/OS-II,这里先介绍一下原创 2016-07-12 22:15:47 · 2403 阅读 · 0 评论 -
μC/OS-II任务栈浅析
和Linux采用进程单元一样,μC/OS-II采用的是任务的方式,而当任务运行被 加载到内存单元时,将占用的内存区域分为代码段、初始化数据段、未初始化数据段、堆、栈五个区域。而其中,栈段是用来存放函数的参数值、局部变量的值和任 务进行上下文切换时存储当前的任务。栈在实现上是一段连续的内存空间,μC/OS-II采用数组来实现,当一个任务被创建时,需要为该任务创建相应的栈段,并指定该任务的栈顶原创 2016-07-12 22:16:50 · 514 阅读 · 0 评论 -
整理uc/os的46个函数
Void OSInit(void);所属文件 OS_CORE.C 调用者 启动代码 开关量 无OSinit()初始化μC/OS-Ⅱ,对这个函数的调用必须在调用OSStart()函数之前,而OSStart()函数真正开始运行多任务。Void OSIntEnter(void);所属文件 OS_CORE.C 调用者 中断 开关量 无OSIntEnt原创 2016-07-13 09:26:08 · 819 阅读 · 0 评论 -
μC/OS-II任务管理中的主要函数解析
μC/OS-II中,任务是基本的执行单元,所以任务如何管理对于基于μC/OS-II系统的驱动的编写是很关键的,下面就来浅析几个主要的任务管理函数的源码。其任务管理函数主要就在源码目录的Os_task.c中。首先先来看一下任务是如何创建的,μC/OS-II中最基本的任务创建函数是OSTaskCreate ()函数,它的源码如下:#if OS_TASK_CREATE_EN >原创 2016-07-12 22:58:45 · 1365 阅读 · 0 评论 -
uCOS内存管理
ANSI C中,可以使用malloc()和free()两个函数来动态分配内存,在嵌入式系统中,一般不这么做。 uCOS中的内存管理是基于固定大小的存储块的分配和回收,相同大小的存储块链接在一起,组成若干组,比如8个字节的存储块为一组,16个字节的是另一组,当我们需要8个字节时,就从8个字节的组里Get拿出一个,用完后再Put回去,因为每次操作的都是固定大小的存储块,所以没有碎片的产原创 2016-07-12 22:57:42 · 462 阅读 · 0 评论 -
μC/OS-II微小内核简单运用
对于μC/OS-II来说,大多数API都是成对的,而且一部分必须配对使用。中断服务程序不能调用可能会导致任务调度的函数,它们主要是一些等待事件的函数,这些函数及其替代函数见下表。注意:未列入表中的函数OSTaskCreate()、OSTaskCreateExt()、OST原创 2016-07-12 22:56:40 · 450 阅读 · 0 评论 -
μC/OS-Ⅱ任务控制块
μC/OS-Ⅱ是通过任务控制块来管理任务的。任务控制块是一个基于链表的数据结构,任务控制块主要用于记录任务的堆栈栈顶指针、指向下一个任务控制块的指针、任务等待的延迟时间、任务的当前状态标志与任务的优先级别等一些与任务管理有关的属性。 当任务的CPU使用权被剥夺时,μC/OS-Ⅱ用任务控制块来保存该任务的状态,从而保证任务重新获得CPU使用权时从断点处执行。μC原创 2016-07-12 22:46:21 · 529 阅读 · 0 评论 -
μC/OS-II微小内核分析
μC/OS-II 嵌入式实时操作系统的源代码可以分成三部分:与硬件无关的内核代码、与处理器有关的移植代码和用户配置文件。 内核代码位于source目录下,提供了4个微小内核。它们分别位于source\SOURCE1(包含建立任务和延时功能)、source \SOURCE2(增加删除任务功能)、source\SOURCE3(增加信号量文件)和source\SOURCE4(增原创 2016-07-12 22:40:29 · 1354 阅读 · 0 评论 -
UC/OS-II内核调度分析
一.内核概述:多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内 核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加 ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一原创 2016-07-12 22:18:43 · 1735 阅读 · 0 评论 -
μC/OS-II中的TCB
TCB为Task Control Block的简称,即任务控制快,它是用来存储一个任务当前的一些属性,其包括:1、任务栈空间位置2、任务与其他任务通信的数据空间3、任务的当前状态,即任务是否在等待还是在运行4、任务的优先级,任务的标识,其是任务调度的依据。下面我们就将μC/OS-II中的TCB的结构体提取出来:/* ***********原创 2016-07-12 22:17:42 · 708 阅读 · 0 评论 -
uCOS-II的嵌入式串口通信模块设计
在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率、缩短开发周期。uCOS-II是一个占先式实时多任务内核,使用对 象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位不同框架的微处理器上。但uCOS-II仅是一个实时内核,它不像其他实时操作系统(如嵌入式 Linux)那样提供给用户一些API函数接口。在uCOS-II实时内核下,对外设的访问接口没有统一完善,有很原创 2016-07-14 11:38:19 · 5643 阅读 · 0 评论