Revert "APM_RC: Modified get_last_update() to be more interrupt friendly"

This reverts commit 50ba0ce4fa41c6d4101dff8da17c267a65750522.

It didn't build, and I want to do a release based on tested code
This commit is contained in:
Andrew Tridgell 2012-11-21 21:48:02 +11:00
parent 24adc1aaa3
commit a71c7b336d
4 changed files with 9 additions and 18 deletions

View File

@ -5,5 +5,5 @@
*/
#include "APM_RC.h"
volatile uint8_t APM_RC_Class::_ppm_count;
volatile uint32_t APM_RC_Class::_last_update;

View File

@ -50,29 +50,20 @@ public:
virtual void Force_Out2_Out3(void) = 0;
virtual void Force_Out6_Out7(void) = 0;
// get the approximate time of the last radio ppm update
// - resolution of the return time in ms is defined by how often get_last_update() is called
// - _ppm_count is modified by interrupt, but type is volatile uint8_t making it atomic for reading and writting outside the interrupt
// get the time of the last radio update (_last_update modified by interrupt, so reading of variable must be interrupt safe)
virtual uint32_t get_last_update() {
static uint32_t _last_update_time = millis(); // Initialize with current time to prevent false trigger
uint32_t _tmp = _last_update;
while( _tmp != _last_update ) _tmp = _last_update;
// PPM refresh?
if( _ppm_count > 0) {
// Reset _ppm_count
_ppm_count = 0;
// Approximate time (very much so) of last update
_last_update_time = millis();
}
return _last_update_time;
return _tmp;
};
protected:
uint16_t _map_speed(uint16_t speed_hz) {
return 2000000UL / speed_hz;
}
static volatile uint8_t _ppm_count; // Modified by interrupt
static volatile uint32_t _last_update; // Modified by interrupt
};

View File

@ -58,7 +58,7 @@ void APM_RC_APM1::_timer4_capt_cb(void)
// pass through values if at least a minimum number of channels received
if( PPM_Counter >= MIN_CHANNELS ) {
_radio_status = 1;
_ppm_count++;
_last_update = millis();
}
PPM_Counter=0;
}

View File

@ -58,7 +58,7 @@ void APM_RC_APM2::_timer5_capt_cb(void)
// pass through values if at least a minimum number of channels received
if( frame_idx >= MIN_CHANNELS ) {
_radio_status = 1;
_ppm_count++;
_last_update = millis();
}
frame_idx=0;
} else {