px4iofirmware: fixed a bug with override handling

this fixes a race condition between the DMA completion handler
updating registers in px4io and the mixer used for handling the
override state. The register set code could set r_page_servos[]
between the time when pwm_limit_calc() is called and the servos are
actually output.
This commit is contained in:
Andrew Tridgell
2016-12-26 16:32:33 +01:00
committed by Lorenz Meier
parent 72d8a4f932
commit d150b4b084
3 changed files with 20 additions and 3 deletions
+9 -2
View File
@@ -143,6 +143,13 @@ uint16_t r_page_rc_input[] = {
*/
uint16_t r_page_scratch[32];
/**
* PAGE 8
*
* RAW PWM values
*/
uint16_t r_page_direct_pwm[PX4IO_SERVO_COUNT];
/**
* PAGE 100
*
@@ -307,7 +314,7 @@ registers_set(uint8_t page, uint8_t offset, const uint16_t *values, unsigned num
/* XXX range-check value? */
if (*values != PWM_IGNORE_THIS_CHANNEL) {
r_page_servos[offset] = *values;
r_page_direct_pwm[offset] = *values;
}
offset++;
@@ -1011,7 +1018,7 @@ registers_get(uint8_t page, uint8_t offset, uint16_t **values, unsigned *num_val
break;
case PX4IO_PAGE_DIRECT_PWM:
SELECT_PAGE(r_page_servos);
SELECT_PAGE(r_page_direct_pwm);
break;
case PX4IO_PAGE_FAILSAFE_PWM: