(学习日记)2024.05.12:UCOSIII第六十六节:常用的控制宏介绍 第二部分

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

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

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

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

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

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

点击此处进入μC/OS-iii章节总目录

2024.05.12:UCOSIII第六十六节:常用的控制宏介绍 第二部分

  • 六十九、UCOSIII:常用的控制宏介绍 第二部分
    • lib_cfg.h文件
      • 内存库配置
      • 调度器配置
      • 信号量/消息邮箱/消息队列等OS对象的配置
      • 中断配置
      • 字符串库配置
      • 是否启用内存保护、是否使用浮点运算等
      • 代码实例
      • 应用实例

六十九、UCOSIII:常用的控制宏介绍 第二部分

lib_cfg.h文件

在μC/OS-III系统中,lib_cfg.h通常包含一些配置宏和参数,用于配置uC/OS-III库的行为和功能。
这个文件允许用户对uC/OS-III的行为进行一些自定义和配置。

内存库配置

配置内存管理器的参数,如堆栈大小、堆栈大小、消息邮箱的大小等。

调度器配置

包括时钟节拍的定义、任务优先级等。

信号量/消息邮箱/消息队列等OS对象的配置

定义系统中使用的信号量、消息邮箱、消息队列的数量和属性。

中断配置

定义中断服务程序(ISR)并指定其优先级和其他属性。

字符串库配置

启用/禁用浮点数字符串函数
浮点数函数的最大有效数字个数(默认值)

是否启用内存保护、是否使用浮点运算等

在实际项目中,lib_cfg.h的内容可能因项目需求而有所不同。通常,它是根据特定应用程序的需求和硬件平台的特性进行配置的。

代码实例

下面是一个简单的示例,展示了包含在lib_cfg.h中的一些配置:

/*
*********************************************************************************************************
*                                    内存库配置
*********************************************************************************************************
*/// 启用/禁用内存库函数的外部参数检查
#define LIB_MEM_CFG_ARG_CHK_EXT_EN    DEF_ENABLED // 启用外部参数检查// 启用/禁用汇编优化的内存函数
#define LIB_MEM_CFG_OPTIMIZE_ASM_EN   DEF_ENABLED // 启用汇编优化函数// 启用/禁用内存分配函数
#define LIB_MEM_CFG_ALLOC_EN          DEF_ENABLED // 启用内存分配// 定义堆大小(27KB)
#define LIB_MEM_CFG_HEAP_SIZE         (27u * 1024u) // 堆内存大小(字节)// 定义堆内存的基地址(如果未在app_cfg.h中定义,则注释掉)
//#define LIB_MEM_CFG_HEAP_BASE_ADDR    0x00000000u/*
*********************************************************************************************************
*                                    字符串库配置
*********************************************************************************************************
*/// 启用/禁用浮点数字符串函数
#define LIB_STR_CFG_FP_EN                      DEF_DISABLED // 禁用浮点数函数// 浮点数函数的最大有效数字个数(默认值)
#define LIB_STR_CFG_FP_MAX_NBR_DIG_SIG         LIB_STR_FP_MAX_NBR_DIG_SIG_DFLT/*
*********************************************************************************************************
*                                             模块结束
*********************************************************************************************************
*/

应用实例

这些代码是用于配置内存库和字符串库的宏定义。
在实际的软件项目中,我们可以将这些宏定义添加到你的项目配置文件中,例如 app_cfg.h 或者 lib_cfg.h 中。
这些宏定义将会被编译器用来控制库的行为。

以下是一个示例,展示如何使用这些宏定义:

