Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Only load each wide integer once in MODBUS_SET_INT*_TO_INT*() macros
If you have a union like this as part of the read data: union { uint8_t serial[6]; uint16_t serial_raw[3]; }; and do the obvious for(size_t i = 0; i < sizeof(rdng.serial_raw) / sizeof(*rdng.serial_raw); ++i) { MODBUS_SET_INT16_TO_INT8(rdng.serial, i*2, rdng.serial_raw[i]); } then because serial_raw[i] is updated through serial[i] at first, then loaded again, you end up with rdng.serial[i*2]=rdng.serial[i*2+1] for all i, which is both confusing and wrong; instead, you must do for(size_t i = 0; i < sizeof(rdng.serial_raw) / sizeof(*rdng.serial_raw); ++i) { uint16_t r = rdng.serial_raw[i]; MODBUS_SET_INT16_TO_INT8(rdng.serial, i*2, rdng.serial_raw[i]); } but there's really no reason to require this, and this patch lets you use them directly
- Loading branch information