μC/OS-III---I笔记1---概述
在裸板上跑一些程序对于一些电子设计是足够的,所谓裸板上的程序就是传统的前后台系统,而我的理解它应该是一种“过程类”的程序,一个大循环(作为后台)做一些处理,中断程序(作为前台)来处理一些特殊的任务,但是当处理器处理的任务越来越多时,随然中断处理还是可以及时的处理保证及时性,但是对于大循环里面的任务来说,大循环越复杂中断愈多时 一些要求实时性比较高的处理程序就没发保质的完成甚至是“错过“重要的事情而无法完成。比如一些协议栈处理中就是灾难性的。这时前辈人就开始想着一种方法保证在处理更多更复杂的事情时如何去保证实时性的管理该方案,此时各类实时操作系统(RTOS)就开始出现,就以μC/OS这个系统为例,这类系统就是为解决前面提到的问题而被创造出来的。μC/OS是一种可剥夺型的任务管理系统,任务代码随时都可以打断正在执行的任务而去执行及时性要求更高的处理任务从而保证实时性要求更加高的任务可以被先执行。看到这里相信大家肯定也都明白了实时操作系统的任务了。他就是被人创造出来的一个用以高效率管理处理器资源的管理员,让处理器在面对更多更复杂的处理任务时可以更加的智能,接下来我将要记录我自己的μC/OS-III 游记了。
因为C语言的特点所以大部分的系统内核都采用C(很少的ASM)来编写,ASM主要是在涉及CPU的一些操作时为加快处理效率所以常用ASM语言编写,因此我认为学习μC/OS-III之前应该对C及你的CPU相关的简单ASM语句要有一定的了解,同时数据结构也是必不可少的。
μC/OS-III相关文件结构属性分类:
- OS_cfg_app.c 系统任务配置相关
- OS_type.h 内核对象的数据类型定义相关
- OS_dbg.c 和调试相关的数据类型定义和相关
- OS_flag.c 事件标志组相关
- OS_int.c 中断延迟相关
- OS_mem.c 内存分区相关
- OS_msg.c 消息相关函数
- OS_mutex.c 二值信号相关
- OS_sem.c 多值信号量相关
- OS_task.c 任务相关
- OS_tmr.c 定时器相关
- OS_var.c 变量定义相关
- OS_time.c 时间管理相关
- OS _stat.c 统计信息相关
- OS_q.c 队列相关
- OS_pend_multi.c 等待多个内核对象相关
- OS_prio.c 优先组相关
- OS_tick,c 时钟节拍相关
- OS_core.c 内核底层相关
- OS.h 相关数据结构的定义
以上这些都是与CPU无关的文件。
- CPU_cfg.h 定义CPU相关指令
- lib.cfg.h 库的相关配置
- OS_cfg.h 系统配置相关,比如内核的裁剪
- OS_cfg_app.h 系统配置相关,比时钟节拍频率的配置
以上这些都是OS配置相关的代文件。
- OS_cup_a.asm CPU相关的汇编函数的定义及声明
- OS_cpu_c.c CPU相关的C语言函数的定义及声明
- OS_cpu.h CPU相关的配置及文件函数的声明
- OS_def.h CPU先关的宏定义
- cpu_c.c CPU相关的C语言配置代码
- cpu_a.asm CPU相关的汇编代码
- cpu_core.c CPU核心相关的配置函数
- cpu_core.h CPU核心相关的配置
以上这些都是CPU配置相关的文件。其中前三个为移植相关的配置文件。
除此之外还有些相关的库比如lib.ascii等。具体看图
对于不同的环境下相关的库还有少许差别。
一个任务他的状态是确定的共有一下9种状态保存在任务控制块里的TaskState变量中:
- OS_TASK_STATE_RDY 就绪状态,优先级最高时会执行
- OS_TASK_STATE_DLY 延时状态,用延时函数将其加入延时列表延时一段时间时的状态
- OS_TASK_STATE_PEND 任务在等待信号
- OS_TASK_STATE_PEND_TIMEOUT 任务在等待信号,不过这里是有超时检测的
- OS_TASK_STATE_SUSPENDED 任务处于挂起状态,可以理解为强行暂停一个任务
- OS_TASK_STATE_DLY_SUSPENDED 任务自己创建了一个延时但延时未完就被挂起了
- OS_TASK_STATE_PEND_SUSPENDED 等待事件过程被挂起
- OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED 同上加了超时检测
- OS_TASK_STATE_DEL 任务已被删除