您的位置:首页 > 游戏 > 手游 > EKS开源系列之XF_UTILS工具库

EKS开源系列之XF_UTILS工具库

2024/12/21 23:55:20 来源:https://blog.csdn.net/qq_42679566/article/details/141306485  浏览:    关键词:EKS开源系列之XF_UTILS工具库

EKS开源系列之XF_UTILS工具库

  • 为啥要写这个中间件
  • 这个中间件的特色
  • xf_utils 有那些功能
  • 文件夹结构
  • xf_utils API 有哪些
    • xf_check
    • xf_lock
    • xf_std
    • xf_utils_log
    • xf_common
      • xf_attribute
      • xf_bit_defs
      • xf_err
      • xf_list
      • xf_predef
      • xf_version
  • 开源链接
  • 移植教程

为啥要写这个中间件

当我们开发软件中间件的时候,由于不想要依赖任何库。那么无论是malloc还是log。我们都希望不依赖任何的sdk。也就是说,这些东西都是可以通过宏进行替换的。在写了很多代码后,大致总结了写中间件的时候常用的功能,构成了这个中间件

这个中间件的特色

这个中间件主要是为了隔离底层的依赖而创立的。所以这个组件里面的东西基本上都能通过宏进行替换。当然如果不去动它,它则会调用标准库的方式实现。当你的sdk对标准库支持不好的时候。比如 stm32 的 printf 就没法直接使用。我们就可以通过配置文件对其底层实现进行替换。

xf_utils 有那些功能

  1. 错误码:很多场景我们需要返回这个操作有没有操作成功,当失败的时候有很多失败的原因。xf_err.h中我们收集了常用的错误,并通过枚举类型变成错误码。而且错误码对应的错误内容,也可以通过xf_err_to_name.c中的函数,实现错误码转换成字符串,以便后续打印。
  2. 位操作:很多场景需要执行一些位操作。无论是使用某个位作为flag,还是说获取某个位进行操作都比较常用。但是一些与或非加上左移右移的操作。不仅一不留神容易搞错优先级的问题,可读性还不高。所以我们在xf_bit_def.h中总结了常用的位操作宏,方便使用。
  3. 链表:在写一些中间件的时候,往往链表功能。xf_list.h参考了linux内核中的list.h。修改了其需要gnu特性的地方,让其在c99的环境下仍然可以使用。
  4. attribute功能:attribute相关的内容虽然不是c99的内容。但是往往我们需要使用。比如,stm32中__weak。我们在xf_attr.h中总结了常用属性
  5. 常用宏:有些常用宏,例如:offestof、container_of、unused等功能,被放到了xf_predef.h中。

以上功能都是在xf_common文件夹中。除此之外还有:

  1. log功能:xf_utils_log 支持不同级别的log,可以通过宏设置屏蔽等级。也支持打印数组功能。底层默认对接printf
  2. lock功能:xf_lcok是防止出现竞争。竞争常常出现在中断和主函数之间公用了全局变量。或者多线程之间函数不可重入。往往这种情况需要lock功能防止出现竞争
  3. std功能:对于一些常用的标准库功能,该头文件提供了一层宏。以便于后续替换。
  4. check功能:函数对传入参数的判断(断言),可以通过宏屏蔽

文件夹结构

.
├── examples                    # xf_utils linux 使用例程
├── port                        # xf_utils linux 移植部分(主要是 lock)
├── src                         # xf_utils 仓库源码部分
│   ├── xf_check                # xf_check 断言检查库
│   │   ├── xf_check_config.h   # xf_check 配置文件,每个配置都有注释和默认配置
│   │   └── xf_check.h          # xf_check 断言检查相关宏
│   ├── xf_common               # xf_common 通用库(比较杂想不到取啥名字好)
│   │   ├── xf_attr.h           # 常用的属性宏
│   │   ├── xf_bit_defs.h       # 位操作相关宏
│   │   ├── xf_common_config.h  # xf_common 配置文件,每个配置都有注释和默认配置
│   │   ├── xf_common.h         # 收集了其它的头文件,包含在 xf_common.h 内
│   │   ├── xf_err.h            # 定义了通用的错误码
│   │   ├── xf_err_to_name.c    # 实现了错误码转换字符串功能(方便打印调试)
│   │   ├── xf_list.h           # 通用双向链表库
│   │   ├── xf_predef.h         # 定义了简单实用的宏
│   │   └── xf_version.h        # 定义了版本,以及数字/字符串版本号宏
│   ├── xf_lock                 # 定义了锁,防止出现竞争
│   ├── xf_std                  # 标准库宏定义,用于随时替换标准库实现
│   ├── xf_utils_log            # log库,对接printf,实现等级打印和串口打印
│   ├── xf_utils.h              # 统一对外调用的头文件
│   ├── xf_utils_internal_config.h # 内部配置头文件
│   └── xf_utils_port.h         # 对接lock的头文件
├── README.md
└── xmake.lua

xf_utils API 有哪些

xf_check

xf_lock

xf_std

xf_utils_log

xf_common

xf_attribute

xf_bit_defs

xf_err

xf_list

xf_predef

xf_version

开源链接

github: https://github.com/x-eks-fusion/xf_utils
gitee: https://gitee.com/x-eks-fusion/xf_utils

移植教程

xf_utils介绍视频

xf_utils stm32移植

xf_utils esp32移植

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com