Я написал свой собственный ведомый Modbus на основе примера (unit-test-server.c) из библиотеки libmodbus (v3.1.4).Однако, это не работает из-за проблемы, которую я не знаю, как решить: функция modbus_mapping_new (), кажется, выделяет память для неправильных данных ?!
Это то, что я делаю, и согласно документации это должно выделять память для 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 .
Если здесь есть кто-нибудь, кто знаком с библиотекой libmodbus: я неправильно понимаю документацию или что здесь происходит?
Сейчас я получаю SegFault, потому что modbus_mapping_new () не выделил память для 7с регистрами, в которые я пишу.