uc/os学习之路(一) —— 初识uc/os

转载 2018年04月15日 11:23:43

初识实时操作系统

       实时操作系统是指当外界事件或数据产生时,能在规定的时间内进行处理并作出相应。实时操作系统有一下基本特征:

  • 多任务操作系统
  • 多级中断机制
  • 优先调度机制

       现广泛使用的实时操作系统有很多种,它们具体的比较可以参考http://blog.csdn.net/tommyjsj/article/details/7840919 。

       下图是uCOS-III工程目录的整体结构。uCOS-III源代码下载地址:http://download.csdn.net/detail/u010945683/8688525

 


目录树

       从其代码文件的布局就能大致地了解uC/OS-III系统的各个功能,及使用方法。

uC/OS-III


      uC/OS-III是uc/os中与处理器无关的文件,其中


  • Cfg\Template

            该目录存放配置文件的模板。可以把这些文件复制到应用工程目录中,并根据需要修改它们。
      os_app_hooks.c
             说明如何编写被uCOS-III调用的hook函数。该文件包含8个空函数。
       os_cfg.h
             定义工程中用到的uCOS-III功能。详情见附录os_cfg.h
       os_cfg_app.h
             这也是一个配置文件,复制进工程目录,根据应用需要进行设置。这个文件使用户可以决定诸如idle任务的堆栈大小、时钟频率和消息缓冲池中可存放的消息数目之类的东西。
详情见附录os_cfg_app.h


  • \source

       该目录包含uC/OS-III中独立于CPU硬件的源代码。这个目录中的所有文件都应该被包含进工程目录中。根据需求,可以通过配置os_cfg、os_cfg_app.h中#define的常量来进行裁剪内核。

       os_cfg_app.c

              根据os_cfg_app.h中的宏定义声明变量和数组。

       os_core.c

              包含uC/OS-III内核的功能模块。例如用来初始化uC/OS-III的OSInit(),用来完成任务级调度的OSSched(),用来完成中断级调度的OSIntExit(),任务等待表的管理以及任务就绪表的管理等。

       os_dbg.c

              包含内核调试器或uC/Probe使用的常量的声明。

       os_flag.c

             包含事件标志的管理代码。

       os_int.c

             包含中断处理任务的代码。只有当OS_CFG_ISR_POST_DEFERRED_EN(位于os_cfg.h中)设置为1时才能使用该任务。

       os_mem.c

             包含uC/OS-III固定大小的存储分区的管理代码。

       os_msg.c

             包含消息管理的代码。uC/OS-III提供消息队列和任务专用的消息队列,os_msg.c包含这两个服务的通用代码。

       os_mutex.c

              包含互斥信号量的管理代码。

       os_pend_multi.c

              包含允许任务同时等待多个信号量或多个消息队列的代码。

       os_prio.c

              包含位映射表的管理代码,用于追逐那些已经就绪的任务。如果使用的CPU提供置位、清零、测试位和计算前导零的指令,可以使用等效的汇编语言程序来代替该程序以提高性能。

       os_q.c

              包含消息队列的管理代码。

       os_sem.c

              包含管理用于资源管理和同步的信号量的代码。

       os_stat.c

              包含用于计算CPU总使用率及各个任务的CPU使用率的统计任务的代码。

       os_task.c

              包含任务的管理代码。任务管理的函数有诸如OSTaskCreate()、OSTaskDel()和OSTaskChangePrio()等。

       os_tick.c

              包含可管理正在延时和超时等待的任务的代码。

       os_time.c

              包含可使任务延迟一段时间的代码。

       os_tmr.c

              包含软件定时器的管理代码。

       os_var.c

              包含uC/OS-III的全局变量。这些变量由uC/OS-III管理,不应被应用程序访问。

       os.h

              包含uC/OS-III主要的头文件,其中声明了常量、宏、uC/OS-III全局变量、函数原型等。

       os_type.h

              包含uC/OS-III数据类型的声明。可以通过改变这些数据类型以更好地配合所使用的CPU。


  • Ports

      存放所使用的CPU架构的移植文件。其子目录ARM-Cortex-M3及IAR分别表示CPU架构的名字和编译移植代码的编译器厂商的名字。

       os_cpu.h

              包含OS_TASK_SW()的宏定义,以及函数原型OSCtxSw()、OSIntCtxSw()和OSStartHighdy()等的声明。

       os_cpu.a.asm

              包含汇编函数OSCtxSw()、OSIntCtxSw()和OSStartHighdy()等

       os_cpu.h

              包含移植专用hook函数的C代码,以及在创建任务时用来初始化任务堆栈的代码。

uC-CPU

       cpu_core.c

              包含适用于所有CPU架构的C代码。该文件包含了用来测量中断关闭时间的函数(中断关闭和打开分别由CPU_CRITICAL_ENTER()CPU_CRITICAL_EXIT()两个宏实现),还包含一个可模仿前导零计算指令的函数(以防CPU不提供这样的指令),以及一些其他的函数。

       cpu_core.h

              包含cpu_core.c中的函数的原型声明。

       cpu_def.h

              包含uC/CPU模块使用的各种#define常量。

  • ARM-Cortex-M3

      该目录的文件包含了uC/CPU的移植代码。

       cpu.h

              包含了一些类型的定义,使uC/OS-III和其他模块可以和CPU架构和编译器字宽度无关。在该文件中可以找到CPU_INT16U、CPU_INT32U、CPU_FP32等数据类型定义,同时在该文件指定了CPU使用的是大端模式还是小端模式,定义了宏CPU_CRITICAL_ENTER()CPU_CRITICAL_EXIT(),还包含了一些与CPU架构有关的函数声明。

       cpu_a.asm

              包含了一些用汇编语言编写的函数,可用来开中断和关中断、计算前导零(如果CPU支持这条指令)。该文件可能还包括使能缓存、建立MPU和MMU等的函数。这个文件中的函数可以从C代码中调用

       cpu_c.c

              包含了一些基于特定CPU架构但为了可移植而用C语言编写的函数,作为一个普遍原则,除非汇编语言能显著提高性能,否则尽量使用C语言编写函数。

  • Cfg\Template
     

     该目录包含了一个配置模板文件(cpu_cfg.h)。用户必须把这个文件复制到工程目录中,并根据需求修改其内容。

     cpu_cfg.h

          定义是否开启中断关闭时间的测量功能,是用汇编语言实现前导零计算指令,还是用C语言模仿实现前导零计算指令等。


