TinyBench 源码解析¶
数据槽管理¶
put — 放数据到工作台¶
tiny_bench_err_t tiny_bench_put(tiny_bench_t *bench,
const char *name,
void *data, size_t len,
tiny_type_t type)
逻辑: 1. 校验参数(bench、name 非空) 2. 校验名称长度(不超过 TINY_BENCH_NAME_LEN) 3. 检查是否已存在同名槽 → 返回 ERR_EXISTS 4. 找空闲槽位 → 满则返回 ERR_FULL 5. 复制名称、存指针/长度/类型 → 标记 used = true
零拷贝关键
只复制 name 到内部表,data 只存指针。调用者保证数据在 get 前有效。
get — 取数据¶
tiny_bench_err_t tiny_bench_get(tiny_bench_t *bench,
const char *name,
void **out_data, size_t *out_len,
tiny_type_t *out_type)
逻辑: 1. 查找名称匹配的 slot 2. 如果 out_data、out_len、out_type 非空,写入对应值 3. 不存在返回 ERR_NOT_FOUND
支持只查存在性:tiny_bench_get(&bench, "x", NULL, NULL, NULL)。
list_data — 列出所有数据¶
遍历所有 slot,收集 used 槽的 name 指针到输出数组。返回写入数量。
工具注册管理¶
register_tool — 注册工具¶
tiny_bench_err_t tiny_bench_register_tool(tiny_bench_t *bench,
const char *name,
tiny_tool_fn fn,
tiny_type_t in_type,
tiny_type_t out_type)
逻辑: 1. 校验参数、名称长度 2. 检查重名 → ERR_EXISTS 3. 找空闲槽 → ERR_FULL 4. 记录名称、函数指针、输入/输出类型
get_tool_fn — 取工具函数指针¶
这是 TinyOrch 执行流程时调用的关键函数:
tiny_bench_err_t tiny_bench_get_tool_fn(tiny_bench_t *bench,
const char *name,
tiny_tool_fn *out_fn,
tiny_type_t *out_in,
tiny_type_t *out_out)
返回函数指针 + 输入/输出类型,调用者据此执行工具并做类型检查。
类型系统¶
将枚举值转为可读字符串。用于调试输出和 MQTT 响应。实现为一个简单的 switch-case:
错误处理模式¶
所有错误码统一为 tiny_bench_err_t 枚举,与 ESP-IDF 的 esp_err_t 分离以保持模块独立。调用模式: