在裸板上跑一些程序对于一些电子设计是足够的,所谓裸板上的程序就是传统的前后台系统,而我的理解它应该是一种“过程类”的程序,一个大循环(作为后台)做一些处理,中断程序(作为前台)来处理一些特殊的任务,但是当处理器处理的任务越来越多时,随然中断处理还是可以及时的处理保证及时性,但是对于大循环里面的任务来说,大循环越复杂中断愈多时 一些要求实时性比较高的处理程序就没发保质的完成甚至是“错过“重要的事情而无法完成。比如一些协议栈处理中就是灾难性的。这时前辈人就开始想着一种方法保证在处理更多更复杂的事情时如何去保证实时性的管理该方案,此时各类实时操作系统(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变量中:

  1. OS_TASK_STATE_RDY                        就绪状态,优先级最高时会执行
  2. OS_TASK_STATE_DLY                                   延时状态,用延时函数将其加入延时列表延时一段时间时的状态
  3. OS_TASK_STATE_PEND                                  任务在等待信号
  4. OS_TASK_STATE_PEND_TIMEOUT             任务在等待信号,不过这里是有超时检测的
  5. OS_TASK_STATE_SUSPENDED                   任务处于挂起状态,可以理解为强行暂停一个任务
  6. OS_TASK_STATE_DLY_SUSPENDED           任务自己创建了一个延时但延时未完就被挂起了
  7. OS_TASK_STATE_PEND_SUSPENDED        等待事件过程被挂起 
  8. OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED  同上加了超时检测 
  9. OS_TASK_STATE_DEL                                        任务已被删除

μC/OS-III---I笔记1---概述的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  3. μCos-ii学习笔记1_概述

    一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...

  4. ng-深度学习-课程笔记-0: 概述

    课程概述 这是一个专项课程(Specialization),包含5个独立的课程,学习这门课程后做了相关的笔记记录. (1) 神经网络和深度学习 (2)  改善深层神经网络:超参数调试,正则化,优化 ( ...

  5. OS考研复习笔记——操作系统的定义、目标、作用和发展的主要动力

    计算机系统由硬件和软件两部分组成.操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次补充. 硬件:计算机物理设备,即各种处理机存储器.输入/输出设备 ...

  6. os模块常用方法笔记

    os模块是程序和系统文件之间的交互接口,可以实现对文件的创建.删除等功能,以下对os模块的功能做一个笔记,方便以后学习和查找. import os os.getcwd() #获取当前工作目录,即当前p ...

  7. HTTP权威指南笔记-1.概述

    1.1 通讯 Web内容是存储在服务器上的,Web服务所使用的是HTTP协议,所以经常称为HTTP服务器.通讯过程为客户端(正常我们所使用的)发出请求,服务端根据客户端的HTTP请求响应相应数据,这就 ...

  8. XML学习笔记1——概述

    我对于XML是很不够重视的,认识也是非常肤浅的,因为在之前的Web经验中,基本上都可以使用JSON来代替XML,JSON网络流量少,解析快,JS支持好等这些特点让我对自己的观点坚信不疑.然而我渐渐地改 ...

  9. 以太坊区块链Java(EthereumJ)学习笔记:概述

    本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...

  10. STM32F40G-EVAL_UC/OS III

    micrum官网下载uc/os程序包: 包含文件cotex_M4.h:

随机推荐

  1. 基于Redo Log和Undo Log的MySQL崩溃恢复流程

    在之前的文章「简单了解InnoDB底层原理」聊了一下MySQL的Buffer Pool.这里再简单提一嘴,Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子. ...

  2. Linux日志文件(常见)及其功能

    日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息.系统的启动信息.系统的安全信息.邮件相关信息.各种服务相关信息等.这些信息有些非常敏感,所以在 Linux 中这些日志文 ...

  3. git的使用学习笔记---分支删除

    一.使用场景: 1.修改bug,原来分支不管用 2,分支太多不易管理 二.方法 git branch -d branch1 无法删除:原因在与该分支为目前工作的分支,所以要切换分支 git check ...

  4. 一个基于protocol buffer的RPC实现

    Protocol Buffer仅仅是提供了一套序列化和反序列化结构数据的机制,本身不具有RPC功能,但是可以基于其实现一套RPC框架. Services protocol buffer的Service ...

  5. 机器学习基础——规则化(Regularization)

    在机器学习中,我们一直期望学习一个泛化能力(generalization)强的函数只有泛化能力强的模型才能很好地适用于整个样本空间,才能在新的样本点上表现良好. \[y=a+bx+cx^2+dx^3\ ...

  6. 济南学校D1T3_hahaha

    [问题描述] 小Q对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目: 首先,小Q会在轴正半轴和轴正半轴分别挑选个点.随后,他将轴的点与轴的 ...

  7. Spring框架——JDBC与事务管理

    JDBC JDBCTemplate简介 XML配置JDBCTemplate 简化JDBC模板查询 事务管理 事务简介 Spring中的事务管理器 Spring中的事务管理器的不同实现 用事务通知声明式 ...

  8. Java异常封装(自定义错误信息和描述)

    一.checked异常和unchecked异常 checked异常: unchecked异常: 二.异常封装示例 2.1.添加一个枚举LuoErrorCode.java如下: 2.2.创建一个异常类B ...

  9. centos7系统忘记root密码

    第一步:开启服务器,在如下界面键入"e"进入编辑 第二步:找到以linux16开头的一行,在本行行尾键入"rd.break" 第三步:输入完成后,按" ...

  10. linux yum rpm 和 apt-get dpkg 安装、卸载软件

      一般来说著名的linux系统基本上分两大类:   1.RedHat系列:Redhat.Centos.Fedora等   2.Debian系列:Debian.Ubuntu等   RedHat 系列  ...