mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-26 02:43:33 +08:00
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:
committed by
Lorenz Meier
parent
72d8a4f932
commit
d150b4b084
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user