libmodbus:modbus_mapping_new() 工作不正常?

libmodbus: modbus_mapping_new() not working correctly?

我已经根据 libmodbus 库 (v3.1.4) 中的示例 (unit-test-server.c) 编写了自己的 Modbus Slave。但是,由于一个我不知道如何解决的问题,它无法正常工作:modbus_mapping_new() 函数似乎在为错误的数据分配内存?!

这就是我正在做的,根据 documentation 这应该为 7 个保持寄存器分配内存:

mb_mapping = modbus_mapping_new(0, 0, 7, 0);

实际情况是这样的:

printf("NB_BITS = %d\nSTART_BITS = %d\nNB_INPUT_BITS = %d\nSTART_INPUT_BITS = %d\nNB_INPUT_REGISTERS = %d\nSTART_INPUT_REGISTERS = %d\nNB_REGISTERS = %d\nSTART_REGISTERS = %d\n", mb_mapping->nb_bits, mb_mapping->start_bits, mb_mapping->nb_input_bits, mb_mapping->start_input_bits, mb_mapping->nb_input_registers, mb_mapping->start_input_registers, mb_mapping->nb_registers, mb_mapping->start_registers); // DEBUG OUTPUT

^^ 这些都是可以在modbus_mapping_t structure.

中设置的值

如果有人熟悉这里的 libmodbus 库:我是不是误解了文档或者这里发生了什么?

现在我遇到了 SegFault,因为 modbus_mapping_new() 还没有为我正在写入的 7 个保持寄存器分配内存。

我只是 运行 我的程序在我的 MacBook 上运行,一切正常! modbus_mapping_new() 为寄存器分配内存(在本例中为 500),Modbus 主站正在从我的从站检索正确的值。

我想这意味着我 运行 我的代码最初使用的 Nvidia Jetson TX2 的 CPU 架构有问题?!我该如何解决这个问题,以便它也可以在 Jetson 上正确 运行?

奇怪的是,几个月前我在 Jetson 上也有一次完全相同的代码 运行 完全没问题。我完全不知道可能发生了什么变化...

[编辑]

我终于弄明白了:libmodbus 版本似乎搞混了。虽然 LIBMODBUS_VERSION_STRING 变量包含最新版本“3.1.4”,但也有通过 Ubuntu 数据包源安装的 libmodbus 3.0.6。我从系统中清除了后者,并从官方 git 存储库中重新安装了 libmodbus 3.1.4。现在一切正常。