uCOS学习笔记——实时操作系统概述

2023-05-16

一.概述

RTOS(real time operation system)既实时操作系统。通俗来说,实时操作系统正如一个大管家一般,可以根据任务的要求,进行资源管理,消息管理,任务调度,异常处理等工作。在RTOS支持的系统中,

每个任务均有一个优先级,实时操作系统总是运行处于就绪态且最高优先级的任务RTOS根据各个任务的优先级及任务状态,动态的切换各个任务,保证对实时性的要求

实时操作系统允许多个任务同时执行,实际上,一个处理器核心在同一个时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某个时刻究竟执行哪个任务,任务调度在各个任务之间的切换非常快,给人造成同一时刻能运行多个任务的错觉。故学习实时操作系统的核心,就在于学习其任务调度方式

二.裸机开发的缺陷

  1. 并发性差

程序并发工作效率低是因为在写裸机程序时,不可避免的会在主程序中有超级大的while(1)循环,这里面几乎包含项目的所有业务逻辑。因为每个业务逻辑中会有delay这样的循环等待函数,这样导致了所有业务逻辑几乎都是串行起来工作的。这个时候CPU会有很多时间都浪费在了延时函数里,一直在空转,导致软件的并发效率非常低。

  1. 模块化差,代码间耦合度高

从软件工程的角度,我们在做软件开发时,都会强度高内聚,低耦合的原则。而裸机的模块化来发难度非常大,模块间的耦合程度非常高,导致无法在大型项目中使用裸机开发。

还是刚才main函数中大while(1)的例子,可以想象这么多功能都紧紧的拥挤在主函数中,不可拆分,模块化开发困难重重。

举一个非常贴切的例子,在一些使用看门狗的项目中,如果使用delay延时函数,那得注意点,万一延时过长,主函数来不及喂狗,看门狗就被触发了。最后会产生这样一种感觉,一个简简单单的delay还得考虑喂狗功能,裸机开发时操的心太多了,自然无法应用在大型项目中。

  1. 生态:

很多高级的软件组件,必须依赖于操作系统来实现,无法在裸机上实现。

  1. 实时性差:功能复杂的条件下,实时性无法保证

软件的实时性在一些领域中会有很高的要求,软件的每个步骤必须在指定的时间被触发。工控领域就是最常见到的场景,如果实时性无法保证机械设备就可能无法按照指定的时序要求去动作,以至于发生机械事故,甚至威胁到人的生命,回过头来接着看裸机程序,如果的软件变得庞大时,主程序中那么大的一个while(1)循环,到处都是delay函数,代码耦合性严重,无法保证实时性。

  1. 可重复性:软件可重用性差,总是重复早轮子

可重用性与模块化程度有直接的关系,相信大家每个人在工作中都不想做很多重复性的工作,同样在写代码时,也想着今可能少写一些功能相似的代码,但在这个嵌入式碎片化极其严重的时代,各式各样的芯片,想要让同样的代码会过于依赖于底层硬件,重复造轮子的过程也无法避免。

三.操作系统带来的优势

线程的方式进行并发任务处理,解决模块化问题,同时保证实时性。

  1. 模块化

使用了操作系统后,整个软件的工作被拆分为多个任务来构成(也会称为线程),每个线程会有自己的独立运行空间,既称为线程堆栈,这时每个线程是你玩你的,我做我的,大家互不干涉,模块化程度得到很好的提高。

  1. 并发性

在并发的角度来看,各个线程在使用delay/事件等待这类函数时,会自动的让出CPU的使用权给其他需要的线程,不仅书写delay延时函数操的心少了,整个CPU的利用率也得到了提高,最终提高了并发性。

3.实时性

再来看实时性,像 ucos/RT-Thread 这些 RTOS 本身就被设计为实时的操作系统,各个线程都有不同的优先级别,重要的线程可以设为高优先级,不重要的线程可以降低优先级,做好全局的统筹规划后,这样整个软件的实时性也能得到保证

4.开发效率

由于操作系统提供了统一的抽象接口层,方便了可重用组件的积累,提高开发效率。

操作系统其实是一群软件大牛们智慧的结晶,他们站在应用软件、底层驱动的开发角度,对很多常见的软件功能进行了封装、抽象,比如:信号量、事件通知、邮箱、环形缓冲区、单向链表/双向链表等等,这些功能拿来即用,对于开发者方便极了

