从指向双精度数据的指针中获取值并分配给变量 led 系统挂在 ARM32 平台上

问题描述

这个奇怪的问题发生在 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 程序没有足够的了解。

感谢有人能帮忙解决这个问题吗?

解决方法

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

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