# varch **Repository Path**: Qzehao/varch ## Basic Information - **Project Name**: varch - **Description**: 嵌入式C语言常用代码模块库,包含了嵌入式中常用的算法库(查找、校验、过滤、哈希、排序等)、数据结构/容器库(通用队列、栈、堆、列表、动态数组、字符串、集合、字典、映射、图等)、解析器库(csv、ini、json、xml、yaml等)、数学库(大数运算、数学运算)、独立C语言std库、工具库等等。 具有简单、通用、高效的特点,目的为了学习以及在开发中拿来就用,提高开发效率以及代码可靠稳定性。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 195 - **Created**: 2025-11-13 - **Last Updated**: 2026-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # varch ![logo](/image/logo.png) [![Version](https://img.shields.io/badge/version-0.3.4-blue.svg)](https://gitee.com/Lamdonn/varch) [![License](https://img.shields.io/badge/license-GPL%202.0-brightgreen.svg)](LICENSE) [![Author](https://img.shields.io/badge/author-Lamdonn%20%20%20%20%20-brightblue.svg)](Lamdonn@163.com) ![Supported Platforms](https://img.shields.io/badge/platform-Linux%20&%20MinGW-yellow.svg) ## 介绍 [English version](README.en.md) varch(we-architecture,意为我们的框架库)是嵌入式C语言常用代码模块库,包含了嵌入式中常用的算法库(查找、校验、过滤、哈希、排序等)、数据结构/容器库(通用队列、栈、堆、列表、动态数组、字符串、集合、字典、映射、图等)、解析器库(csv、ini、json、xml等)、数学库(大数运算、数学运算)、独立C语言std库、工具库等等。 具有**简单, 通用, 高效**的特点,目的为了**学习**以及在开发中**拿来就用**,提高开发效率以及代码可靠稳定性。 ## 模块依赖关系 varch 项目采用模块化设计,大部分模块相互独立,只依赖标准 C 库。 ### 应用层 (00_application) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | init | 无依赖 | 无依赖 | | console | kern, command, init | 无依赖 | | main | init, kern, cPatten | 无依赖 | ### 通用模块 (01_general) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | arg | 无依赖 | 无依赖 | | calculate | 无依赖 | math, float.h | | command | 无依赖 | 无依赖 | | cPatten | 无依赖 | 无依赖 | | cQueue | 无依赖 | 无依赖 | | dList | 无依赖 | 无依赖 | | fsm | 无依赖 | 无依赖 | | kern | vthread | 无依赖 | | oscp | 无依赖 | 无依赖 | | tool | 无依赖 | sys/time | | valloc | vthread | 无依赖 | | vlog | 无依赖 | 无依赖 | | date | 无依赖 | 无依赖 | | vthread | 无依赖 | pthread (Linux/Unix)
FreeRTOS/CMSIS (MCU) | | vmcu | 无依赖 | Windows API (Windows)
cmsis_gcc.h (ARM) | ### 独立C标准库 (02_vstd) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | vctype | 无依赖 | 无依赖 | | vmath | 无依赖 | 无依赖 | | vmem | 无依赖 | 无依赖 | | vstddef | 无依赖 | 无依赖 | | vstdint | 无依赖 | 无依赖 | | vstdlib | 无依赖 | 无依赖 | | vstring | 无依赖 | 无依赖 | ### 容器库 (03_container) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | queue | 无依赖 | 无依赖 | | stack | 无依赖 | 无依赖 | | deque | 无依赖 | 无依赖 | | list | 无依赖 | 无依赖 | | vector | 无依赖 | 无依赖 | | str | 无依赖 | math | | dict | 无依赖 | 无依赖 | | heap | 无依赖 | 无依赖 | | set | 无依赖 | 无依赖 | | map | map_cfg | 无依赖 | | map_cfg | map | 无依赖 | | tree | 无依赖 | 无依赖 | | graph | 无依赖 | 无依赖 | ### 算法库 (04_algorithm) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | check | 无依赖 | 无依赖 | | crc | 无依赖 | 无依赖 | | encrypt | 无依赖 | 无依赖 | | filter | 无依赖 | math, time | | filter_mcu | filter | 无依赖 | | hash | 无依赖 | 无依赖 | | pid | 无依赖 | 无依赖 | | search | 无依赖 | math | | sort | 无依赖 | 无依赖 | ### 解析器库 (05_parser) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | csv | 无依赖 | 无依赖 | | ini | 无依赖 | 无依赖 | | json | 无依赖 | math, float.h | | txls | 无依赖 | 无依赖 | | xml | 无依赖 | 无依赖 | | yaml | 无依赖 | math, float.h | ### 性能测试 (06_performance) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | ramt | 无依赖 | 无依赖 | | romt | 无依赖 | 无依赖 | | cant | 无依赖 | 无依赖 | | slup | 无依赖 | 无依赖 | | cpul | 无依赖 | 无依赖 | | unitt | 无依赖 | math, time | ### 数学库 (07_math) | 模块 | 内部依赖 | 外部依赖 | |:------|:--------:|:--------:| | intl | intl_cfg | 无依赖 | | intl_cfg | 无依赖 | 无依赖 | | floatl | floatl_cfg | 无依赖 | | floatl_cfg | 无依赖 | 无依赖 | | flmath | floatl | math (间接) | ### 依赖总结 - **高度独立**:45个模块中,有34个模块(约75%)完全无内部依赖 - **双向依赖**:map ↔ map_cfg 是唯一的循环依赖 - **平台相关**:vthread 和 vmcu 根据平台动态链接不同外部库 - **辅助模块**:*_cfg 类模块仅提供配置支持,不影响功能独立性 ## MCU 兼容性 varch 大部分模块专为嵌入式 MCU 设计,可直接在资源受限的单片机上运行。 ### 完全兼容 (可直接使用) | 分类 | 模块 | 功能描述 | |:-----|:-----|:---------| | **02_vstd** | vctype, vmath, vmem, vstddef, vstdint, vstdlib, vstring | 独立C标准库实现,无任何外部依赖 | | **03_container** | queue, stack, deque, list, vector, str, dict, heap, set, map, tree, graph | 通用数据结构/容器 | | **04_algorithm** | check, crc, encrypt, filter_mcu, hash, pid, search, sort | 算法库 (filter_mcu 为 MCU 优化版本) | | **05_parser** | csv, ini, txls | 配置文件解析器 | | **01_general** | arg, command, cPatten, cQueue, sList, dList, fsm, oscp, vlog, date, calculate | 通用工具模块 | | **06_performance** | ramt, romt, cant, slup | RAM/ROM测试、CAN测试、串口协议 | | **07_math** | intl, floatl, flmath | 大数运算库 | ### 需适配使用 | 模块 | 外部依赖 | 适配说明 | |:-----|:---------|:---------| | **vthread** | FreeRTOS / CMSIS-RTOS | 需配置 RTOS 接口适配层 | | **vmcu** | cmsis_gcc.h (ARM) | MCU 平台抽象层,已支持 ARM Cortex-M 系列 | | **filter** | math, time | 建议使用 filter_mcu 替代 | | **json, yaml** | math, float.h | 通常可用,需确认浮点支持 | ### PC/Linux 专用 | 模块 | 原因 | |:-----|:-----| | **tool** | 依赖 sys/time (Linux/Unix 系统调用) | | **cpul** | CPU 负载测试,依赖系统调度 | | **unitt** | 单元测试框架,依赖 math/time | | **kern** | 任务调度内核,依赖 vthread | | **console** | 控制台交互,依赖 kern | ### MCU 兼容性统计 | 指标 | 数值 | |:-----|:----:| | 完全可用模块 | 40 个 | | 需适配模块 | 4 个 | | PC专用模块 | 5 个 | | **MCU 可用率** | **~89%** | > **提示**:大部分模块设计为**零依赖、高度独立**,可直接单独拷贝源文件到 MCU 项目中使用。`vmcu` 模块提供了 MCU 平台抽象层,包含内存池管理、时间管理、中断控制、原子操作等功能,方便跨平台移植。 ## 内容 | module | version | usage | path | describe | |:-------------|:---------|:-----------------------------|:------------------------------------------|:--------------------------------------| | overall | 00.03.03 | [link](README.md) | [path](./) | 整体 | init | 01.00.00 | [link](/doc/init.md) | [path](./source/00_application) | 初始化导出模块 | console | 01.00.01 | [link](/doc/console.md) | [path](./source/00_application/console) | 控制台命令输入,结合 `command` 模块,解析在控制台中输入的命令 | arg | 01.00.00 | [link](/doc/arg.md) | [path](./source/01_general) | 不定参数,获取不定参数和指定参数的个数 | calculate | 01.01.00 | [link](/doc/calculate.md) | [path](./source/01_general) | 计算模块,输入计算表达式,得到计算结果 | command | 01.00.00 | [link](/doc/command.md) | [path](./source/01_general) | 命令解析模块,输入字符串命令(类似于shell命令),执行相应的命令功能 | cPatten | 01.00.00 | [link](/doc/cPatten.md) | [path](./source/01_general) | 艺术图案字符 | cQueue | 01.00.01 | [link](/doc/cQueue.md) | [path](./source/01_general) | 通用队列控制器 | sList | 01.00.01 | [link](/doc/sList.md) | [path](./source/01_general) | 通用单链表控制器 | dList | 01.00.01 | [link](/doc/dList.md) | [path](./source/01_general) | 通用双链表控制器 | fsm | 01.00.00 | [link](/doc/fsm.md) | [path](./source/01_general) | 通用有限状态机模块 | kern | 01.00.00 | [link](/doc/kern.md) | [path](./source/01_general) | 用于调度周期性任务的内核模块主要用于varch测试 | oscp | 01.00.00 | [link](/doc/oscp.md) | [path](./source/01_general) | 模拟示波器模块,可以方便地监测波形的变量变化 | tool | 01.01.00 | [link](/doc/tool.md) | [path](./source/01_general) | 通用工具代码 | valloc | 01.00.00 | [link](/doc/valloc.md) | [path](./source/01_general) | 动态内存使用测试工具 | vlog | 01.01.00 | [link](/doc/vlog.md) | [path](./source/01_general) | 日志输出模块 | date | 01.00.00 | [link](/doc/date.md) | [path](./source/01_general) | 日期计算模块,计算日期差、打印日历等 | vctype | 01.00.00 | [link](/doc/vctype.md) | [path](./source/02_vstd) | 类似于C标准库ctype | vmath | 01.00.00 | [link](/doc/vmath.md) | [path](./source/02_vstd) | 类似于C标准库math | vmem | 01.00.00 | [link](/doc/vmem.md) | [path](./source/02_vstd) | 内存池的简单实现 | vstddef | 01.00.00 | [link](/doc/vstddef.md) | [path](./source/02_vstd) | 类似于C标准库stddef | vstdint | 01.00.00 | [link](/doc/vstdint.md) | [path](./source/02_vstd) | 类似于C标准库stdint | vstdlib | 01.00.00 | [link](/doc/vstdlib.md) | [path](./source/02_vstd) | 类似于C标准库stdlib | vstring | 01.00.00 | [link](/doc/vstring.md) | [path](./source/02_vstd) | 类似于C标准库string | queue | 01.00.00 | [link](/doc/queue.md) | [path](./source/03_container) | 通用队列容器 | stack | 01.00.00 | [link](/doc/stack.md) | [path](./source/03_container) | 通用栈式容器 | deque | 01.00.00 | [link](/doc/deque.md) | [path](./source/03_container) | 通用双端队列容器 | list | 01.00.00 | [link](/doc/list.md) | [path](./source/03_container) | 通用列表容器,单链接和支持内部迭代器 | vector | 01.00.00 | [link](/doc/vector.md) | [path](./source/03_container) | 通用向量(数组)容器 | str | 01.00.00 | [link](/doc/str.md) | [path](./source/03_container) | 字符串类 | dict | 01.00.00 | [link](/doc/dict.md) | [path](./source/03_container) | 通用字典容器,基于哈希表实现 | heap | 01.00.00 | [link](/doc/heap.md) | [path](./source/03_container) | 通用堆容器 | set | 01.00.00 | [link](/doc/set.md) | [path](./source/03_container) | 通用集合容器,基于RB-tree实现 | map | 01.00.00 | [link](/doc/map.md) | [path](./source/03_container) | 通用映射容器,基于RB-tree实现 | tree | 01.00.00 | [link](/doc/tree.md) | [path](./source/03_container) | 通用树容器 | graph | 01.00.00 | [link](/doc/graph.md) | [path](./source/03_container) | 通用图容器 | check | 01.00.00 | [link](/doc/check.md) | [path](./source/04_algorithm) | 校验算法,求和校验,奇偶校验,异或校验,LRC校验 | crc | 01.00.00 | [link](/doc/crc.md) | [path](./source/04_algorithm) | 通用标准CRC算法 | encrypt | 01.00.00 | [link](/doc/encrypt.md) | [path](./source/04_algorithm) | 加密解密算法 | filter | 01.00.00 | [link](/doc/filter.md) | [path](./source/04_algorithm) | 滤波算法,中值,卡尔曼,平均值 | hash | 01.00.00 | [link](/doc/hash.md) | [path](./source/04_algorithm) | 哈希算法,bkdr、ap、djb、js、rs、sdbm、pjw、elf、dek、bp、fnv、jdk6 | pid | 01.00.00 | [link](/doc/pid.md) | [path](./source/04_algorithm) | PID控制算法计算器 | search | 01.00.00 | [link](/doc/search.md) | [path](./source/04_algorithm) | 通用搜索算法,线性,二进制 | sort | 01.00.00 | [link](/doc/sort.md) | [path](./source/04_algorithm) | 通用排序算法(各种数据结构),冒泡排序、选择排序、插入排序、希尔排序、快速排序、堆排序 | csv | 01.00.00 | [link](/doc/csv.md) | [path](./source/05_parser) | CSV文件解析生成器 | ini | 01.00.00 | [link](/doc/ini.md) | [path](./source/05_parser) | INI配置文件解析生成器 | json | 01.00.00 | [link](/doc/json.md) | [path](./source/05_parser) | JSON文件解析生成器 | txls | 01.01.00 | [link](/doc/txls.md) | [path](./source/05_parser) | TXLS文件解析生成器 | xml | 01.00.00 | [link](/doc/xml.md) | [path](./source/05_parser) | XML文件解析生成器 | yaml | 00.01.00 | [link](/doc/yaml.md) | [path](./source/05_parser) | YAML文件解析生成器 | ramt | 01.00.00 | [link](/doc/ramt.md) | [path](./source/06_performance) | RAM测试模块 | romt | 01.00.00 | [link](/doc/romt.md) | [path](./source/06_performance) | ROM测试模块 | cant | 00.01.00 | [link](/doc/cant.md) | [path](./source/06_performance) | CAN测试模块 | slup | 00.01.00 | [link](/doc/slup.md) | [path](./source/06_performance) | 串口连接通用协议模块(serial link universal protocol) | cpul | 01.00.00 | [link](/doc/cpul.md) | [path](./source/06_performance) | CPU负载测试模块,包含获取和增加负载 | unitt | 01.00.00 | [link](/doc/unitt.md) | [path](./source/06_performance) | 简易的单元测试模块 | intl | 01.01.00 | [link](/doc/intl.md) | [path](./source/07_math) | 大型整数运算模块 | floatl | 01.01.01 | [link](/doc/floatl.md) | [path](./source/07_math) | 大型浮点数运算模块 | flmath | 01.00.00 | [link](/doc/flmath.md) | [path](./source/07_math) | 大型浮点数数学运算模块 ## 使用说明 代码在linux环境下编写编译测试,在`built`目录下的`makefile`配置需要编译的文件进行编译即可,也可以直接运行`run.sh`文件编译加运行。varch模块尽可能的保持独立,为了减少对其他模块的依赖,大部分的文件是可以直接单独拎出来就可以直接使用。如果编译存在对其他模块的依赖解决依赖问题,只是数据类型依赖的问题,完全可以参考定义所需类型即可。 ## 安装 * linux ``` make install ``` * MinGW ``` make install LIBP= ``` 例子: ``` make install LIBP=D:/MinGW ``` ## 开源协议 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 ## 联系方式 Lamdonn@163.com