libraries/SPI: abs -> std::abs and cast fixes #7362
Merged
Add this suggestion to a batch that can be applied as a single commit. This suggestion is invalid because no changes were made to the code. Suggestions cannot be applied while the pull request is closed. Suggestions cannot be applied while viewing a subset of changes. Only one suggestion per line can be applied in a batch. Add this suggestion to a batch that can be applied as a single commit. Applying suggestions on deleted lines is not supported. You must change the existing code in this line in order to create a valid suggestion. Outdated suggestions cannot be applied. This suggestion has been applied or marked resolved. Suggestions cannot be applied from pending reviews. Suggestions cannot be applied on multi-line comments. Suggestions cannot be applied while the pull request is queued to merge. Suggestion cannot be applied right now. Please check back later.
Not to complicate comment chain in #6294 further
SPI library code erroneously assumed that
abs() is a C function, so include stdlib.h is required.what happens instead is Arduino.h shadows
abs()
with it's own macrofreq - calFreq
orfreq - bestFreq
may produce negative results and requireabs()
In the referenced PR, when adding
using std::abs;
it confuses GCC by introducing multiple functions named abs(), neither of which have uint32_t argument. As it turns out,uint32_t() - int32_t()
promotes touint32_t
, where old libc abs() silently converted it back toint
Fixing casts for
freq
to explicitly make it a signed int when comparing with generated values, both of which are signed.edit: noting that abs() isn't a macro and we actually want signedness