UCOSIII章节介绍

UCOSIII章节介绍

  • 一、第一部分(第一章 至 第三十二章)
    • 1、整体介绍
    • 2、单章介绍
      • 第一章 至 第三章:总体概览
      • 第四章 至 第五章:准备工作,配置KEIL工程环境
      • 第六章:准备工作,KEIL仿真介绍
      • 第七章:准备工作,源代码各文件功能
      • 第八章:C++函数指针
      • 第九章 至 第十四章:内核各功能学习
      • 第十五章:前十五章总结:任务切换 PendSV异常
      • 第十六章 至 第二十六章:内核各功能学习
      • 第二十七章:对第二十三章 至 二十六章总结:使用优先级的流程
      • 第二十八章:内核各功能学习
      • 第二十九章:对第二十八章总结:基于时基列表的时延操作
      • 第三十章 至 第三十二章:内核各功能学习
  • 二、第二部分(第三十三章 至 第六十章)
    • 1、整体介绍
    • 2、单章介绍
      • 第三十三章:准备工作,下载UCOSIII源码
      • 第三十四章:准备工作,配置KEIL环境
      • 第三十五章:创建任务:LED红绿蓝切换
      • 第三十六章:内核各应用学习
      • 第三十七章:对第三十六章总结:系统启动流程总结
      • 第三十八章:总结,对任务状态的总结
      • 第三十九章:内核各应用学习
      • 第四十章:总结,对任务的总结
      • 第四十一章 至 第六十章:内核各应用学习
  • 三、第三部分
    • 1、整体介绍
    • 2、单章介绍
      • 第六十一章:各文件夹功能介绍
      • 第六十二章:各文件功能概览
      • 第六十三章 至 第六十七章:User文件夹函数概览
      • 第六十八章 至 第六十七章:常用的结构体(os.h文件)

在嵌入式的学习中,对于较高性能的MCU,不可缺少的一环就是挑选操作系统。
操作系统分为硬实时系统与软实时系统,硬实时系统的代表之一就是μC/OS-III,为了方便命名文件,经常写作UCOSIII

本系列就是针对UCOSIII系统的学习,从配置Keil到移植代码,从内核的讲解到整个系统的功能分析,循序渐进地掌握UCOSIII源码,主要参考野火的UCOSIII的教程。

一、第一部分(第一章 至 第三十二章)

1、整体介绍

第一部分以μC/OS-III为蓝本,针对UCOSIII内核,将内核主要结构从0开始编写。

这一部分着重讲解μC/OS-III实现的过程, 当学完这部分之后,再来重新使用μC/OS-III或者其他RTOS,将会得心应手,做到举一反三。
在源码实现的过程中,涉及的数据类型、变量名称、函数名称、文件名称以及文件的存放目录都会完全按照μC/OS-III的来实现, 一些不必要的代码将会被剔除,但并不会影响理解整个操作系统的功能。

本部分几乎每一章都是前一章的基础,环环相扣。随着每一章的学习,一个内核的模型就会在脑中形成,每一个运行的细节都会在脑中展现。碰到的问题哪怕无法解决,也会在直觉中锁定出现的原因。

2、单章介绍

第一章 至 第三章:总体概览

第一章 至 第三章将系统最重要的三个内容粗略的概览了一下,不需要明白,之后会系统学习

第四章 至 第五章:准备工作,配置KEIL工程环境

第四章 至 第五章开始手把手新建项目,包括资源管理器新建项目 和 KEIL新建项目。

第六章:准备工作,KEIL仿真介绍

第六章 主要介绍KEIL的仿真过程,并对其中常见的错误给出了解决方案

第七章:准备工作,源代码各文件功能

第七章 详细地列举了UCOSIII各文件的作用,在后续代码编写时可以时长回头来看

第八章:C++函数指针

C++指针的一个用法,在新建任务时频繁使用

第九章 至 第十四章:内核各功能学习

九、UCOSIII:创建任务
十、UCOSIII:常用汇编指令
十一、UCOSIII:OS系统初始化
十二、UCOSIII:启动系统
十三、UCOSIII:任务切换
十四、UCOSIII:main()函数

