(学习日记)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.mfbz.cn/a/598395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LSS(Lift, Splat, Shoot)算法解析

1.简介 LSS(Lift, Splat, Shoot) 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法,通过将图像特征反投影到3D空间生成伪视锥点云,通过Efficientnet算法提取云点的深度特征和图像特征并对深度信息进行估计,最终将点云特征转换到BEV空…

Minio(官方docker版)容器部署时区问题研究记录

文章目录 感慨&概述补充:MINIO_REGION和容器时间的关系 问题一:minio容器和本地容器时间不一致问题说明原因探究解决方法结果验证 问题二:minio修改时间和本地查询结果不一致具体问题原因探究解决办法时间转化工具类调用测试和验证上传文…

计算机组成结构—虚拟存储器

目录 一、虚拟存储器的基本概念 二、页式虚拟存储器 1.页表 2.快表(TLB) 3.具有 TLB 和 Cache 的多级存储系统 三、段式虚拟存储器 四、段页式虚拟存储器 五、虚拟存储器和Cache比较 早期的计算机,CPU 是直接操作主存的,也就是运行程序时&#xf…

深度学习之基于Vgg16卷积神经网络书法字体风格识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 书法是中国传统文化的重要组成部分,具有深厚的历史底蕴和独特的艺术魅力。在数字化时代&…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数(loss function&#xf…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

设计模式(十一):外观模式

设计模式(十一):外观模式 1. 外观模式的介绍2. 外观模式的类图3. 外观模式的实现3.1 创建一个接口3.2 创建接口的实现3.3 创建一个外观类3.4 测试 1. 外观模式的介绍 外观模式(Facade Pattern)属于结构型模式&#xf…

Jupyter Notebook输入python代码没智能提示

1、在Jupyter中打开控制台 2、再控制台中执行以下两个命令: pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter_contrib_nbextensions命令需要下载文件,请耐心等待。 3、执行完成后&#xff0…

202003青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下方代码段,输出的结果是(   )。 a=(1,2,3)print(type(a))A :<class ‘float’> B :<class ‘int’> C :<class ‘str’> D :<class ‘tuple’> 正确答案:D 试题解析: 第 2 题 【单选题】 content.txt中原来的内容…

第11篇:创建Nios II工程之控制多个七段数码管

Q&#xff1a;DE2-115开发板上有8个七段数码管&#xff0c;如何用PIO IP并设计Nios II工程控制呢&#xff1f; A&#xff1a;基本思路&#xff1a;DE2-115上有8个7位七段数码管&#xff0c;而一个PIO最多可配置为32位&#xff0c;如此就可以添加2个PIO都配置为28位output。 Ni…

《500 Lines or Less》(13)—— A 3D Modeller

原文 作者 原code 我用py3重写的code 3D 建模器 介绍 计算机辅助设计&#xff08;Computer-aided design, CAD&#xff09;工具允许我们在2D屏幕上查看和编辑3D对象。为此&#xff0c;CAD工具必须具有3个基本功能&#xff1a; 表示对象&#xff1a;使用一种数据结构保存和表示…

SpringBoot的@Async注解有什么坑?

前言 SpringBoot中&#xff0c;Async注解可以实现异步线程调用&#xff0c;用法简单&#xff0c;体验舒适。 但是你一定碰到过异步调用不生效的情况&#xff0c;今天这篇文章总结了Async注解的坑点&#xff0c;希望对你会有所帮助。 未启用异步支持 Spring Boot默认情况下不启…

2024年短剧小程序视频怎么下载

想在闲暇之余轻松追剧&#xff0c;但不想跳转复杂的网页或者安装多个APP吗&#xff1f;来试试2024年的短剧小程序视频下载器吧&#xff01;它是一款专门为短剧爱好者打造的视频下载工具&#xff0c;让你轻松下载任何短剧小程序视频&#xff0c;随时随地享受精彩的短剧内容&…

Python密码测试程序

下面是一个简单的 Python 密码测试程序&#xff0c;用于检查用户输入的密码是否符合一些基本的安全要求&#xff0c;如长度、包含字母和数字等。这个程序可以作为一个基本的密码验证器&#xff0c;你可以根据需要进行修改和扩展。 1、问题背景 我们正在编写一个程序&#xff0…

解决 git克隆拉取代码报SSL certificate problem错误

问题&#xff1a;拉取代码时报错&#xff0c;SSL证书问题:证书链中的自签名证书问题 解决&#xff1a;只需要关闭证书验证&#xff0c;执行下面代码即可&#xff1a; git config --global http.sslVerify "false" 再次拉取代码就可以了

ssh远程免密登录

ssh远程连接分为五个阶段 版本号协商阶段密钥和算法协商阶段认证阶段会话请求阶段交互会话阶段 而上图的SessionKey即是在阶段2&#xff1a;密钥和算法协商阶段&#xff0c;服务器端和客户端利用DH交换&#xff08;Diffie-Hellman Exchange&#xff09;算法、主机密钥对等参数…

零基础自学网络安全/Web安全(超详细入门到进阶)学完即可就业(含学习笔记)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

【前端】HTML实现个人简历信息填写页面

文章目录 前言一、综合案例&#xff1a;个人简历信息填写页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&#xff1a; Web前端学习专栏 下面我对…

OpenNJet 应用引擎:在 NGINX 基础上的云原生增强

目录 一、初识OpenNJet二、系统架构三、动手实践1.CentOS 编译环境配置1.1配置yum源&#xff1a;1.2.yum安装软件包1.3.创建符号连接 2.编译代码编译 OpenNJet执行 make 四、基本使用说明1.目录结构概述:2.常用命令: 五、部署 Web 应用程序配置文件修改启动 NJet 六、总结 一、…
最新文章