μ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 任务已被删除
μC/OS-III---I笔记1---概述的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- μCos-ii学习笔记1_概述
一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...
- ng-深度学习-课程笔记-0: 概述
课程概述 这是一个专项课程(Specialization),包含5个独立的课程,学习这门课程后做了相关的笔记记录. (1) 神经网络和深度学习 (2) 改善深层神经网络:超参数调试,正则化,优化 ( ...
- OS考研复习笔记——操作系统的定义、目标、作用和发展的主要动力
计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次补充. 硬件:计算机物理设备,即各种处理机存储器.输入/输出设备 ...
- os模块常用方法笔记
os模块是程序和系统文件之间的交互接口,可以实现对文件的创建.删除等功能,以下对os模块的功能做一个笔记,方便以后学习和查找. import os os.getcwd() #获取当前工作目录,即当前p ...
- HTTP权威指南笔记-1.概述
1.1 通讯 Web内容是存储在服务器上的,Web服务所使用的是HTTP协议,所以经常称为HTTP服务器.通讯过程为客户端(正常我们所使用的)发出请求,服务端根据客户端的HTTP请求响应相应数据,这就 ...
- XML学习笔记1——概述
我对于XML是很不够重视的,认识也是非常肤浅的,因为在之前的Web经验中,基本上都可以使用JSON来代替XML,JSON网络流量少,解析快,JS支持好等这些特点让我对自己的观点坚信不疑.然而我渐渐地改 ...
- 以太坊区块链Java(EthereumJ)学习笔记:概述
本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...
- STM32F40G-EVAL_UC/OS III
micrum官网下载uc/os程序包: 包含文件cotex_M4.h:
随机推荐
- MongoDB 总结
目录 1. 逻辑结构 2. 安装部署 2.1 系统准备 2.2 mongodb安装 2.2.1 创建所需用户和组 2.2.2 创建mongodb所需目录结构 2.2.3 上传并解压软件到指定位置 2. ...
- 并发条件队列之Condition 精讲
1. 条件队列的意义 Condition将Object监控器方法( wait , notify和notifyAll )分解为不同的对象,从而通过与任意Lock实现结合使用,从而使每个对象具有多个等待集 ...
- git的使用学习笔记--项目版本操作
一.使用场景 版本回退:上线失败--需要回退到上个版本 二.操作 先编辑 vim text.txt git status git add . 这个命令能看到所有的增加操作 git com ...
- TCP半连接队列和全连接
概述 如上图所示, 在TCP三次握手中,服务器维护一个半连接队列(sync queue) 和一个全连接队列(accept queue). 当服务端接收到客户端第一次SYN握手请求时,将创建的req ...
- 倍增小结 ST 与 LCA
倍增 倍增我是真滴不会 倍增法(英语:binary lifting),顾名思义就是翻倍. 能够使线性的处理转化为对数级的处理,大大地优化时间复杂度. (ps:上次学倍增LCA,没学会,老老实实为了严格 ...
- java项目相对路径
./的含义: eclipse相对路径是相对项目的src目录来说的,而不是相对于当前文件. "./某某文件.txt" 而idea则相对于项目根目录 "./src/某某文件. ...
- python基础学习2 函数变量与赋值
学习的第一步,就是通常的输出函数:print() 1.基础主要学习了变量的赋值,变量名可以疑字母.数字.下划线(_)进行命名,但是不能以数字开头 变量的赋值:变量名 = 变量值 2.模块的导入,和调用 ...
- orm(Manager isn't accessible via %s instances" % cls.__name)报错
报错信息 Manager isn't accessible via %s instances" % cls.__name 解决方法 https://www.jianshu.com/p/5e0 ...
- Jenkins(2)docker容器中安装python3
前言 使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境. 进jenki ...
- 一个ftp协议传输文件之后执行脚本无法工作的情况
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 移植一个文件系统时候,我在window下git clone了对方仓库源码,然后用FileZ ...