初识实时操作系统
实时操作系统是指当外界事件或数据产生时,能在规定的时间内进行处理并作出相应。实时操作系统有一下基本特征:
- 多任务操作系统
- 多级中断机制
- 优先调度机制
现广泛使用的实时操作系统有很多种,它们具体的比较可以参考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
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
BSP
板级支持包(BSP)的源文件,所有的文件名都以BSP开头,可以在该目录找到bsp.h和bsp.c。BSP代码应包含如LED控制、定时器初始化、以太网控制器接口等函数。
参考资料:
《Micrium-uCOS-III-UserManual》
本作品采用 知识共享署名-非商业性使用-相同方式共享 3.0 *许可协议进行许可。