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 有那些功能
- 错误码:很多场景我们需要返回这个操作有没有操作成功,当失败的时候有很多失败的原因。
xf_err.h
中我们收集了常用的错误,并通过枚举类型变成错误码。而且错误码对应的错误内容,也可以通过xf_err_to_name.c
中的函数,实现错误码转换成字符串,以便后续打印。 - 位操作:很多场景需要执行一些位操作。无论是使用某个位作为flag,还是说获取某个位进行操作都比较常用。但是一些与或非加上左移右移的操作。不仅一不留神容易搞错优先级的问题,可读性还不高。所以我们在
xf_bit_def.h
中总结了常用的位操作宏,方便使用。 - 链表:在写一些中间件的时候,往往链表功能。
xf_list.h
参考了linux内核中的list.h。修改了其需要gnu特性的地方,让其在c99的环境下仍然可以使用。 - attribute功能:attribute相关的内容虽然不是c99的内容。但是往往我们需要使用。比如,stm32中__weak。我们在
xf_attr.h
中总结了常用属性 - 常用宏:有些常用宏,例如:offestof、container_of、unused等功能,被放到了
xf_predef.h
中。
以上功能都是在xf_common文件夹中。除此之外还有:
- log功能:
xf_utils_log
支持不同级别的log,可以通过宏设置屏蔽等级。也支持打印数组功能。底层默认对接printf - lock功能:
xf_lcok
是防止出现竞争。竞争常常出现在中断和主函数之间公用了全局变量。或者多线程之间函数不可重入。往往这种情况需要lock功能防止出现竞争 - std功能:对于一些常用的标准库功能,该头文件提供了一层宏。以便于后续替换。
- 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移植