(学习日记)2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分

  • 六十五、UCOSIII:User文件夹函数概览(uC-LIB文件夹)第二部分
    • 4、uC-LIB文件夹
    • uC-LIB文件夹
      • lib_def.h文件
      • lib_math.c / lib_math.h文件
        • Math_Init
        • Math_RandSetSeed
        • Math_Rand
        • Math_RandSeed
      • lib_mem.c / lib_mem.h文件
        • Mem_Init
        • Mem_Clr
        • Mem_Set
        • Mem_Copy
        • Mem_Move
        • Mem_Cmp
        • Mem_HeapAlloc
        • Mem_HeapGetSizeRem
        • Mem_SegGetSizeRem
        • Mem_PoolClr:
        • Mem_PoolCreate:
        • Mem_PoolBlkGetNbrAvail:
        • Mem_PoolBlkGet
        • Mem_PoolBlkGetUsedAtIx
        • Mem_PoolBlkFree
        • Mem_PoolBlkIxGet
        • Mem_PoolBlkIsValidAddr
        • Mem_SegCalcTotSize
        • Mem_SegAlloc

六十五、UCOSIII:User文件夹函数概览(uC-LIB文件夹)第二部分

4、uC-LIB文件夹

这些文件通常是 Micrium OS (UC/OS-III) 提供的库文件,用于提供一些常用的功能,如ASCII字符处理、数学计算、内存操作和字符串处理等。

这些文件的功能是为了提供一些常用的工具函数,使得开发者可以更方便地进行字符处理、数学计算、内存操作和字符串处理等操作,而无需自己实现这些功能。这样可以减少重复的工作量,并提高代码的可读性和可维护性。
在这里插入图片描述

uC-LIB文件夹

这些文件通常是 Micrium OS (UC/OS-III) 提供的库文件,用于提供一些常用的功能,如ASCII字符处理、数学计算、内存操作和字符串处理等。

这些文件的功能是为了提供一些常用的工具函数,使得开发者可以更方便地进行字符处理、数学计算、内存操作和字符串处理等操作,而无需自己实现这些功能。这样可以减少重复的工作量,并提高代码的可读性和可维护性。
在这里插入图片描述

lib_def.h文件

这个头文件定义了一些通用的宏和类型定义,用于在 Micrium OS 中实现通用的功能和数据结构。
可能包括了数据类型的定义、错误码的定义、布尔值的定义等。

  1. NULL指针

    • DEF_NULL:代表空指针。
  2. 布尔值

    • DEF_FALSEDEF_TRUE:代表布尔值中的假和真。
    • DEF_NODEF_YES:另一种表示布尔值中的假和真。
  3. 开关状态

    • DEF_DISABLEDDEF_ENABLED:用于表示某个功能、模块或状态的禁用和启用。
    • DEF_INACTIVEDEF_ACTIVE:表示某个状态的非激活和激活。
    • DEF_INVALIDDEF_VALID:表示某个数据或对象的无效和有效状态。
    • DEF_OFFDEF_ON:表示开关或标志的关闭和打开状态。
    • DEF_CLRDEF_SET:表示清除和设置某个标志或状态。
  4. 函数返回值

    • DEF_FAILDEF_OK:表示函数执行结果的失败和成功。
  5. 位操作相关

    • DEF_BIT_NONE:表示没有任何位被设置。
    • DEF_BIT_00DEF_BIT_63:表示在对应位置上被设置的位。
  6. 对齐相关

    • DEF_ALIGN_MAX_NBR_OCTETS:表示数据对齐时的最大字节数。
  7. 整数相关

    • 定义了不同位数的整数类型(8位、16位、32位、64位)的最大值和最小值,以及位数相关的宏。
  8. 时间相关

    • 定义了与时间相关的常量,如每天的小时数、分钟数、秒数等,以及常见的时间单位换算。

lib_math.c / lib_math.h文件

这对文件提供了数学计算功能的实现和接口。
这里是uC/LIB库中的一个数学操作模块,主要包括了伪随机数生成器的实现。

Math_Init
  • 参数:无
    返回值:无
  • 描述:初始化数学模块,主要是设置伪随机数生成器的种子值。
    注意:使用了Math_RandSetSeed()函数将随机数生成器的种子值设置为默认值。
Math_RandSetSeed
  • 参数:seed,初始的种子值。
    返回值:无
  • 描述:设置当前伪随机数生成器的种子值。
    注意:这个函数要求在关键段中访问和更新Math_RandSeedCur以确保线程安全。
Math_Rand
  • 参数:无
    返回值:下一个伪随机数。
  • 描述:计算下一个伪随机数,通过调用Math_RandSeed()来实现。
    注意:与Math_RandSeed()函数一样,为了实现可重入性,Math_RandSeedCur必须在关键段中访问和更新。