第十五章:前十五章总结:任务切换 PendSV异常

在本系列中,总结是非常重要的一个环节。在笔者觉得必要的情况下,会将一些繁复的知识点整理,从大框架的角度将步骤化繁为简,力求三两句就能让读者明白一个复杂的程序是如何运作的。

第十五章是对前十五章的总结,但其实是对第九章至第十四章程序思路的总结,涉及任务切换以及PendSV异常的实现方法。

第十六章 至 第二十六章:内核各功能学习

十六、UCOSIII:介绍SysTick
十七、UCOSIII:任务时间片运行
十八、UCOSIII:空闲任务
十九、UCOSIII:实现阻塞延时
二十、UCOSIII:修改main()函数
二十一、UCOSIII:时间戳
二十二、UCOSIII:修改main()函数
二十三、UCOSIII:临界段
二十四、UCOSIII:就绪列表
二十五、UCOSIII:多优先级
二十六、UCOSIII:修改main()函数

第二十七章:对第二十三章 至 二十六章总结:使用优先级的流程

本章是对内核中各任务优先级的设置的思路总结,以及基于优先级的任务切换 实现方法的解释。

第二十八章:内核各功能学习

二十八、UCOSIII:时基列表

第二十九章:对第二十八章总结:基于时基列表的时延操作

继就绪列表后,我们又学习了时基列表,本章就是对时基列表的使用方法进行介绍。

第三十章 至 第三十二章:内核各功能学习

三十、UCOSIII:时间片
三十一、UCOSIII:任务的挂起和恢复
三十二、UCOSIII:任务的删除




二、第二部分(第三十三章 至 第六十章)

1、整体介绍

第二部分以野火的指南者为硬件平台,来讲解μC/OS-III的内核应用。
这部分不会再深究源码的实现,着重讲解μC/OS-III各个内核对象的使用,例如任务如何创建、优先级如何分配、 内部IPC通信机制如何使用等RTOS知识点。

2、单章介绍

第三十三章:准备工作,下载UCOSIII源码

本章介绍了源码的下载方法,对源码的文件架构进行了解释,并对常用文件进行了介绍。
建议配合第七章一起学习

第三十四章:准备工作,配置KEIL环境

本章针对指南者硬件环境 对源码进行了一些修改和替换。

第三十五章:创建任务:LED红绿蓝切换

本章主要是对第三十三章至第三十四章的一次验证,如果源码KEIL环境配置没有问题,LED就会正常闪烁。

第三十六章:内核各应用学习

三十六、UCOSIII:系统启动流程详解

第三十七章:对第三十六章总结:系统启动流程总结

本章是对系统启动流程理解明白之后,由复杂的代码总结出的简略版本。

第三十八章:总结,对任务状态的总结

经过之前的学习,我们对于任务这个概念已经相当了解了,本章就是对之前涉及的以及之后即将学习的任务状态进行一次系统的介绍,同时介绍各种状态之间的变化。

第三十九章:内核各应用学习

三十九、UCOSIII:常见任务管理函数

第四十章:总结,对任务的总结

本章是从设计者的角度来思考如何去设计一个任务,并顺便介绍了一下空闲任务。

第四十一章 至 第六十章:内核各应用学习

四十一、UCOSIII:消息队列
四十二、UCOSIII:消息队列常用函数
四十三、UCOSIII:消息队列实验
四十四、UCOSIII:信号量
四十五、UCOSIII:信号量函数接口讲解
四十六、UCOSIII:计数信号量实验
四十七、UCOSIII:互斥量
四十八、UCOSIII:互斥量函数接口讲解
四十九、UCOSIII:互斥量实验
五十、UCOSIII:事件
五十一、UCOSIII:事件函数接口
五十二、UCOSIII:事件实验
五十三、UCOSIII:软件定时器
五十四、UCOSIII:软件定时器函数接口讲解
五十五、UCOSIII:软件定时器实验
五十六、UCOSIII:任务信号量
五十七、UCOSIII:任务消息队列
五十八、UCOSIII:内存管理
五十九、UCOSIII:中断管理
六十、UCOSIII:CPU利用率及栈检测统计