还有一些操作系统,比如:Linux 和我们国产的 RT-Thread ,他们这些系统对碎片化的硬件,统一封装了一套标准的硬件操作接口,一般称为设备驱动框架。这样我们的应用软件工程师,就可以专攻应用的工作,再也不用怕更换硬件,又需要重复造轮子了。

四.操作系统代码框架初识

  1. 一个任务管理一个硬件

  1. 任务与任务或者任务与中断涉及到数据传输使用消息队列

  1. 任务间访问共享资间使用互斥锁

  1. 任务的同步使用信号量

  1. 标志位的管理使用事件标志组

  1. 编写一个专门初始化硬件的任务,该任务可以创建其它任务

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uCOS学习笔记——实时操作系统概述 的相关文章

  • 记一次FreeRTOS移植到STM32f103遇到的问题

    问题 xff1a 移植FreeRTOS源码后写了简单的程序验证 xff0c 使用keil软件仿真发现程序一直卡在开启任务调度函数vTaskStartScheduler 中 解决 xff1a 在FreeRTOSConfig h文件中加入以下代
  • 阿里云服务器怎么登陆

    一 xff0e 连接登录Windows阿里云服务器 对于Windows操作系统 xff0c 可通过PUTTY VNC和Windows系统自带远程桌面工具等方式访问 此处以Windows自带远程桌面工具为例 xff1a 1 单击 开始 图标
  • putty连接不上该怎么办

    虚拟机Oracle VM VirtualBox 操作系统是CentOS7 1 首先有配置好的虚拟机网络 2 要登陆虚拟机 3 用管理员身份打开cmd 4 连接putty 创建好虚拟机 xff0c 启动虚拟机 xff0c 进行登录 输入ip
  • LT87121 适用于EDPx/VBO转DP/EDP应用方案,支持中心扩频+5000ppm@30kHz,温度范围: -40°C~+85°C

    1 说明 LT87121 是一款高性能 eDPx 至 eDP DP 转换器 xff0c 专为将 eDPx 源连接至一个 eDP DP 灌电流而设计 该器件能够自动操作 xff0c 由集成微处理器启用 xff0c 该微处理器使用嵌入式SPI闪
  • OpenHarmony适配移植:X86、ARM、RISC-V、MIPS、LoongArch芯片架构简析

    前言 基于OpenHarmony的开发相关工作 xff0c 特别适配移植 设备开发这块 xff0c 芯片的基础构架知识 xff0c 是最初的学习起点 本文我们整理了几种常见的芯片构架的基础知识 一 整体分析 序号 架构 特点 运营机构 1
  • 个人笔记Openstack中的常用命令

    一 块存储 xff08 Cinder xff09 1 列出所有卷 xff08 ID 名称 状态 大小和挂载目录 xff09 openstack volume list 2 新建卷 xff08 size的单位为GB xff09 opensta
  • 380无人机机架组装笔记

    无人机机架买的380碳纤维 飞控买的pixhawk6c 遇到的问题 xff1a 1 买回来组装发现支撑板少了 xff0c 只有一个碳纤维的中心板和PCB板 组装无人机大概需要三到四块板子 xff0c 分别用于安放电池 xff0c 安装分电板
  • JS逆向-sm2、sm4加密某医保局

    前言 该文章为学习使用 xff0c 严禁用于商业用途和非法用途 xff0c 否则由此产生的一切后果均与作者无关 xff01 如有侵权 xff0c 请私信联系作者删除 需求 目标网址 xff1a aHR0cHM6Ly9mdXd1Lm5oc2E
  • Ubuntu16.04 出现E: Sub-process /usr/bin/dpkg returned an error code (100)

    原因为系统中dpkg文件损坏了 xff08 原因不详 xff09 xff0c 使用apt get f update也不能修复 需要单独下载dpkg的安装包进行修复 修复操作如下 1 在官网下载dpkg安装包 http security ub
  • SecureCRT抓取串口log

    一 通用自动配置 通用自动配置是指配置之后 xff0c 每次创建新的session都会导入该配置 xff0c 无需重复配置 xff0c 非常方便 首先在option里面找到Global Options xff1b 在Global Optio
  • vscode处理代码合并冲突

  • mysql---修改数据库root密码的方法

    为了数据库管理员root用户密码的安全 xff0c 可以定期修改密码 注意 xff1a 修改密码 必须要知道旧密码 才能设置新密码 并且要符合密码策略的要求 方法一 登录后修改 xff0c 数据库管理员连接服务后 修改自己的登陆密码 spa
  • 关于debian网卡驱动

    1 查看驱动信息的命令 xff1a 查看基本信息 xff1a lspci 22 00 0 有线网卡 25 00 0 无线网卡 26 00 0 Nvidia独立显卡 查看详细信息 xff1a lspci vvv 有线网卡使用的驱动为 xff1
  • Python实战,爬取金融期货数据

    大家好 xff0c 我是毕加锁 今天给大家带来的是 Python实战 xff0c 爬取金融期货数据 文末送书 xff01 文末送书 xff01 文末送书 xff01 任务简介 首先 xff0c 客户原需求是获取https hq smm cn
  • 在Ubuntu系统下利用Kazam软件录屏以及视频解码问题

    最近利用在本想在Ubuntu系统下录制一段仿真效果视频 xff0c 利用Ubuntu系统自带的录屏方式 xff0c 发现有些鸡肋 xff0c 因为只能录30秒 于是乎找了一款软件 xff0c 在此安利给大家 Kazam 1 Ubuntu系统
  • PMP1——3章经典题目

    第1题 以下哪个是项目的特点 xff1f A xff0e 必须为组织实现利润 B xff0e 通常会产出相同的产品 C xff0e 推动组织从当前状态转变到将来状态 D xff0e 项目是需要持续开展的重复性工作 第2题 旨在创造最终结果的
  • 认识世界和改造世界 [马原]

    认识世界与改造世界 认识世界 定义 认识世界 xff0c 就是主体能动地反映客体 xff0c 获得关于事物的本质和发展规律的科学知识 xff0c 探索和掌握真理 认识世界的活动是客观见之于主观 xff0c 是要认识事物发展的规律性 如何认识
  • C#工控上位机开发-->1、C#快速编程入门

    学习目标 xff1a 一 控制台的输入输出二 C 中的变量使用三 字符串的拼接与格式化的三种方式四 数据类型转换的三种方式 学习内容 xff1a 1 控制台的输入输出 xff08 1 xff09 输入方法 xff1a Console Rea
  • C#工控上位机开发---2.面向对象编程

    学习目标 xff1a 1 对象与类的概念 2 类的组成 3 字段 属性 方法 4 属性扩展 学习内容 xff1a 1 1 对象与类的概念 xff1a 类就是以对象共有的属性 xff0c 方法来定义的一个整体 xff0c 也就是一类 xff0
  • ubuntu16.04配置JDK环境变量(JDK8u2)

    一 流程 1 官网下载JDK 2 解压缩 放到指定目录 3 配置环境变量 4 设置系统默认JDK 5 测试jdk 二 步骤 1 官网下载JDK xff08 下载jdk8为例 xff09 https www oracle com techne

