0

奇怪的问题发生在 ARM32 平台上。我需要运行一个时间序列数据库来在边缘设备上存储和处理我的传感器数据。我没有太多选择,因为一些流行的数据库无法在存储容量非常小的设备上运行。经过几个周期的评估,我发现一个开源的时间序列数据库 TDengie 似乎完全符合我的要求,因为它功能强大且足够小。但是当我在我的 ARM32 板上编译和运行它时,它会挂起整个系统。我已经在我的 X86 Linux 机器甚至 Raspberry Pi 4 上尝试过它,但它没有这样的问题。我怀疑这是仅存在于 ARM32 上的特殊错误。我花了一些时间调试。我发现它在src\query\src\qExecutor.c.

*(double *)pCtx->pOutput = *(double *)pCtx->pOutput + pInput->dsum;

它在 X86 和 Raspberry Pi 上运行良好,但在 ARM32 上总是失败。我对生成的 ARM 平台特定指令 C 程序没有足够的了解。

是否有人可以帮助解决这个问题?

4

2 回答 2

1

我想这一定是内存对齐问题。您可以检查 pCtx->pOutput 的内存地址。如果它不是一个 4 字节的值,则会导致 ARM 汇编指令 vstr 要求的总线错误。

一个快速的解决方案可能是使用临时变量来使要存储的值将临时变量的值分配给目标地址。

于 2021-07-28T04:05:49.363 回答
0

您可能想尝试 TickTock ( https://github.com/ytyou/ticktock ),这是一个轻量级的 TSDB。我们已经在 RPi 零无线(32 位)中对其进行了测试。

免责声明:我是 TickTock 的合著者。它仍在进行压力测试,尚未投入生产。

于 2021-11-27T22:15:45.000 回答