Hi all - I’m not sure if this is an MbedOS problem or just a C++ problem. I’ve made a class to represent a PWM device (I’m using a PCA9685 PWM controller and an STM32-F446RE dev kit). For debugging purposes I added a utility method to print messages to the console serial port over the STLINK USB. This all works great. For example, I can write:
int size = snprintf(serialBuffer, SBUFFER_SIZE - 1, "[0x%02X] Sending servo %d %d %d\r\n", _i2caddr, channel, on, off);
serial->write(serialBuffer, size);
This outputs:
[0x80] Sending servo 3 0 450
[0x80] Sending servo 3 0 500
I decided to expose this as a function to print to the serial buffer as follows:
int Adafruit_PWMServoDriver::writeToSerial(const char * format, ... ) {
if (serial) {
va_list args;
va_start(args, format);
int size = snprintf(serialBuffer, SBUFFER_SIZE - 1, format, args);
va_end(args);
return serial->write(serialBuffer, size);
}
return 0;
}
This works except for 1 major flaw - the actual variable values are completely borked. The variables are int[8|16]_t, and it seems like passing through the va_list they are being cast to integers and printing garbage.
[0x200013A0] Sending servo 38 536875936 536879264
[0x200013A0] Sending servo 38 536875936 536879264
Its not a big deal… its a convenience method for printing debug messages, but it is very odd. Is MBedOS not compiling the va_list part properly? Am I blind as a bat and can’t see something silly I’ve done?
Thanks for any input!
BR,
Richard