随机推荐

  • STM32的一键下载CH340 DTR RTS与复位电路NRST的学习笔记

    这两天在学习stm32最小系统板的时候 对这一部分特别的不理解 于是就去找了很多东西去看 先说一键下载电路吧 先引用一张正点原子的原理图 xff1a 在芯片手册上查找ch340的手册 xff0c 上面对于 RTS与DTR的定义是这样的 xf
  • Linux学习笔记——逻辑卷及vdo的建立

    目录 前言 一 逻辑卷 1 如何建立lvm设备 xff1a xff08 1 xff09 lvm的拉伸 xff08 2 xff09 lvm缩减 xff08 3 xff09 lvm快照 xff08 4 xff09 lvm删除 二 vdo Vir
  • BGP路由器协议排错教程:BGP 对等体翻动问题

    完整版下载 2022年最新BGP路由协议排错教程指南 网络安全文档类资源 CSDN下载 BGP 对等体失效问题讨论的是当 BGP 邻居关系总是在 Idle xff08 空闲 xff09 状态和 Active xff08 活跃 xff09 状
  • VUE 事件总线

    VUE 事件总线 事件总线通俗理解为在平级的兄弟组件上的传参 1 将事件总线挂载到原型上 span class token keyword new span span class token class name Vue span span
  • 一看就懂的java虚拟机内存区域划分

    一 虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的 xff0c 因为不同的操作系统底层的硬件指令集是不同的 同一个java代码在windows上生成的机器码可能是0101 xff0c 在linux上生成的可能是1100 xf
  • 硬核,20道经典Java基础面试题

    最近整理了20道Java基础面试题 xff0c 大家一起加油哈 1 ArrayList和LinkedList有什么区别 xff1f 可以从它们的底层数据结构 效率 开销进行阐述哈 ArrayList是数组的数据结构 xff0c Linked
  • 面向无人机的视觉目标跟踪算法:综述与展望

    摘要 近年来 无人机因其小巧灵活 智能自主等特点被广泛应用于民用和军事等领域中 特别是搜索侦察过程中首要的目标跟踪任务 无人机视觉目标跟踪场景的复杂性和运动目标的多变性 使得目标特征提取及模型建立困难 对目标跟踪性能带来巨大的挑战 本文首先
  • 网络空间对抗防御中的智能监测技术研究

    摘 nbsp nbsp 要 nbsp 网络空间数据流观测与威胁行为分析是国家网络空间安全防御中的重要方向 为 nbsp nbsp nbsp 应对国家网络空间大规模数据流观测和不断涌现的网络威胁对抗防御重大需求 针对传统 nbsp nbsp
  • Promethues (普罗米修斯)详细介绍

    目录 引言 一 Prometheus 概述 1 什么是Prometheus 2 Zabbix和Prometheus区别 3 Prometheus的特点 二 运维监控平台设计思路 三 Prometheus监控体系 1 系统层监控 xff08
  • 使用vue对表格数据进行查询

    大家好 xff0c 今天小明给大家带来一个带有查询框 的表格 xff0c 下面给大家瞅瞅效果图片 xff1a 带查询框的表格 xff0c 查询前的效果图 带查询框的表格 xff0c 查询后的效果图 从效果图上可以看出 xff0c 在查询框内
  • Linux操作系统面试总结

    1 系统启动流程 uboot gt kernel gt 根文件系统 uboot第一阶段属于汇编阶段 xff1a 定义入口 xff08 start S xff09 xff1a uboot中因为有汇编阶段参与 xff0c 因此不能直接找main
  • 详谈静态库和动态库的区别

    一 什么是库 xff1a 库是写好的 xff0c 现有的 xff0c 成熟的 xff0c 可以复用的代码 现实中每个程序都要依赖很多基础的底层库 xff0c 不可能每个人的代码都从零开始 xff0c 因此库的存在意义非同寻常 本质上来说 x
  • HDFS读取流程

    在HDFS的读写流程中 xff0c 主要是分为HDFS的读流程和写流程 其中先由HDFS写数据 xff0c 之后HDFS才可以读流程 HDFS写流程 Client向NameNode发送消息 xff0c 通过RPC与NameNode建立通信
  • 删除图片名与xml(json)文件名称不对应的

    1 文件夹下无目录文件夹 xff08 纯文件 xff09 import os def scanfile path 获取图片路径 xff08 列表格式 xff09 filelist 61 os listdir path for filepat
  • FreeRTOS内存不够

    STM32F103 xff0c RAM大小为20K xff0c 看起来还是很多的 xff0c 但一运行FreeRTOSG有点功能的程序马上就内存不够了 xff1b unable to allocate space for sections
  • FreeRTOS 任务之间运行时序

    操作系统 xff0c 我们肯定会创建许多任务 xff0c 而且任务的优先级不一样 xff0c 但我们一般情况是采用抢占模式 xff0c 也就是一直运行当前最高优先级任务 xff0c 那么其他低优先级任务就无法运行 xff0c 这时候需要通过
  • c语言-查找指定字符

    题目源自pta xff0c 侵删 本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 x
  • linux查看日志文件内容命令sed、cat、tac、more、less、head、tail、echo 1、按时间查询

    查询日志 xff1a linux查看日志文件内容命令sed cat tac more less head tail echo 1 按时间查询 sed n 39 2017 09 20 14 00 2017 09 20 15 00 p 39 c
  • 计算机保研面试经验分享—重庆大学

  • uCOS学习笔记——实时操作系统概述

    一 概述 RTOS real time operation system 既实时操作系统 通俗来说 xff0c 实时操作系统正如一个大管家一般 xff0c 可以根据任务的要求 xff0c 进行资源管理 xff0c 消息管理 xff0c 任务