Math_RandSeed
  • 参数:seed,用于初始化伪随机数生成器的种子值。
    返回值:下一个伪随机数。
  • 描述:根据给定的种子值计算下一个伪随机数。
    注意:这个函数是可重入的,因为它只使用了局部变量来计算下一个随机数。

lib_mem.c / lib_mem.h文件

这对文件提供了内存操作功能的实现和接口。
可能包括了内存拷贝、内存清零、内存比较等功能的实现。

Mem_Init
  • 参数:无
    返回值:无
  • 描述:初始化内存模块,主要是设置堆内存池的初始值。
    注意:该函数在编译选项中检查了内存分配功能是否启用,如果启用则进行内存池的初始化操作。
Mem_Clr
  • 参数:
    pmem:要清零的内存区域的起始地址。
    size:要清零的内存区域的大小。
    返回值:无
  • 描述:将指定内存区域的内容清零。
    注意:在清零之前进行了参数检查,确保传入的参数有效。
Mem_Set
  • 参数:
    pmem:要设置的内存区域的起始地址。
    data_val:要设置的数据值。
    size:要设置的内存区域的大小。
    返回值:无
  • 描述:将指定内存区域的内容设置为指定的数据值。
    注意:在设置内存之前进行了参数检查,确保传入的参数有效。
Mem_Copy
  • 参数:
    pdest:目标内存区域的起始地址。
    psrc:源内存区域的起始地址。
    size:要复制的内存区域的大小。
    返回值:无
  • 描述:将源内存区域的内容复制到目标内存区域。
    注意:在复制之前进行了参数检查,确保传入的参数有效,并且进行了内存对齐的优化处理。
Mem_Move
  • 参数:
    pdest:目标内存地址,将数据移动到这里。
    psrc:源内存地址,从这里获取数据。
    size:要移动的数据大小(以字节为单位)。
    返回值:无
  • 描述:将数据从源地址移动到目标地址,可以处理重叠的内存区域。如果源地址在目标地址之后,则直接调用Mem_Copy函数来完成数据复制。
Mem_Cmp
  • 参数:
    p1_mem:第一个内存区域的起始地址。
    p2_mem:第二个内存区域的起始地址。
    size:要比较的数据大小(以字节为单位)。
    返回值:如果两个内存区域相等,则返回DEF_YES,否则返回DEF_NO。
  • 描述:比较两个内存区域中的数据是否相等。该函数会逐个字节比较,如果遇到不相等的字节则立即返回。
Mem_HeapAlloc
  • 参数:
    size:要分配的内存大小(以字节为单位)。
    align:内存对齐要求(以字节为单位)。
    poctets_reqd:用于返回额外所需内存大小的指针(如果分配失败)。
    perr:用于返回函数执行状态的指针。
    返回值:如果分配成功,则返回分配的内存块的起始地址,否则返回NULL。
  • 描述:从堆中分配内存。该函数首先计算所需的内存大小,然后尝试从堆中分配内存。如果分配失败,则通过poctets_reqd返回额外所需的内存大小。
Mem_HeapGetSizeRem
  • 参数:
    align:内存对齐要求(以字节为单位)。
    perr:用于返回函数执行状态的指针。
    返回值:堆中剩余可用内存的大小(以字节为单位)。
  • 描述:获取堆中剩余可用内存的大小。该函数会考虑对齐要求,返回实际可用内存大小。
Mem_SegGetSizeRem
  • 参数:
    pmem_pool:内存池指针。
    align:内存对齐要求(以字节为单位)。
    perr:用于返回函数执行状态的指针。
    返回值:指定内存池中剩余可用内存的大小(以字节为单位)。
  • 描述:获取指定内存池中剩余可用内存的大小。函数会考虑对齐要求,返回实际可用内存大小。
Mem_PoolClr:

这个函数清除了pmem_pool指向的内存池结构。
它将MEM_POOL结构的所有字段初始化为它们的默认或初始值。
函数接受两个参数:pmem_pool,指向要清除的内存池结构的指针,和perr,一个指针,用于存储在操作过程中遇到的任何错误。

Mem_PoolCreate:

这个函数创建一个用于动态内存分配的内存池。
它初始化了一个内存池结构,并为池的块指针和块本身分配内存。
函数接受几个参数:
pmem_pool:要初始化的内存池结构的指针。
pmem_base_addr:内存池的基地址指针。如果为NULL,则函数从全局堆中分配内存。
mem_size:如果pmem_base_addr不为NULL,则是内存池的大小。
blk_nbr:要在池中分配的块数。
blk_size:每个块的大小。
blk_align:每个块的对齐要求。
poctets_reqd:一个指针,用于存储所需的额外八位字节的数量(如果有的话)。
perr:一个指针,用于存储在操作过程中遇到的任何错误。

