-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
When trying to build a firmware for Controllino Micro using ModbusTCP, compilation fails. The same error can be reproduced when selecting the example Examples->ArduinoModbus->TCP->EthernetModbusServerLED in Arduino IDE (2.3.3) and trying to compile for Controllino Micro RP2040.
FQBN: controllino_rp2:rp2040:controllino_micro
Using board 'controllino_micro' from platform in folder: /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0
Using core 'rp2040' from platform in folder: /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0
...
In file included from /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/variants/controllino_micro/pins_arduino.h:212,
from /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/cores/rp2040/Arduino.h:30,
from /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/libraries/ArduinoModbus/src/libmodbus/modbus.c:23:
/home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/variants/controllino_micro/wiring.h:28:1: error: unknown type name 'class'
28 | class ControllinoPin{
| ^~~~~
/home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/variants/controllino_micro/wiring.h:28:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
28 | class ControllinoPin{
| ^
/home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/variants/controllino_micro/wiring.h:60:8: error: unknown type name 'ControllinoPin'
60 | extern ControllinoPin* getControllinoPin(int pin);
| ^~~~~~~~~~~~~~
...
Multiple libraries were found for "Ethernet.h"
Used: /home/user/projects/xxx/cool_xxx/libraries/Ethernet
Not used: /home/user/.arduino15/libraries/Ethernet
Using library Ethernet at version 2.0.2 in folder: /home/user/projects/xxx/cool_xxx/libraries/Ethernet
Using library ArduinoRS485 at version 1.1.0 in folder: /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/libraries/ArduinoRS485
Using library ArduinoModbus at version 1.0.9 in folder: /home/user/.arduino15/packages/controllino_rp2/hardware/rp2040/2.0.0/libraries/ArduinoModbus
exit status 1
Compilation error: exit status 1
The full error log from compiling the above example is attached.
The reason for this seems to be that modbus.c is a c file, but the files included by Arduino.h are cpp code using classes for ControllinoPin.
I am not an Arduino expert, and in my limited view I only see two possible solutions:
- Do not use C++ in everything included by
Arduino.h - Port libmodbus to C++ (which I tried, see below patch, it compiles, but not yet tested)
Or is there an easy workaround?
diff modbus.c modbus.cpp
726c726
< const char* template, ...)
---
> const char* template_, ...)
734,735c734,735
< va_start(ap, template);
< vfprintf(stderr, template, ap);
---
> va_start(ap, template_);
> vfprintf(stderr, template_, ap);
995,996c995,996
< uint16_t and = (req[offset + 3] << 8) + req[offset + 4];
< uint16_t or = (req[offset + 5] << 8) + req[offset + 6];
---
> uint16_t and_ = (req[offset + 3] << 8) + req[offset + 4];
> uint16_t or_ = (req[offset + 5] << 8) + req[offset + 6];
998c998
< data = (data & and) | (or & (~and));
---
> data = (data & and_) | (or_ & (~and_));
1907,1909c1907,1909
< register char *d = dest;
< register const char *s = src;
< register size_t n = dest_size;
---
> char *d = dest;
> const char *s = src;
> size_t n = dest_size;
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels