ETLCPP (Embedded Template Library)是一个针对资源受限嵌入式系统的强大C++模板库。它提供了一套高效、轻量级的容器、算法和实用工具,无需动态内存分配,完美适用于对确定性行为和资源消耗严格控制的场景。 一、 ETLCPP简介
ETLCPP并非旨在完全替代标准模板库(STL),而是作为其补充,尤其针对嵌入式系统进行优化。其设计目标主要涵盖以下三个方面:
-
• 编译时大小确定: ETLCPP中的所有容器都具有预先定义的大小或最大大小,所有内存分配都在编译时完成,避免了运行时动态内存分配带来的不确定性。这对于嵌入式系统中有限的内存资源至关重要。
-
• 兼容性与现代特性: ETLCPP兼容C++03标准,并尽可能支持C++11/14/17/20的新特性,提供更现代化的编程体验。
-
• 额外实用工具: ETLCPP包含许多STL中未提供的实用工具,例如各种校验和计算、类型安全的枚举和类型定义等,进一步提升开发效率。
二、 主要特性
ETLCPP拥有众多特性,使其成为嵌入式开发的理想选择:
-
• 跨平台性: 可在多种处理器架构和操作系统上运行。
-
• 无动态内存分配: 避免了堆内存管理的复杂性和风险。
-
• 无需运行时类型信息(RTTI): 减少了代码体积和运行时开销。
-
• 极少使用虚函数: 提升性能和代码效率。
-
• 固定容量容器: 提供了
array、bitset、deque、forward_list、list、queue、stack、vector、map、set等多种固定容量容器。 -
• 缓存友好: 容器存储为连续的内存块,提高缓存利用率。
-
• 编译时常量模板: 允许在编译时计算常量。
-
• 设计模式基类: 提供
Visitor和Observer等设计模式的基类。 -
• C++11特性反向移植: 提供了许多C++11特性在C++03环境下的实现。
-
• 类型安全枚举和类型定义: 增强代码可靠性。
-
• CRC校验和计算: 提供8、16、32和64位CRC校验。
-
• 校验和与哈希函数: 用于数据完整性验证。
-
• 变体类型: 允许在类型安全接口中存储多种类型。
-
• 错误处理机制: 提供断言、异常、错误处理程序等多种错误处理选项。
-
• 单元测试: 经过了超过9400个单元测试验证。
-
• 易于阅读和文档化的源代码: 方便学习和使用。
三、 使用方法
ETLCPP可以通过多种方式集成到项目中:
-
• 直接添加源文件: 将ETLCPP库的源文件直接添加到项目目录中,并在编译时包含相应的头文件和链接库文件。
-
• CMake集成: 使用CMake构建系统可以更方便地管理ETLCPP库。可以通过
add_subdirectory指令添加ETLCPP库,然后在目标链接库中指定etl::etl。 对于Git子模块,可能需要额外配置以允许在库根目录之外查找Git文件夹:
set(GIT_DIR_LOOKUP_POLICY ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
add_subdirectory(etl)
-
• CMake安装和
find_package: 可以使用CMake安装ETLCPP库,然后使用find_package指令查找并链接库:
find_package(etl <majorVersionRequirement>)
target_link_libraries(foo PRIVATE etl::etl)
-
• CMake FetchContent: 使用FetchContent下载和安装指定版本的ETLCPP:
Include(FetchContent)
FetchContent_Declare(
etl
GIT_REPOSITORY https://github.com/ETLCPP/etl
GIT_TAG <targetVersion>
)
FetchContent_MakeAvailable(etl)
add_executable(foo main.cpp)
target_link_libraries(foo PRIVATE etl::etl)
-
• Arduino库: ETLCPP也提供Arduino IDE的库版本,可以直接在Arduino IDE中搜索安装。
总结
ETLCPP是一个功能强大、易于使用且高度优化的C++模板库,它为嵌入式开发提供了丰富的容器、算法和实用工具。其编译时大小确定、无动态内存分配、高兼容性和丰富的特性使其成为嵌入式系统开发的理想选择。通过合理的项目集成和打包发布流程,可以有效地利用ETLCPP库提升嵌入式项目的开发效率和代码质量。
项目地址:https://github.com/ETLCPP/etl