From 2d8fee908c769e201402ac5f7c98fa80098c2eb7 Mon Sep 17 00:00:00 2001 From: arwa Date: Sun, 15 Jun 2025 00:44:46 -0400 Subject: [PATCH] optmized nmbs_bitfield_write --- nanomodbus.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/nanomodbus.h b/nanomodbus.h index 8ba97df..ca8b2c6 100644 --- a/nanomodbus.h +++ b/nanomodbus.h @@ -92,24 +92,22 @@ 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) >> 3] & (0x1 << ((b) & (8 - 1))))) +#define nmbs_bitfield_read(bf, b) ((bool) ((bf)[(b) >> 3] & (0x1 << ((b) & 7)))) /** * Set a bit of the nmbs_bitfield bf at position b */ -#define nmbs_bitfield_set(bf, b) (((bf)[(b) >> 3]) = (((bf)[(b) >> 3]) | (0x1 << ((b) & (8 - 1))))) +#define nmbs_bitfield_set(bf, b) (((bf)[(b) >> 3]) = (((bf)[(b) >> 3]) | (0x1 << ((b) & 7)))) /** * Reset a bit of the nmbs_bitfield bf at position b */ -#define nmbs_bitfield_unset(bf, b) (((bf)[(b) >> 3]) = (((bf)[(b) >> 3]) & ~(0x1 << ((b) & (8 - 1))))) +#define nmbs_bitfield_unset(bf, b) (((bf)[(b) >> 3]) = (((bf)[(b) >> 3]) & ~(0x1 << ((b) & 7)))) /** * Write value v to the nmbs_bitfield bf at position b */ -#define nmbs_bitfield_write(bf, b, v) \ - (((bf)[(b) >> 3]) = ((v) ? (((bf)[(b) >> 3]) | (0x1 << ((b) & (8 - 1)))) : (((bf)[(b) >> 3]) & ~(0x1 << ((b) & (8 - 1)))))) - +#define nmbs_bitfield_write(bf, b, v) ((bf)[(b) >> 3] = ((bf)[(b) >> 3] & ~(1 << ((b) & 7))) | ((v) << ((b) & 7))) /** * Reset (zero) the whole bitfield */