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

初识实时操作系统

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

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

       现广泛使用的实时操作系统有很多种,它们具体的比较可以参考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 中国大陆许可协议进行许可。
阅读更多
上一篇浮点数写入FLASH和读出
下一篇单片机全局变量 局部变量
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