(学习日记)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.mzph.cn/news/832200.shtml

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

相关文章

【LLM】动手部署个人知识库助手

文章目录 动手部署个人知识库助手环境依赖项目运行总结 动手部署个人知识库助手 经过前面章节的学习,理解了LLM、向量知识库等知识,本章节开始实践部署个人知识库助手。 本次部署的项目github地址个人知识库助手项目 环境依赖 技术资源要求 CPU: Int…

MySql#MySql安装和配置

目录 一、卸载不需要的环境 二、安装mysql yum 源 三、开始安装 四、如果保证安装成功呢? 五、MySql 启动! 六、登录mysql 七、配置文件说明 八、设置开机启动! 本次安装是在Linux环境在centos7中完成 首先先将自己切换成root 一、…

分页封装类

加油,新时代打工人! package com.love.starter.common.util;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import java.util.Map;/*** 计算页开始及结束位置** author Administrator*/ public c…

MySQL数据库——20.索引

在 MySQL 中,索引是一种特殊的数据结构,用于快速查找数据库表中的数据。索引可以帮助提高查询速度,特别是对于大型数据表而言,使用索引可以大大减少查询的时间复杂度。 索引类 普通索引(Normal Index)&am…

基于springboot实现图书电子商务网站系统项目【项目源码+论文说明】

基于springboot实现图书电子商务网站系统演示 摘要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱…

flowable流程跳转或退回到网关上的用户节点后流程走不下去了

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

在Ubuntu上搭建并通过systemctl管理Minecraft Java版服务器

本教程将详细介绍如何在Ubuntu操作系统上搭建一个Minecraft Java版服务器,并使用systemctl服务来管理服务器的启动、停止和重启。同时,我们还将探讨如何通过NGINX设置TCP/UDP转发,使得玩家能够通过域名方便地连接到你的Minecraft服务器。 准…

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把…

日志中看到来自User Agent go-http-client / 1.1的大量请求(go-http-client 1.1)服务器爆了

在日志中看到来自User Agent go-http-client / 1.1的大量请求 The go-http-client/1.1 User Agent 是Google的Bot / Crawler 这不是真的。这可能是指Go库(根据您提到的来源,由Google开发,但是我找不到可靠的信息)。 之前写过“G…

如何快速找出文件夹里的全部带有中文纯中文的文件

首先,需要用到的这个工具YTool: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 步骤 1、打开工具,切换到批量复制文件 2、鼠标移到右侧,点击搜索添加 3、设定查找范围、指定为文件、勾选 包含全部子文件夹&…

FP16与BF16区别

二者都是占用16bit空间。 FP16由1个符号位、5个指数位和10个尾数位组成。FP16在表达小数时具有较高的精度,但表示的最大范围相对BF16比较小。相比BF16,在表达较大的数时更容易出现上溢的情况。BF16由1个符号位、8个指数位和7个尾数位组成。相比于FP16&a…

RFC 791 (1)-导论

目录 浅论 IP是啥 IP可以管啥 操作 范例查看 提示:本系列将会开始RFC文档阅读,这里会给出我的一些笔记 浅论 我们这篇RFC文档描述的是IP和ICMP协议,我们都知道,在传统的OSI七层或者是现在被简化的五层:应用层&…

2024年Q1季度果酒行业线上市场数据分析:女性消费力量强劲!

随着短视频推广和健康饮酒理念的盛行,果酒凭借酒精度数低、口味丰富、富含多种营养成分等优势逐渐受到了消费者的青睐。 Q1季度,消费者对果酒需求依旧旺盛。根据鲸参谋数据显示,今年Q1季度,线上电商平台(某猫&#xf…

6S管理,真的有必要吗?

工厂里的物料不知道是什么时间堆放的,不知道这个是谁的,不知道还有没有用,不知道该不该处理掉,越积越多,想要的东西总是找不着,不要的东西总是“碍手碍脚”……可怕的是大家对这一些现象习以为常。 说起6S…

搬运5款小众,无广告,实用性拉满的软件

​ 你是否喜欢一些小众且无广告的软件?如果是的话,我这边有一些给你推荐的。 1.屏幕录制——OBS Studio ​ OBS Studio是一款广泛使用的实时流媒体和屏幕录制软件,适用于Windows、MacOS、Linux平台。它采用C、C和Qt编写,提供高质…

Keepalived实现LVS高可用

6.1 KeepalivedLVS集群介绍 Keepalived和LVS共同构建了一个高效的负载均衡和高可用性解决方案:LVS作为负载均衡器,负责在集群中的多个服务器间分配流量,以其高性能和可扩展性确保应用程序能够处理大量的并发请求;而Keepalived则作…

如何使用DEEPL免费翻译PDF

如何使用DEEPL免费翻译PDF 安装DEEPL取消PDF限制 安装DEEPL 安装教程比较多,这里不重复。 把英文pdf拖进去,点翻译,在下面的框中有已经翻译完毕的文档。 但是存在两个问题 问题1:这些文档是加密的。 问题2:带有DeepL标…

C#知识|上位机UI设计-详情窗体设计思路及流程(实例)

哈喽,你好啊,我是雷工! 上两节练习记录了登录窗体和主窗体的实现过程,本节继续练习内容窗体的实现,以下为练习笔记。 01 详情窗体效果展示: 02 添加窗体并设置属性 在之前练习项目的基础上添加一个Windows窗体,设置名称为:FrmIPManage.cs 设置窗体的边框和标题栏的外…

作用域、延迟加载、数据装配与包扫描的方式创建bean

文章目录 一、作用域二、延迟加载三、类型装配四、包扫描的方式创建bean 一、作用域 容器内部默认使用的是单例模式 两种模式 单例模式 <bean id "SomeService" class"org.example.SomeService" scope"singleton" ></bean> # 备注…

flink sql 优化

文章目录 一、参数方面二、资源方面三、总结 提示&#xff1a;实时flink sql 参考很多网上方法与自己实践方法汇总(版本:flink1.13) 一、参数方面 flink sql参数配置 //关闭详细算子链(默认为true),true后job性能会略微有提升。false则可以展示更详细的DAG图方便地位性能结点…