三、第三部分

1、整体介绍

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。

回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后,经过几经思考,最后决定自己锦上添花,再续上几章。
这几章想达成目的如下:

  • 能够快速的上手
  • 能够控制系统的功能
  • 明白移植的过程
  • 能够根据需要的功能来裁剪源码

接下来的章节都是熟读源码后,根据笔者的整理方法,按照某种逻辑从系统源码中抽出来的专项解释。
笔者整理方法如下

  1. 各文件夹功能介绍(每个文件夹放什么文件,哪些是移植的,哪些不需要改,哪些需要修改)
  2. 各文件功能概览(每个文件都明白有哪些东西,是系统的哪一部分)
  3. 各文件函数概览(每个文件的有什么函数,函数的作用是什么,形参是什么)
  4. 移植的本质与移植的顺序(哪些文件需要了解,哪些文件是移植的时候需要更换的)
  5. 添加与裁剪源码(添功能与删功能怎么上手)
  6. 常用的结构体列表
  7. 常用宏介绍(如何用宏来控制整个系统,启用或关闭某个功能)
  8. main函数常用的结构顺序
  9. 创建任务的流程
  10. 任务在几种队列的变化

每个整理方法会用一章或多章的篇幅来解释。

2、单章介绍

第六十一章:各文件夹功能介绍

对μC/OS-iii源码中各文件夹进行介绍

第六十二章:各文件功能概览

对μC/OS-iii源码中各文件的作用进行介绍,并指出什么类型的代码会存在什么样的文件夹

第六十三章 至 第六十七章:User文件夹函数概览

详细的介绍User文件夹中所有碰到的函数,并指出如何使用它们。

第六十八章 至 第六十七章:常用的结构体(os.h文件)

详细的介绍使用内核功能时,所有常用的结构体,并给出结构体的示意图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么把试卷答案去掉再打印出来?

在学习中,试卷无疑是检验学习成果的重要工具。然而,当我们想重新练习这些试卷,加深对知识点的理解和记忆时,答案的存在往往会成为他们复习路上的“绊脚石”。那么,有没有一种方法可以轻松去除试卷上的答案,…

亚马逊云科技AWS将推出数据工程师全新认证(有资料)

