Skip to content

Commit

Permalink
Change output value calculation to 'round away from 0' instead 'floor…
Browse files Browse the repository at this point in the history
…'. (#358)

Change output value calculation to 'round away from 0' instead 'floor'.
Port of EdgeTX/edgetx#3292
  • Loading branch information
ajjjjjjjj authored Jun 1, 2023
1 parent 9798668 commit 313cb11
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 12 deletions.
2 changes: 0 additions & 2 deletions radio/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -379,8 +379,6 @@ foreach(FILE ${PULSES_SRC})
set(SRC ${SRC} pulses/${FILE})
endforeach()

add_definitions(-DCORRECT_NEGATIVE_SHIFTS)

if(NOT MSVC)
set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-address-of-packed-member -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits")
if(WARNINGS_AS_ERRORS)
Expand Down
12 changes: 2 additions & 10 deletions radio/src/mixer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -261,16 +261,8 @@ int16_t applyLimits(uint8_t channel, int32_t value)
value = (int32_t) value * tmp; // div by 1024*256 -> output = -1024..1024
#endif

#ifdef CORRECT_NEGATIVE_SHIFTS
int8_t sign = (value<0?1:0);
value -= sign;
tmp = value>>16; // that's quite tricky: the shiftright 16 operation is assmbled just with addressmove; just forget the two least significant bytes;
tmp >>= 2; // now one simple shift right for two bytes does the rest
tmp += sign;
#else
tmp = value>>16; // that's quite tricky: the shiftright 16 operation is assmbled just with addressmove; just forget the two least significant bytes;
tmp >>= 2; // now one simple shift right for two bytes does the rest
#endif
// Round away from 0
tmp = (value + (value < 0 ? (1<<17)-1 : (1<<17))) >> 18;

ofs += tmp; // ofs can to added directly because already recalculated,
}
Expand Down

0 comments on commit 313cb11

Please sign in to comment.