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