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

本文主要是介绍(学习日记)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:内存块的对齐要求。

这篇关于(学习日记)2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942862

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识