UCOSIII系统学习笔记

2023-05-16

说明:

本文主要讲针对STM32的UCOSIII3.03版本的文件与内核分析。此文只是对UCOSIII粗略的讲解,希望读者在读完后能对UCOSIII系统整体多些认识,细节方面还请读者参考相关书籍,如《嵌入式实时操作系统ucosiii》。介于作者水平有限,若有错误,请及时批评指正。

一.UCOSIII文件组成

UCOSIII文件主要由配置文件、应用程序文件、OS系统文件、OS与CPU相关文件、LIB库文件五部分组成,其中配置文件(cpu_cfg.h、lib_cfg.h、os_cfg.h、os_cfg_app.h)和应用程序文件由用户自己定义,文中不做介绍,LIB库文件由通用函数的源文件,文中也不做介绍。

(1)    OS与CPU相关文件

文件架构分为两个部分,如下图:

(2)    OS系统文件

文件架构如下图:

二.系统时钟节拍

系统时钟节拍是实现延时的最小单元。可以是一些有周期的信号,在STM32中使用systick作为系统时钟节拍。

三.任务的调度与切换

任务的调度与切换分两种:由调度器(OSSch())触发和由中断触发(OSIntExit()),具体流程图如下:


四.UCOSIII临界与任务切换过程

在UCOSIII中临界段有两种:关中断、调度器上锁,定义的临界段不同任务切换过程也有所不同。仅以系统节拍中断为例。

(1)    关中断(OS_CFG_ISR_POST_DEFERRED_EN(OS_CFG.H)=0)

关中断的方式任务切换如下图:

(2)    调度器上锁(OS_CFG_ISR_POST_DEFERRED_EN(OS_CFG.H)=1)

通过调度器上锁的方式会自动添加中断服务管理任务(OS_IntQtask(),OS_Int.c)(又名中断队列处理任务),且其任务优先级最高,在有信号或消息发布后任务切换总是运行该任务,然后自我悬挂,切换到低优先级任务。

  

五.UCOSIII信号量

信号量的作用机制:当信号量的结构体(OS_sem)中有一项数据OS_SEM_CTR(实际为char或int型)大于零时,OSsempend()直接运行通过,不产生任务调度与切换;当OS_SEM_CTR为零时,OSsempend()不能运行通过,将产生任务调度与切换,等待其他任务调用OSsempost()(使OS_SEM_CTR++,当OS_SEM_CTR大于0时引发任务调度)。

信号量在UCOSIII中主要有两个用途,一、资源的管理;二、任务同步。两者的不同在于创建信号量时对OS_SEM_CTR赋初值是否为零。OS_SEM_CTR为零时可以实现任务的同步,非零时可以实现对共享资源的管理。

 

六.UCOSIII消息队列

消息队列是为了实现任务之间的通信,其采用引用传递(指针)的方式。消息队列的数据结构为OS_Q,其中有一项数据为OS_MSG_Q,OS_MSG_Q中指向一个以OS_MSG为单元的链表,具体结构如下:

消息队列的作用原理和信号量差不多,当调用OSQpend()时消息队列中有消息,则直接运行通过,若没有则等待。当调用OSQpost()时,会向消息队列中增加消息,调度未锁时引发调度。

七.任务信号量和任务消息队列

内嵌在任务控制块(TCB)中独立存在,作用机制和信号量消息队列相同。

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