AWS认证体系最近更新,在原有12张的基础上,将在2023年11月27日添加第13张,数据工程师助理级认证(Data Engineer Associate),并且在2024/1/12前半价(省75刀=544人民币。 原有的数据分析专家级认证(Data Analytics Specia…

Unity功能——开发中逻辑坐标和世界坐标是什么?

声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。 Unity功能——逻辑坐标和世界坐标 文章目录 Unity功能——逻辑坐标和世界坐标一.开发环境二.问题描…

qt-C++笔记之滑动条QSlider和QProgressBar进度条

qt-C笔记之滑动条QSlider和QProgressBar进度条 —— 2024-04-28 杭州 本例来自《Qt6 C开发指南》 文章目录 qt-C笔记之滑动条QSlider和QProgressBar进度条1.运行2.阅读笔记3.文件结构4.samp4_06.pro5.main.cpp6.widget.h7.widget.cpp8.widget.ui 1.运行 2.阅读笔记 3.文件结构…

RuoYi-Vue-Plus (SPEL 表达式)

RuoYi-Vue-Plus 中SPEL使用 DataScopeType 枚举类中: /*** 部门数据权限*/DEPT("3", " #{#deptName} #{#user.deptId} ", " 1 0 "), PlusDataPermissionHandler 拦截器中定义了解析器: buildDataFilter 方法中根据注解的…

[LitCTF 2023]Ping、[SWPUCTF 2021 新生赛]error、[NSSCTF 2022 Spring Recruit]babyphp

[LitCTF 2023]Ping 尝试ping一下127.0.0.1成功了,但要查看根目录时提示只能输入IP 查看源代码,这段JavaScript代码定义了一个名为check_ip的函数,用于验证输入是否为有效的IPv4地址。并且使用正则表达式re来匹配IPv4地址的格式。 对于这种写…

机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求,有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题,根据不断尝试,最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

科研学习|论文解读——CVPR 2021 人脸造假检测(论文合集)

随着图像合成技术的成熟,利用一张人脸照片合成假视频/不良视频现象越来越多,严重侵犯个人隐私、妨碍司法公正,所以人脸造假检测越来越重要,学术界的论文也越来越多。 一、研究1 1.1 论文题目 Multi-attentional Deepfake Detecti…

自学Python爬虫js逆向(二)chrome浏览器开发者工具的使用

js逆向中很多工作需要使用浏览器中的开发者工具,所以这里以chrome为例,先把开发者工具的使用总结一下,后面用到的时候可以回来查询。 Google Chrome浏览器的开发者工具是前端开发者的利器,它不仅提供了丰富的功能用于开发、调试和…

什么是中间件?中间件有哪些?

什么是中间件? 中间件(Middleware)是指在客户端和服务器之间的一层软件组件,用于处理请求和响应的过程。 中间件是指介于两个不同系统之间的软件组件,它可以在两个系统之间传递、处理、转换数据,以达到协…

排序算法(2)快排

交换排序 思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 一、冒泡排序 public static…

安卓手机APP开发__媒体开发部分__用户界面定制

安卓手机APP开发__媒体开发部分__用户界面定制 目录 最佳实践 播放/暂停按钮 监听状态的更新 处理可用的指令 Media3提供了一个默认的播放器视图,这个视图提供了一些定制化的选项。 对于任何进一步的定制,APP开发者都期望实现他们的自己的用户界面的…

uniapp:K线图,支持H5,APP

使用KLineChart完成K线图制作,完成效果: 1、安装KLineChart npm install klinecharts2、页面中使用 <template><view class="index"><!-- 上方选项卡 --><view class="kline-tabs"><view :style="{color: current==ite…

从零学算法135

135. 分发糖果 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0c;计算并返…

stm32单片机开发四、USART

串口的空闲状态时高电平&#xff0c;起始位是低电平&#xff0c;来打破空闲状态的高电平 必须要有停止位&#xff0c;停止位一般为一位高电平 串口常说的数据为8N1&#xff0c;其实就是8个数据位&#xff08;固定的&#xff09;&#xff0c;N就是none&#xff0c;也就是0个校验…

【多模态大模型】AI对视频内容解析问答

文章目录 1. 项目背景2. 直接对视频进行解析进行AI问答&#xff1a;MiniGPT4-Video2.1 MiniGPT4-Video效果 3. 对视频抽帧为图片再进行AI问答3.1 视频抽帧3.2 图片AI问答3.2.1 阿里通义千问大模型 Qwen-vl-plus3.2.2 Moonshot 1. 项目背景 最近在做一个项目,需要使用AI技术对视…

618科技嘉年华!五款极致科技产品,开启智能生活新篇章!

准备好迎接一年一度的618了吗&#xff1f;这不仅仅是一场购物的狂欢&#xff0c;更是一次科技的盛宴&#xff0c;一次智能生活的全新启航。今年&#xff0c;我们将带来五款令人瞩目的极致科技产品&#xff0c;它们将彻底颠覆你对智能生活的认知。从娱乐到工作&#xff0c;这些产…

百度语音识别的springboot应用

1、pom依赖 <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.16.18</version> </dependency> 2、测试的demo 创建语音识别应用 百度智能云-管理中心 (baidu.com) 代码中要…

常用图像加密技术-流密码异或加密

异或加密是最常用的一种加密方式&#xff0c;广泛的适用于图像处理领域。这种加密方式依据加密密钥生成伪随机序列与图像的像素值进行异或操作&#xff0c;使得原像素值发生变化&#xff0c;进而使得图像内容发生变化&#xff0c;达到保护图像内容的目的。 该加密方法是以图像…