......
[616/697] Compiling libraries/AC_Avoidance/AP_OAPathPlanner.cpp
[617/697] Compiling libraries/AP_ADSB/AP_ADSB.cpp
[618/697] Compiling libraries/AP_GyroFFT/AP_GyroFFT.cpp
[619/697] Compiling libraries/AP_RCTelemetry/AP_RCTelemetry.cpp
../../libraries/AP_GyroFFT/AP_GyroFFT.cpp: In member function ‘uint16_t AP_GyroFFT::run_cycle()’:
../../libraries/AP_GyroFFT/AP_GyroFFT.cpp:387:33: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
if (gyro_buffer.available() > _state->_window_size + uint16_t(_samples_per_frame >> 1)) { // half the frame size is a heuristic
^
compilation terminated due to -Wfatal-errors.
cc1plus: some warnings being treated as errors
Waf: Leaving directory `/home/ubuntu-li/ardupilot/build/sitl'
Build failed
-> task in 'objs/AP_GyroFFT/ArduCopter' failed (exit status 1):
{task 139976827606392: cxx AP_GyroFFT.cpp -> AP_GyroFFT.cpp.3.o}
(run with -v to display more information)
SIM_VEHICLE: Build failed
SIM_VEHICLE: Killing tasks
SIM_VEHICLE: kill_tasks failed: 'Process' object has no attribute 'environ'
diff --git a/libraries/AP_GyroFFT/AP_GyroFFT.cpp b/libraries/AP_GyroFFT/AP_GyroFFT.cpp
index 849be3ebe6..ebf9277f0a 100644
--- a/libraries/AP_GyroFFT/AP_GyroFFT.cpp
+++ b/libraries/AP_GyroFFT/AP_GyroFFT.cpp
@@ -384,7 +384,7 @@ uint16_t AP_GyroFFT::run_cycle()
FloatBuffer& gyro_buffer = (_sample_mode == 0 ?_ins->get_raw_gyro_window(_update_axis) : _downsampled_gyro_data[_update_axis]);
// if we have many more samples than the window size then we are struggling to
// stay ahead of the gyro loop so drop samples so that this cycle will use all available samples
- if (gyro_buffer.available() > _state->_window_size + uint16_t(_samples_per_frame >> 1)) { // half the frame size is a heuristic
+ if (gyro_buffer.available() > unsigned(_state->_window_size + uint16_t(_samples_per_frame >> 1))) { // half the frame size is a heuristic
gyro_buffer.advance(gyro_buffer.available() - _state->_window_size);
}
// let's go!
(that’s probably not the correct fix, but you probably don’t care about that!)
This code compiles in CI and is technically correct, there is something more weird going on here.
My compiler version (which it compiles fine with) is:
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
is it outdated or do I need to update it to the newest version?
open the ardupilot folder in your machine, find the ../libraries/AP_GyroFFT/AP_GyroFFT.cpp and open it.
find this the line 387: if (gyro_buffer.available() > _state->_window_size + uint16_t(_samples_per_frame >> 1)) { // half the frame size is a heuristic
change it to if (gyro_buffer.available() > unsigned(_state->_window_size + uint16_t(_samples_per_frame >> 1))) { // half the frame size is a heuristic