#include "app_cfg.h" // 包含你的项目配置文件#ifdef LIB_MEM_CFG_ARG_CHK_EXT_EN// 根据 LIB_MEM_CFG_ARG_CHK_EXT_EN 的值,选择是否启用外部参数检查#if (LIB_MEM_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)// 启用外部参数检查#define EXTERNAL_ARGUMENT_CHECK#else// 禁用外部参数检查#undef EXTERNAL_ARGUMENT_CHECK#endif
#endif#ifdef LIB_MEM_CFG_OPTIMIZE_ASM_EN// 根据 LIB_MEM_CFG_OPTIMIZE_ASM_EN 的值,选择是否启用汇编优化#if (LIB_MEM_CFG_OPTIMIZE_ASM_EN == DEF_ENABLED)// 启用汇编优化#define ASM_OPTIMIZATION#else// 禁用汇编优化#undef ASM_OPTIMIZATION#endif
#endif#ifdef LIB_MEM_CFG_ALLOC_EN// 根据 LIB_MEM_CFG_ALLOC_EN 的值,选择是否启用内存分配函数#if (LIB_MEM_CFG_ALLOC_EN == DEF_ENABLED)// 启用内存分配函数#define MEMORY_ALLOCATION_ENABLED#else// 禁用内存分配函数#undef MEMORY_ALLOCATION_ENABLED#endif
#endif#ifdef LIB_STR_CFG_FP_EN// 根据 LIB_STR_CFG_FP_EN 的值,选择是否启用浮点数字符串函数#if (LIB_STR_CFG_FP_EN == DEF_ENABLED)// 启用浮点数字符串函数#define FLOATING_POINT_STRING_FUNCTIONS#else// 禁用浮点数字符串函数#undef FLOATING_POINT_STRING_FUNCTIONS#endif
#endif// 在此处可以根据需要使用上述宏定义来控制代码的行为

在这个示例中,我们根据每个宏定义的值选择性地定义了一些预处理器宏。这些预处理器宏可以在后续的代码中用来控制特定功能的编译行为。
通过这种方式,我们可以根据需要启用或禁用不同的库功能,从而优化项目代码。

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

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

相关文章

Mybatis.net + Mysql

项目文件结构 NuGet下载Mybatis.net相关包:IBatisNet 安装完成后,会显示在,在已安装页面。同时,在管理器中的引用列表中,会多出来两个引用文件 IBatisNet.CommonIBatisNet.DataMapper 安装 Mysql.data。 注意&#xff…

AJ-Report开源数据大屏 verification;swagger-ui RCE漏洞复现

0x01 产品简介 AJ-Report是一个完全开源的BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。多数据源支持,内置mysql、elasticsearch、kudu等多种驱动,支持自定义数据集省去数据接口开发,支持17+种大屏组件,不会开发,照着设计稿也可以制作大屏。三…

亚马逊云科技AWS免费证书-EC2服务器设计(含题库)

亚马逊云AWS官方程序员专属免费证书又来了!这次证书是关于AWS EC2实例的设计和搭建,EC2作为AWS服务的核心,是学好AWS的第一步。强推没有任何AWS背景和转码的小伙伴去学!学完也能变成AWS开发大神! 证书名字叫Getting St…

Excel 中用于在一个范围中查找特定的值,并返回同一行中指定列的值 顺序不一样 可以处理吗

一、需求 Excel 中,在一列(某范围内)查找另一列特定的值,并返回同一行中另一指定列的值, 查找列和返回列的顺序不一样 二、 实现 1、下面是一个使用 INDEX 和 MATCH 函数的例子: 假设你有以下数据&…

领域驱动设计(DDD)笔记(三)后端工程架构

文章链接 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客领域驱动设计(DDD)笔记(三)后端工程架构-CSDN博客前导 领域驱动设计(Domain Driven Design,简称DDD)是业内主导的业务工程理论。它在各中权威人士被广泛讨论…

【ZYNQ】Zynq 开发流程

Zynq 芯片架构由嵌入式处理器(Processing System, PS)与可编程逻辑(Programmable Logic, PL),以及 PS 与 PL 之间的互联总线组成。本文主要介绍 Xilinx Zynq 芯片开发所使用的软件,包括 Vivado IDE 与 Xili…

ASP.NET网络在线考试系统

摘 要 随着计算机技术的发展和互联网时代的到来,人们已经进入了信息时代,也有人称为数字化时代。数在数字化的网络环境下,学生希望得到个性化的满足,根据自己的情况进行学习,同时也希望能够得到科学的评价&#xff0c…

