当前位置:   article > 正文

EKS开源系列之XF_UTILS工具库

EKS开源系列之XF_UTILS工具库

为啥要写这个中间件

当我们开发软件中间件的时候,由于不想要依赖任何库。那么无论是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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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移植

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1005880
推荐阅读
相关标签
  

闽ICP备14008679号