单位验证
OSynaptic-TX 在编码时通过 OSTX_UNIT() 宏验证单位字符串。传入无效单位时,编码函数返回 0(不发出数据包)。
OSTX_UNIT() 宏
/* 如果 "xyz" 不是已知单位代码,编译失败 */
#define MY_UNIT OSTX_UNIT("Cel")
/* 在 pack 调用中使用 */
ostx_sensor_pack(aid, "T1", OSTX_UNIT("Cel"), tid, ts, scaled, out);
支持 _Static_assert(C11)的编译器会在编译时报错。C89 目标则回退为运行时检查,失败时返回 0。
已知单位代码(部分)
完整列表见 ostx_unit_table.h。常见类别:
温度
| 代码 | 全称 |
|---|---|
Cel | 摄氏度 |
K | 开尔文 |
[degF] | 华氏度 |
湿度与气压
| 代码 | 全称 |
|---|---|
Pct | 百分比(0–100) |
kPa | 千帕 |
hPa | 百帕(毫巴) |
Pa | 帕斯卡 |
mm[Hg] | 毫米汞柱 |
浓度与空气质量
| 代码 | 全称 |
|---|---|
ppm | 百万分之一 |
ppb | 十亿分之一 |
mg/m3 | 毫克/立方米 |
ug/m3 | 微克/立方米 |
电气量
| 代码 | 全称 |
|---|---|
V | 伏特 |
mV | 毫伏 |
A | 安培 |
mA | 毫安 |
W | 瓦特 |
Wh | 瓦时 |
kWh | 千瓦时 |
Ohm | 欧姆 |
Hz | 赫兹 |
kHz | 千赫兹 |
长度、速度、加速度
| 代码 | 全称 |
|---|---|
m | 米 |
cm | 厘米 |
mm | 毫米 |
m/s | 米/秒 |
km/h | 千米/时 |
m/s2 | 米/二次方秒 |
光照与辐射
| 代码 | 全称 |
|---|---|
lx | 勒克斯 |
uW/cm2 | 微瓦/平方厘米 |
mSv | 毫希沃特 |
计数与无量纲
| 代码 | 全称 |
|---|---|
1 | 无量纲(比率) |
{count} | 原始计数 |
{rpm} | 转/分钟 |
SI 前缀规则
所有 UCUM SI 前缀均被接受:
| 前缀 | 符号 | 数量级 |
|---|---|---|
| 拍 | P | 10¹⁵ |
| 太 | T | 10¹² |
| 吉 | G | 10⁹ |
| 兆 | M | 10⁶ |
| 千 | k | 10³ |
| 百 | h | 10² |
| 分 | d | 10⁻¹ |
| 厘 | c | 10⁻² |
| 毫 | m | 10⁻³ |
| 微 | u | 10⁻⁶ |
| 纳 | n | 10⁻⁹ |