UCOSIII系统学习笔记 的相关文章

  • 从零开始一起学习SLAM | 为什么要学SLAM?

    在 零基础小白 xff0c 如何入门计算机视觉 xff1f 中我提到过 xff0c 计算机视觉的研究目前主要分为两大方向 xff1a 基于学习的方法和基于几何的方法 其中基于学习的方法最火的就是深度学习 xff0c 而基于几何方法最火的就是
  • 从零开始一起学习SLAM | 学习SLAM到底需要学什么?

    SLAM涉及的知识面很广 xff0c 我简单总结了 SLAM知识树 如下所示 xff1a xff08 公众号菜单栏回复 树 可获得清晰版 xff09 可以看到涉及的知识面还是比较广的 这里放出一张SLAM圈子里喜闻乐见的表达悲喜交加心情的漫
  • 从零开始一起学习SLAM | SLAM有什么用?

    SLAM是 Simultaneous Localization And Mapping的 英文首字母组合 xff0c 一般翻译为 xff1a 同时定位与建图 同时定位与地图构建 同时定位与地图构建 这几个词 xff0c 乍一听起来非常拗口
  • 什么是多模态机器学习?

    首先 xff0c 什么叫做模态 xff08 Modality xff09 呢 xff1f 每一种信息的来源或者形式 xff0c 都可以称为一种模态 例如 xff0c 人有触觉 xff0c 听觉 xff0c 视觉 xff0c 嗅觉 xff1b
  • 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码

    首发于公众号 xff1a 计算机视觉life 旗下知识星球 从零开始学习SLAM 这可能是最清晰讲解g2o代码框架的文章 理解图优化 xff0c 一步步带你看懂g2o框架 小白 xff1a 师兄师兄 xff0c 最近我在看SLAM的优化算法
  • 快看,那个学SLAM 的崩溃了!

    点 计算机视觉life 关注 xff0c 置顶更快接收消息 xff01 本文列举了当前优秀SLAM方案 xff0c 点出了SLAM学习者的困境 xff0c 最后打算搞点大事 请把此文转发给你认识的SLAM大神 xff0c 愿你头发浓密 xf
  • 进程保护--CrossThreadFlags标志位

    原理 xff1a 1 将进程的所有线程的线程CrossThreadFlags标志位设置成Terminated或者System 效果 xff1a 任务管理器 xff0c WSYSCheck xff0c ICESWORD无法结束进程 但PCHu
  • SLAM方向国内有哪些优秀公司?

    本文作者 张磊涛 xff0c 公众号 xff1a 计算机视觉life xff0c 编辑成员 计算机视觉life为读者整理了国内几十家涉及SLAM的优秀公司 xff0c 涵盖自动驾驶 仓储机器人 服务机器人 无人机 AR 芯片相机等领域 一
  • 解放双手——相机与IMU外参的在线标定

    本文作者 沈玥伶 xff0c 公众号 xff1a 计算机视觉life xff0c 编辑部成员 一 相机与IMU的融合 在SLAM的众多传感器解决方案中 xff0c 相机与IMU的融合被认为具有很大的潜力实现低成本且高精度的定位与建图 这是因
  • 目标检测综述

    本文作者 刘畅 xff0c 公众号计算机视觉life编辑成员 前言 图片分类任务我们已经熟悉了 xff0c 就是算法对其中的对象进行分类 而今天我们要了解构建神经网络的另一个问题 xff0c 即目标检测问题 这意味着 xff0c 我们不仅要
  • uC/OSII 和 uC/OSIII 系统特性对比

    1 uC OS系列的发展历史 uC OS Micro Controller Operating System 是一个可以基于ROM运行的 可裁剪的 抢占式 实时多任务操作系统 xff0c 具有高度可移植性 xff0c 特别适合于微处理器和控
  • 学了python,要不要再学c++

    学习笔记 学了python xff0c 要不要再学c 43 43 建议兼学c 43 43 xff0c 可以提升职业的天花板
  • Spring 的优秀工具类盘点,第 2 部分: 特殊字符转义和方法入参检测工具类

    Spring 不但提供了一个功能全面的应用开发框架 xff0c 本身还拥有众多可以在程序编写时直接使用的工具类 xff0c 您不但可以在 Spring 应用中使用这些工具类 xff0c 也可以在其它的应用中使用 xff0c 这些工具类中的大
  • 学生认证免费领取——使用阿里云服务器的Ubuntu版本,并进行图形化

    一 前言 我们学习和工作中经常需要使用Linux系统来跑程序 我们可以使用虚拟机装一个Ubuntu镜像 当然我们为了方便也可以使用阿里云的服务器 二 获取服务器 1 到阿里云官网 没有账号的同学注册一个就OK 2 搜索框搜索 学生优惠 3
  • 如何从一个小项目学习三种构建系统:glog的 CMake,Bazel,configure Makefile

    一个小项目的构建系统 glog CMake Bazel 和 configure Makefile 一 xff0c CMake 1 1下载源代码 最新的源代码主页为 xff0c 构建系统已经改为 Bazel和CMake 可从如下代码学习 xf
  • Linux内核升级全过程 手把手教你一次成功(2.4.20-8到2.6.18)

    导读 xff1a 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 时间 xff1a 2007 01 08 作者 x
  • 树莓派 arduino 电池供电方案(适用包括STM32 CC 系列所有单片机)

    很多刚入手智能单片机的朋友只会使用官方的MicroUSB口供电 xff0c 但这样在很多场合下很不方便 本文以树莓派为例 xff0c 介绍一下电池供电的方法 一 电池选择 包括树莓派在内的所有单片机都需要使用3 7V锂电池供电 xff0c
  • C语言中字符串结束符

    C语言中字符串结束符 39 0 39 39 0 39 就是8位的00000000 xff0c 为字符NULL 因为字符类型中并没有对应的这个字符 xff0c 所以这么写 39 0 39 就是字符串结束标志 1 字符串变量str 在C语言中没
  • C++服务器开发完整学习路线(含免费学习资料下载地址)

    视频资料 微信搜索公众号 高并发学习社区 关注并且发送消息 视频 C 43 43 服务器开发完整学习路线 xff08 含免费学习资料下载地址 xff09 相信大部分同学刚毕业或者想转行做c 43 43 服务端开发的时候都很迷茫不知道从哪里开
  • 百度笔试题——开发测试工程师(深圳)

    题目大致意思 一 简答题 1 设计一个自动测试方案测试软件的MTTF xff08 平均无故障时间 xff09 2 线程有执行中 xff0c 就绪中 xff0c 等待中三个状态 xff0c 请描述着三个状态和之间的转换条件 3 数据库设计要满

随机推荐

  • 王垠——从工具的奴隶到工具的主人 摘要

    王垠博客链接 xff1a http www yinwang org 重点学习 xff1a 计算机程序的构造与解释SICP 再学Paul Graham的 On Lisp 和Peter Norvig的 Paradigms of Artifici
  • 一位程序员妹纸讲述她是如何拿到美团offer的?

    作者 xff1a 只爱羽毛球的程序媛 来源 xff1a http t cn EaXy17r 美团 xff0c 我是在拉勾网上投的简历 xff0c 之前也投过一次 xff0c 简历都没通过删选 xff0c 后来让学姐帮我改了一下简历 xff0
  • 一文读懂数据中台架构体系(收藏)

    点击关注公众号 xff1a 互联网架构师 xff0c 后台回复 2T获取2TB学习资源 xff01 上一篇 xff1a Alibaba开源内网高并发编程手册 pdf 当前 xff0c 大部分企业不再建设从源数据采集到分析应用的烟囱式系统 x
  • 计算机专业走嵌入式还是纯软?

    嵌入式也分多个方向 xff0c 单片机方向 Linux方向 安卓方向 如果你是电子通信或电气自动化这种类似的专业 xff0c 你肯定要选择的是嵌入式了 xff0c 首先嵌入式对硬件基础是有要求的 xff0c 模电数电肯定都是逃不过的 xff
  • 树莓派3降低内核版本,安装Tenda U6 RTL8192无线网卡驱动

    树莓派3内置了蓝牙和wifi xff0c 但是在对网络要求比较苛刻的条件下 xff0c 出现网络质量不太好的情况 xff0c 所以买了Tenda的两款USB无线网卡 xff0c 分别是W311MA免驱版和U6 树莓派3刷了Linux内核 x
  • 使用mobaxterm连接服务器出现连接中断问题

    使用mobaxterm连接服务器 mobaxterm是一个很不错的远程连接工具 xff0c 功能也很强大 在连接到远程服务器时 xff0c 如果隔一段时间不进行操作的话 xff0c 会出现中断连接的现象 解决这个问题 xff0c 可以在se
  • Python爬虫之收藏夹

    正则表达式30分钟入门教程 在线正则表达式测试 requests中文文档 Beautiful Soup 4 2 0 中文文档
  • 树莓派 - PX4 安装教程

    留坑 xff0c 近期群上有小伙伴想要入坑 树莓派PX4 xff0c 所以想写一个基础安装教程 xff0c 如果有不合理请指出 250渣渣架子 xff0c 后期换成Q380了 准备清单 1 xff0c 树莓派Pi3 xff08 推荐这个 x
  • STM32 Systick定时器在实现1us延时时的问题与解决

    问题 xff1a 使用systick config 函数来实现计数 xff0c 这个函数在下面代码中的 SysTick CTRL TICKINT Msk 开启了中断 不论系统时钟为72Mhz或36Mhz若设置STM32每10us进入一次中断
  • VINS-MONO运行(运行VINS-Mono没有轨迹的原因)

    VINS MONO下载及编译 与github中 https github com HKUST Aerial Robotics VINS Mono的一致 下载VINS MONO文件 cd catkin ws src git clone htt
  • gitkraken汉化

    想要汉化gitkraken xff0c 上链接 xff0c 下载解压 链接 xff1a https pan baidu com s 136cQzS7 SsIazhyF1IojsQ 提取码 xff1a 0lzb 01 双击运行install
  • 使用Ubuntu系统运行C或C++程序

    查找Ubuntu系统是否有gcc软件 xff0c 输入指令which gcc 查看gcc的版本 xff0c 输入gcc version 然后就可以确定系统自带gcc编译器了 gcc用来编译C xff0c g 43 43 用来编译C 43 4
  • Ubuntu删除文件和文件夹命令

    r表示向下递归删除 f表示直接强制删除 xff0c 没有任何提示 对于文件夹的删除一般用rm rf xff08 文件夹删除必须有r xff0c 递归删除 xff09 对于文件的删除一般用rm f xff08 其实rm本身就可以完成文件删除
  • slam十四讲中Sophus库安装以及遇到so3.h找不到文件的解决

    首先安装Sophus库 xff0c 首先说明一下 xff0c 我安装的是非模板类 xff0c 非模板类相对模板类更好上手 xff0c 且我下载的slam作者提供的sophus库压缩包也是非模板类 一 下载 git clone https g
  • 解决resource not found问题

    在运行ros中的xacro文件时出现的如下问题 resource not found mbot description ROS path 0 61 opt ros melodic share ros ROS path 1 61 opt ro
  • CV::mat 学习

    原文 xff1a http blog sina com cn s blog ac1864bd010188cm html opencv从c到c 43 43 Opencv2 0版本发布后 xff0c 其新的C 43 43 接口 xff0c cv
  • pcl::pointcloud和pcl::pointcloud::Ptr区别

    后者是指针类型的点云类 定义点云的格式 xff1a pcl PointCloudpcl PointXYZ Ptr cloud Ptr new pcl PointCloudpcl PointXYZ pcl PointCloudpcl Poin
  • ROS安装 rosdep update报错解决

    https blog csdn net leida wt article details 115120940 跟这个做 xff0c 注意正文中对第五个地址的补充gbpdistro url 61 https ghproxy com 43 gb
  • Jetson Xavier 通过jetson-io配置设备树 (9)

    1 在终端输入扩展40Pin配置脚本 sudo opt nvidia jetson io jetson io py 2 选择进入Configure 40 pin expansion header 3 空格选中spi1 或者其他需要的扩展功能
  • UCOSIII系统学习笔记

    说明 xff1a 本文主要讲针对STM32的UCOSIII3 03版本的文件与内核分析 此文只是对UCOSIII粗略的讲解 xff0c 希望读者在读完后能对UCOSIII系统整体多些认识 xff0c 细节方面还请读者参考相关书籍 xff0c