diff --git a/nanomodbus.h b/nanomodbus.h index b0c872d..8ba97df 100644 --- a/nanomodbus.h +++ b/nanomodbus.h @@ -92,23 +92,23 @@ typedef uint8_t nmbs_bitfield_256[32]; /** * Read a bit from the nmbs_bitfield bf at position b */ -#define nmbs_bitfield_read(bf, b) ((bool) ((bf)[(b) / 8] & (0x1 << ((b) % 8)))) +#define nmbs_bitfield_read(bf, b) ((bool) ((bf)[(b) >> 3] & (0x1 << ((b) & (8 - 1))))) /** * Set a bit of the nmbs_bitfield bf at position b */ -#define nmbs_bitfield_set(bf, b) (((bf)[(b) / 8]) = (((bf)[(b) / 8]) | (0x1 << ((b) % 8)))) +#define nmbs_bitfield_set(bf, b) (((bf)[(b) >> 3]) = (((bf)[(b) >> 3]) | (0x1 << ((b) & (8 - 1))))) /** * Reset a bit of the nmbs_bitfield bf at position b */ -#define nmbs_bitfield_unset(bf, b) (((bf)[(b) / 8]) = (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8)))) +#define nmbs_bitfield_unset(bf, b) (((bf)[(b) >> 3]) = (((bf)[(b) >> 3]) & ~(0x1 << ((b) & (8 - 1))))) /** * Write value v to the nmbs_bitfield bf at position b */ #define nmbs_bitfield_write(bf, b, v) \ - (((bf)[(b) / 8]) = ((v) ? (((bf)[(b) / 8]) | (0x1 << ((b) % 8))) : (((bf)[(b) / 8]) & ~(0x1 << ((b) % 8))))) + (((bf)[(b) >> 3]) = ((v) ? (((bf)[(b) >> 3]) | (0x1 << ((b) & (8 - 1)))) : (((bf)[(b) >> 3]) & ~(0x1 << ((b) & (8 - 1)))))) /** * Reset (zero) the whole bitfield