Mem_PoolBlkGetNbrAvail:

这个函数检索内存池中可用块的数量。
它返回池中仍然可以分配的块数。
函数接受两个参数:
pmem_pool:指向内存池结构的指针。
perr:一个指针,用于存储在操作过程中遇到的任何错误。

Mem_PoolBlkGet
  • 功能:从内存池中获取一个块。
  • 参数:
    pmem_pool:指向内存池结构的指针。
    size:要获取的块的大小。
    perr:一个指针,用于存储在操作过程中遇到的任何错误。
Mem_PoolBlkGetUsedAtIx
  • 功能:根据索引从内存池中获取一个已使用的块。
  • 参数:
    pmem_pool:指向内存池结构的指针。
    used_ix:要获取的已使用块的索引。
    perr:一个指针,用于存储在操作过程中遇到的任何错误。
Mem_PoolBlkFree
  • 功能:释放内存池中的一个块。
  • 参数:
    pmem_pool:指向内存池结构的指针。
    pmem_blk:要释放的块的指针。
    perr:一个指针,用于存储在操作过程中遇到的任何错误。
Mem_PoolBlkIxGet
  • 功能:获取内存块在内存池中的索引。
  • 参数:
    pmem_pool:指向内存池结构的指针。
    pmem_blk:要查询的块的指针。
    perr:一个指针,用于存储在操作过程中遇到的任何错误。
Mem_PoolBlkIsValidAddr
  • 功能:检查给定的内存块地址是否在指定内存池的有效范围内。
  • 参数:
    pmem_pool:指向内存池结构的指针。
    pmem_blk:要检查的内存块的地址。
Mem_SegCalcTotSize
  • 功能:计算内存段的总大小,用于分配给内存池。
  • 参数:
    pmem_addr:内存段的起始地址。
    blk_nbr:内存块的数量。
    blk_size:每个内存块的大小。
    blk_align:内存块的对齐要求。
Mem_SegAlloc
  • 功能:在内存段中分配一块指定大小和对齐要求的内存块。
  • 参数:
    pmem_pool:指向内存池结构的指针。
    size:要分配的内存块的大小。
    align:内存块的对齐要求。

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

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

相关文章

【八大排序(一)】插入排序与希尔排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多排序知识 目录 1.前言2.常见排序算法3.稳定性4.插入排序4.1概念4.2直接插入排序4.3希尔排序 5.总结 …

TechTool Pro for mac中文激活版:硬件监测和系统维护工具

TechTool Pro mac帮助用户实现系统硬件监测(CPU、内存、硬盘、网络、USB等)、内存测试、S.M.A.R.T检测、磁盘宗卷扫描、宗卷重建和优化、数据恢复和粉碎等等,定期使用,可以确保您的Mac保持优化和无故障。 TechTool Pro for mac v1…

机器学习笔记(二)回归

一、线性回归 线性回归是一种用于预测的统计方法,特别适用于连续值预测。📈线性回归通过最小化误差的平方和来寻找一个线性关系,用于预测一个变量(因变量)基于一个或多个其他变量(自变量)的值。…

[Kubernetes] 集群重新初始化

文章目录 1.master节点2.worker节点3.查看结果 1.master节点 kubeadm reset清理信息: cd ~ 进入根目录ll -a 查看是否存在.kube文件 rm -rf /root/.kubesystemctl restart docker ## 重启docker systemctl restart kubelet ## 重启kubeletrm -rf /etc/cni/net.d初始化主节点…

【Canvas与艺术】绘制朝鲜国旗

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>绘制朝鲜国旗</title><style type"text/css">…

windows环境下DVWA靶场搭建

目录 一&#xff0c;安装PHPstudy 二&#xff0c;DVWA靶场上传 一&#xff0c;安装PHPstudy 具体安装步骤&#xff0c;请看上篇文章https://blog.csdn.net/m0_72210904/article/details/138258609?spm1001.2014.3001.5501 二&#xff0c;DVWA靶场上传 压缩包&#xff1a;&…

【3GPP IAB】 3GPP支持IAB架构概述

1 概述 IAB用于回传链路的无线传输&#xff0c;对于NR高频尤其重要&#xff0c;3GPP协议讨论了IAB的可能架构和部署方式&#xff0c;一起来看看吧。 2 IAB 功能和接口 IAB尽量重用为接入定义的现有功能和接口。特别是&#xff0c;移动终端(MT)、gNB- DU、gNB- CU、UPF、AMF和S…

虚拟与现实的融合:线上盲盒小程序的创新探索