uC/LIB


    uC/LIB由一些高度可移植并且与编译器无关的函数组成。这有助于产品的第三方认证。uC/OS-III不使用任何uC/LIB中的函数,但是uC/OS-III和uC/CPU假定lib_def.h是存在的,并定义了DEF_YES、DEF_NO、DEF_TRUE、DEF_FLASE、DEF_ON、DEF_OFF等宏。

BSP


    板级支持包(BSP)的源文件,所有的文件名都以BSP开头,可以在该目录找到bsp.h和bsp.c。BSP代码应包含如LED控制、定时器初始化、以太网控制器接口等函数。


参考资料:

《Micrium-uCOS-III-UserManual》

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。

Mac OS(苹果系统)使用和配置虚拟机(VMware Fusion)视频教程

本课程从实际出发,介绍了在Mac系统中最佳的虚拟机软件——VMware Fusion,通过该软件实现Mac系统和Windows系统共存共用的融合应用,解决用户实时性和交互性的烦恼。课程以在OSX系统中构建Windows8系统为例,介绍了VMware Fusion软件的部署和应用。
  • 2017年01月07日 16:24

推荐几本学uc/os-II的书

1.(比较难买)嵌入式实时操作系统uc/os-II教程   西安电子科技大学出版 -----这本书对UCOS的源代码分析的非常清楚 比作者原著 在某种程度上要好,这本书对关键的代码都给出了...
  • changqiang08
  • changqiang08
  • 2013-03-04 13:49:30
  • 833

学习uC/OS的一些心得

前几天看了邵贝贝翻译的嵌入式实时操作系统,回想起来,想在做一个简短的总结 该书的作者名字在书中并没有中文翻译 估计叫他杰恩-莱布罗斯吧 这本书一个最大的特点就是不好理解,...
  • u011916318
  • u011916318
  • 2014-07-02 21:40:33
  • 900

经典:uC/OS-II系统的学习教程之(三)

内核结构 本章给出μC/OS-Ⅱ的主要结构概貌。读者将学习以下一些内容;μC/OS-Ⅱ是怎样处理临界段代码的;什么是任务,怎样把用户的任务交给μC/OS-Ⅱ;任务是怎样调度的;应用程序CPU的利用率是...
  • lao_mage
  • lao_mage
  • 2006-12-16 22:36:00
  • 2635

uC/OS-ii 学习步骤及书籍推荐

本人学习uCOSII时间不长。之前对各类8位、16位单片机都有一定的接触,做过很多项目。最近一年里,由于项目的需要一直在用STM32,但是在项目的后期发现对于32位的ARM来讲,如果项目比较复杂的话,...
  • u012993936
  • u012993936
  • 2014-09-27 19:03:00
  • 1650

基于STM32的uC-OS-III 初学(2) - 基本工程建立和使用

1.根据上一章提到的下载地址下载源码,解压缩到某文件夹下 2.进入下图所示文件夹下,打开OS3.eww工程文件 3.开始修改源码,APP.c包含了应用的入口main函数,这里可以看到调用了一些函数,...
  • hzt12345hf
  • hzt12345hf
  • 2016-08-03 16:17:08
  • 853

经典:uC/OS-II系统的学习教程之(2)

实时系统概念 实时系统的特点是,如果逻辑和时序出现偏差将会引起严重后果的系统。有两种类型的实时系统:软实时系统和硬实时系统。在软实时系统中系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须...
  • lao_mage
  • lao_mage
  • 2006-12-16 22:35:00
  • 1728

uC/OS-II源码分析(转载)

原文地址:uC/OS-II源码分析(转载)作者:simplorer一、uC/OS-II的简介 uC/OS是一个微型的实时操作系统,包括了一个操作系统最基本的一些特性,如任务调度、任务通信、内存管理、...
  • Sun19910114
  • Sun19910114
  • 2014-08-19 16:30:51
  • 1552

uC/OS-II内核架构解析---uC/OS-II通信与同步

1. 消息邮箱Mbox       Mbox用于多任务间单一消息的传递,uC/OS-II使用ECB管理Mbox的基本信息,OSEventPtr指向创建Mbox时指定的内存空间。事件的创建由具体的...
  • softn
  • softn
  • 2016-07-12 22:09:26
  • 1370

uc/os-ii内核源码理解(一)

使用操作系统,就要使用操作系统相关的资源(消息邮箱、信号量、互斥信号量、消息队列、事件等),需要大致了解系统内核原理。 uC/OS-ii操作系统配置 uC/OS-ii系统配置就是修改os_cfg....
  • li_qcxy
  • li_qcxy
  • 2017-02-15 23:15:16
  • 647
收藏助手
不良信息举报
您举报文章:uc/os学习之路(一) —— 初识uc/os
举报原因:
原因补充:

(最多只允许输入30个字)