[riot-notifications] [RIOT-OS/RIOT] core/bitarithm: introduce bitarithm_get/set_masked(), convert pca9685 (#12238)
notifications at github.com
Mon Sep 16 02:05:33 CEST 2019
### Contribution description
@gschorcht posted a collection of sensor drivers that all follow a common pattern. One neat helper function is `_set_reg_bit(uint8_t *byte, uint8_t mask, uint8_t bit)` that sets the masked bits in `byte` to the given value.
At first glance the function looks a bit odd as uses a loop to determine the lowest set bit of a compile-time constant. However, if `mask` is a compile-time constant, the compiler will [resolve the loop](https://godbolt.org/z/N_8UZD) and leave just a few instructions.
Now since this pattern is quite useful for other drivers and to keep people from trying to optimize that loop that will be optimized away - for some reason, when replacing the loop with `bitarithm_lsb()`, the compiler will *not* optimize it away (only verified by increased binary size), it's best to put it into common code.
### Testing procedure
See if `tests/driver_pca9685` still produces the same binary.
### Issues/PRs references
#10083, #10082, #10092, #10420, #10462 all come with their own copy of this function.
You can view, comment on, or merge this pull request online at:
-- Commit Summary --
* core/bitarithm: add bitarithm_get/set_masked()
* drivers/pca9685: use bitarithm_set_masked()
-- File Changes --
M core/include/bitarithm.h (41)
M drivers/pca9685/pca9685.c (30)
M tests/unittests/tests-core/tests-core-bitarithm.c (79)
-- Patch Links --
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the notifications