随着科技的飞速发展&#xff0c;虚拟世界与现实生活之间的界限日益模糊。线上盲盒小程序&#xff0c;作为这一融合趋势的生动体现&#xff0c;以其独特的创新探索&#xff0c;将虚拟的惊喜与现实的体验完美结合&#xff0c;为我们打开了一个全新的购物世界。 线上盲盒小程序的…

VulnHub靶机 DC-9 靶机 详细渗透过程

VulnHub靶机 DC-9 打靶实战 详细渗透过程 目录 VulnHub靶机 DC-9 打靶实战 详细渗透过程一、将靶机配置导入到虚拟机当中二、渗透测试主机发现端口扫描Web渗透SQL注入登入后台文件包含SSH爆破提权 一、将靶机配置导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.…

使用QTcpSocket

(1)客户端每隔10ms向服务器发送一次数字字符串&#xff0c;从0开始。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTcpSocket> #include <QLabel> #include <QTimer> namespace Ui { class MainWindow; }class Mai…

单模与多模光纤:深入解析与应用

在现代通信系统中&#xff0c;光纤技术是不可或缺的一部分&#xff0c;它以其高速度和大容量传输数据而闻名。光纤主要分为两种类型&#xff1a;单模光纤&#xff08;Single-Mode Fiber, SMF&#xff09;和多模光纤&#xff08;Multimode Fiber, MMF&#xff09;。这两种光纤在…

Matplotlib是什么?

一、Matplotlib是什么&#xff1f; Matplotlib是一个Python语言的2D绘图库&#xff0c;它非常广泛地用于数据的可视化。以下是一些主要特点&#xff1a; 多功能性&#xff1a;它允许用户创建各种静态、动态或交互式的图表&#xff0c;如线图、散点图、直方图等。跨平台性&…

计算机视觉——使用OpenCV GrabCut算法从图像中移除背景

GrabCut算法 GrabCut算法是一种用于图像前景提取的技术&#xff0c;由Carsten Rother、Vladimir Kolmogorov和Andrew Blake三位来自英国剑桥微软研究院的研究人员共同开发。该技术的核心目标是在用户进行最少交互操作的情况下&#xff0c;自动从图像中分割出前景对象。 在Gra…

机器学习/算法工程师面试题目与答案-数学基础部分

机器学习/算法工程师面试题目--数学基础部分 一、数学基础1、微积分SGD,Momentum,Adagard,Adam原理L1不可导的时候该怎么办sigmoid函数特性 2、统计学&#xff0c;概率论求 Max(a, b) 期望拿更长的玫瑰花的最好策略最大化工作天数的员工数切比雪夫不等式随机截成三段组成三角形…

信号分解 | RLMD(鲁棒性局部均值分解)-Matlab

分解效果 RLMD(鲁棒性局部均值分解) RLMD(鲁棒性局部均值分解)-Matlab 代码实现 % %% 清除所有变量 关闭窗口 clc clear all close all%% 导入数据 % data = xlsread(Data.xlsx);%% 输入信号%% RLMD分解 %参数进行设置 % options.display =

SpringCloud系列(20)--Ribbon的简介及使用

1、Ribbon的简介 Spring Cloud Ribbon是基于Netflix Ribboh实现的一套客户端负载均衡的工具&#xff0c;简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时…

ETL中元数据处理的方式

ETLCloud平台是用于处理从数据抽取、转换、加载到持续数据捕获等一系列数据管理活动。除此之外还支持微服务治理与快速开发&#xff0c;并且具备数据库监听功能&#xff0c;能够以不同的方式监听并同步源数据库表数据到目标系统&#xff0c;比如直接传输、通过ETL流程处理或者传…

交直流充电桩检测的基础知识

交直流充电桩检测是电动汽车充电设施的重要组成部分&#xff0c;其目的是确保充电桩的正常运行&#xff0c;保障电动汽车的安全充电。以下是关于交直流充电桩检测的一些基础知识。 我们需要了解什么是交直流充电桩&#xff0c;简单来说&#xff0c;交直流充电桩是一种为电动汽车…

二维数组打印菱形(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;char arr[5][5] { { , , *, , }, { , *, *, *, },{*, *, *, *, *}, { , *, *, *, …

使用NGINX做局域网内 浏览器直接访问链接 拓展外网链接访问本地

达成目的功能&#xff1a; 在本地服务的一个文件路径下&#xff0c;局域网内用ip和路径名访问到对应的地址&#xff1b;如 10.5.9.0/v1 即可访问到 某个固定本地地址目录 V1下&#xff0c;名为index.html的文件。前言 NGINX 是一个非常流行的开源 Web 服务器和反向代理服务器…