分布式事务—> seata

分布式事务之Seata 一、什么是分布式事务? 分布式事务是一种特殊类型的事务,它涉及多个分布式系统中的节点,包括事务的参与者、支持事务的服务器、资源服务器以及事务管理器。 在分布式事务中,一次大型操作通常由多个小操作组成…

无人机+无人车:自组网协同技术及应用前景详解

无人车,也被称为自动驾驶汽车、电脑驾驶汽车或轮式移动机器人,是一种通过电脑系统实现无人驾驶的智能汽车。这种汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,使得电脑可以在没有任何人类主动操作的情况下,…

手撕vector的模拟实现

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

华为云耀云服务器开放端口

博客主页:花果山~程序猿-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一.华为云控制台开放端口 寻找到安全组信息 2. 添加开放的端口信息 3. 检查是否成…

视频编辑软件pitivi基本功之将三个相关视频合并成一个视频

视频编辑软件pitivi基本功之将三个相关视频合并成一个视频 一、素材来源:网站下载 到http://cpc.people.com.cn/GB/67481/435238/437822/437828/437900/index.html下载以下三个视频,鼠标右击视频——另存视频为 庆祝中国共产党成立100周年大会即将开始—…

【开源物联网平台】window环境下搭建调试监控设备环境

🌈 个人主页:帐篷Li 🔥 系列专栏:FastBee物联网开源项目 💪🏻 专注于简单,易用,可拓展,低成本商业化的AIOT物联网解决方案 目录 一、使用docker脚本部署zlmediakit 1.1 …

学习中遇到的问题

1.UFUNCTION() 不是所有函数都能加UFUNCTION()修饰,涉及UE反射机制。 2.初始化用{} 初始化列表 3.创建C文件时修改了路径 这时.cpp文件会报错,只需删掉前面多余路径即可

npm install报错

总结:没有安装visual studio 2017以上带有C桌面开发的版本 #开始试错 #报错总信息mingw_x64_win版本 百度网盘链接: link 提取码:3uou #尝试用mingw配置个C编译器,并配置环境变量,失败 #只认可使用VS!GIthub原址: 链接: link 上…

Java_JVM_JVMs

JVM 官方文档说明文档目录 官方文档 JVM Specification 说明 以Java SE 17为标准 文档目录 2:JVM 结构 class文件数据类型 基本数据类型引用数据类型 运行时数据区 栈帧 其他内容 对象的表示浮点数运算特殊方法 初始化方法【实例、类】多态方法 3&#xff…

IDEA 创建Servlet-HelloWorldServlet

servlet 1.创建空项目2.配置web项目3.配置Tomcat4.加载Tomcat包5.创建HelloWorldServlet类6.配置web.xml7.运行get与post请求 1.创建空项目 2.配置web项目 3.配置Tomcat 4.加载Tomcat包 5.创建HelloWorldServlet类 public class controller extends HttpServlet {Override//get…

yolov5-pytorch-Ultralytics训练+预测+报错处理记录

一、前言 玩一段时间大模型,也该回归一下图像识别。本项目用于记录使用基于Ultralytics的yolov5进行目标检测测试。为什么用Ultralytics呢?答案有3 1、其良好的生态,方便我们部署到其它语言和设备上。因此本次测试结论:大坑没有&…

第四篇:记忆的迷宫:探索计算机存储结构的奥秘与创新

记忆的迷宫:探索计算机存储结构的奥秘与创新 1 引言 1.1 计算机存储系统的发展与重要性 在现代计算技术中,存储系统承担着非常关键的角色,它不仅负责信息的持久保存,同时确保高效的数据访问速度,影响着整体系统性能的…

题目:线性代数

问题描述: 解题思路: 列相乘,然后行相加。 注意点:由于元素数据范围最大为1e6,两个元素相乘乘积最大为1e12,如果元素类型为int则在乘的过程中就会爆炸,所以需要开long long类型。 AC代码…