mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-23 04:45:37 +08:00
Merge pull request #123 from paparazzi/fw_systime
cleanup of fixedwing main using new sys_time timers
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
#ifndef LED_HW_H
|
||||
#define LED_HW_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <caml/mlvalues.h>
|
||||
#include <caml/memory.h>
|
||||
@@ -10,3 +13,6 @@ extern value * leds_closure;
|
||||
#define LED_OFF(i) { if (leds_closure) callback2(*leds_closure, Val_int(i), Val_int(0)); }
|
||||
#define LED_TOGGLE(i) { if (leds_closure) callback2(*leds_closure, Val_int(i), Val_int(2)); }
|
||||
|
||||
#define LED_PERIODIC() {}
|
||||
|
||||
#endif /* LED_HW_H */
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/* Definitions and declarations required to compile autopilot code on a
|
||||
i386 architecture. Bindings for OCaml. */
|
||||
|
||||
#define MODULES_C
|
||||
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <sys/time.h>
|
||||
@@ -24,6 +26,8 @@
|
||||
#include "subsystems/datalink/datalink.h"
|
||||
#include "generated/flight_plan.h"
|
||||
|
||||
#include "generated/modules.h"
|
||||
|
||||
#include <caml/mlvalues.h>
|
||||
#include <caml/memory.h>
|
||||
|
||||
@@ -46,13 +50,26 @@ uint16_t datalink_time = 0;
|
||||
uint8_t ac_id;
|
||||
|
||||
value sim_periodic_task(value unit) {
|
||||
periodic_task_ap();
|
||||
sensors_task();
|
||||
attitude_loop();
|
||||
reporting_task();
|
||||
modules_periodic_task();
|
||||
periodic_task_fbw();
|
||||
event_task_ap();
|
||||
event_task_fbw();
|
||||
return unit;
|
||||
}
|
||||
|
||||
value sim_monitor_task(value unit) {
|
||||
monitor_task();
|
||||
return unit;
|
||||
}
|
||||
|
||||
value sim_nav_task(value unit) {
|
||||
navigation_task();
|
||||
return unit;
|
||||
}
|
||||
|
||||
|
||||
float ftimeofday(void) {
|
||||
struct timeval t;
|
||||
|
||||
@@ -113,11 +113,6 @@ void estimator_init( void ) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
void estimator_propagate_state( void ) {
|
||||
|
||||
}
|
||||
|
||||
bool_t alt_kalman_enabled;
|
||||
|
||||
#ifdef ALT_KALMAN
|
||||
|
||||
@@ -74,7 +74,6 @@ extern float estimator_airspeed; /* m/s */
|
||||
extern float estimator_AOA; /* radians */
|
||||
|
||||
void estimator_init( void );
|
||||
void estimator_propagate_state( void );
|
||||
|
||||
void estimator_update_state_gps( void );
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ extern uint8_t telemetry_mode_Ap_DefaultChannel;
|
||||
DOWNLINK_SEND_ATTITUDE(_trans, _dev, &estimator_phi, &estimator_psi, &estimator_theta); \
|
||||
})
|
||||
|
||||
#define PERIODIC_SEND_PPRZ_MODE(_trans, _dev) DOWNLINK_SEND_PPRZ_MODE(_trans, _dev, &pprz_mode, &v_ctl_mode, &lateral_mode, &horizontal_mode, &rc_settings_mode, &mcu1_status);
|
||||
|
||||
#define PERIODIC_SEND_DESIRED(_trans, _dev) DOWNLINK_SEND_DESIRED(_trans, _dev, &h_ctl_roll_setpoint, &h_ctl_pitch_loop_setpoint, &h_ctl_course_setpoint, &desired_x, &desired_y, &v_ctl_altitude_setpoint, &v_ctl_climb_setpoint);
|
||||
|
||||
#if USE_INFRARED
|
||||
@@ -123,9 +123,15 @@ extern uint8_t telemetry_mode_Ap_DefaultChannel;
|
||||
DownlinkSendWp(_trans, _dev, i); \
|
||||
}
|
||||
|
||||
#ifdef RADIO_CONTROL_SETTINGS
|
||||
#if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
|
||||
#include "rc_settings.h"
|
||||
#define PERIODIC_SEND_PPRZ_MODE(_trans, _dev) DOWNLINK_SEND_PPRZ_MODE(_trans, _dev, &pprz_mode, &v_ctl_mode, &lateral_mode, &horizontal_mode, &rc_settings_mode, &mcu1_status);
|
||||
#define PERIODIC_SEND_SETTINGS(_trans, _dev) if (!RcSettingsOff()) DOWNLINK_SEND_SETTINGS(_trans, _dev, &slider_1_val, &slider_2_val);
|
||||
#else
|
||||
#define PERIODIC_SEND_PPRZ_MODE(_trans, _dev) { \
|
||||
uint8_t rc_settings_mode_none = 0; \
|
||||
DOWNLINK_SEND_PPRZ_MODE(_trans, _dev, &pprz_mode, &v_ctl_mode, &lateral_mode, &horizontal_mode, &rc_settings_mode_none, &mcu1_status); \
|
||||
}
|
||||
#define PERIODIC_SEND_SETTINGS(_trans, _dev) {}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -67,16 +67,12 @@ extern bool_t kill_throttle;
|
||||
|
||||
#define FLOAT_OF_PPRZ(pprz, center, travel) ((float)pprz / (float)MAX_PPRZ * travel + center)
|
||||
|
||||
extern uint8_t fatal_error_nb;
|
||||
|
||||
#define THROTTLE_THRESHOLD_TAKEOFF (pprz_t)(MAX_PPRZ * 0.9)
|
||||
|
||||
extern uint8_t lateral_mode;
|
||||
extern uint8_t vsupply;
|
||||
extern float energy;
|
||||
|
||||
extern float slider_1_val, slider_2_val;
|
||||
|
||||
extern bool_t launch;
|
||||
|
||||
extern uint8_t light_mode;
|
||||
@@ -91,8 +87,6 @@ extern bool_t sum_err_reset;
|
||||
(_mode != new_mode ? _mode = new_mode, TRUE : FALSE); \
|
||||
})
|
||||
|
||||
void periodic_task( void );
|
||||
//void telecommand_task(void);
|
||||
|
||||
#ifdef RADIO_CONTROL
|
||||
#include "subsystems/radio_control.h"
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
/** \file main.c
|
||||
* \brief main loop used both on single and dual MCU configuration */
|
||||
|
||||
/**
|
||||
* @file main.c
|
||||
* Main loop used both on single and dual MCU configuration.
|
||||
*/
|
||||
|
||||
#include "mcu_periph/sys_time.h"
|
||||
#include "led.h"
|
||||
|
||||
#ifdef FBW
|
||||
#include "firmwares/fixedwing/main_fbw.h"
|
||||
@@ -46,11 +46,8 @@ int main( void ) {
|
||||
Fbw(init);
|
||||
Ap(init);
|
||||
while (1) {
|
||||
if (sys_time_check_and_ack_timer(0)) {
|
||||
Fbw(periodic_task);
|
||||
Ap(periodic_task);
|
||||
LED_PERIODIC();
|
||||
}
|
||||
Fbw(handle_periodic_tasks);
|
||||
Ap(handle_periodic_tasks);
|
||||
Fbw(event_task);
|
||||
Ap(event_task);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -31,7 +31,13 @@
|
||||
#define AP_H
|
||||
|
||||
extern void init_ap( void );
|
||||
extern void periodic_task_ap( void );
|
||||
extern void handle_periodic_tasks_ap( void );
|
||||
extern void event_task_ap( void );
|
||||
|
||||
extern void sensors_task( void );
|
||||
extern void navigation_task( void );
|
||||
extern void monitor_task( void );
|
||||
extern void reporting_task( void );
|
||||
extern void attitude_loop( void );
|
||||
|
||||
#endif
|
||||
|
||||
@@ -55,14 +55,14 @@ uint8_t fbw_mode;
|
||||
|
||||
volatile uint8_t fbw_new_actuators = 0;
|
||||
|
||||
tid_t fbw_periodic_tid; ///< id for periodic_task_fbw() timer
|
||||
tid_t electrical_tid; ///< id for electrical_periodic() timer
|
||||
|
||||
/********** INIT *************************************************************/
|
||||
void init_fbw( void ) {
|
||||
|
||||
mcu_init();
|
||||
|
||||
sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
|
||||
|
||||
electrical_init();
|
||||
|
||||
#ifdef ACTUATORS
|
||||
@@ -83,6 +83,10 @@ void init_fbw( void ) {
|
||||
|
||||
fbw_mode = FBW_MODE_FAILSAFE;
|
||||
|
||||
/**** start timers for periodic functions *****/
|
||||
fbw_periodic_tid = sys_time_register_timer((1./60.), NULL);
|
||||
electrical_tid = sys_time_register_timer(0.1, NULL);
|
||||
|
||||
#ifndef SINGLE_MCU
|
||||
mcu_int_enable();
|
||||
#endif
|
||||
@@ -164,8 +168,6 @@ void event_task_fbw( void) {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef MCU_SPI_LINK
|
||||
if (link_mcu_received) {
|
||||
link_mcu_received = FALSE;
|
||||
@@ -180,9 +182,6 @@ void event_task_fbw( void) {
|
||||
|
||||
/************* PERIODIC ******************************************************/
|
||||
void periodic_task_fbw( void ) {
|
||||
static uint8_t _10Hz; /* FIXME : sys_time should provide it */
|
||||
_10Hz++;
|
||||
if (_10Hz >= 6) _10Hz = 0;
|
||||
|
||||
#ifdef RADIO_CONTROL
|
||||
radio_control_periodic_task();
|
||||
@@ -203,8 +202,14 @@ void periodic_task_fbw( void ) {
|
||||
fbw_downlink_periodic_task();
|
||||
#endif
|
||||
|
||||
if (!_10Hz) {
|
||||
}
|
||||
|
||||
void handle_periodic_tasks_fbw(void) {
|
||||
|
||||
if (sys_time_check_and_ack_timer(fbw_periodic_tid))
|
||||
periodic_task_fbw();
|
||||
|
||||
if (sys_time_check_and_ack_timer(electrical_tid))
|
||||
electrical_periodic();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ extern uint8_t fbw_mode;
|
||||
extern bool_t failsafe_mode;
|
||||
|
||||
void init_fbw( void );
|
||||
void handle_periodic_tasks_fbw( void );
|
||||
void periodic_task_fbw( void );
|
||||
void event_task_fbw( void );
|
||||
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
#include "inter_mcu.h"
|
||||
#include "firmwares/fixedwing/stabilization/stabilization_attitude.h"
|
||||
|
||||
uint8_t rc_settings_mode = 0;
|
||||
float slider_1_val, slider_2_val;
|
||||
|
||||
#define ParamValInt16(param_init_val, param_travel, cur_pulse, init_pulse) \
|
||||
(param_init_val + (int16_t)(((float)(cur_pulse - init_pulse)) * param_travel / (float)MAX_PPRZ))
|
||||
|
||||
@@ -23,8 +23,9 @@
|
||||
*/
|
||||
|
||||
|
||||
/** \file rc_settings.h
|
||||
* \brief Variable setting though the radio control
|
||||
/**
|
||||
* @file rc_settings.h
|
||||
* Variable setting though the radio control
|
||||
*
|
||||
* The 'rc_control' section of a XML flight plan allows the user to change the
|
||||
* value of an autopilot internal variable through the rc transmitter.
|
||||
@@ -33,6 +34,7 @@
|
||||
*/
|
||||
|
||||
#ifndef RC_SETTINGS_H
|
||||
#define RC_SETTINGS_H
|
||||
|
||||
#if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
|
||||
|
||||
@@ -43,8 +45,16 @@
|
||||
#define RC_SETTINGS_MODE_DOWN 1
|
||||
#define RC_SETTINGS_MODE_UP 2
|
||||
|
||||
/** rc settings mode
|
||||
* can be either
|
||||
* - #RC_SETTINGS_MODE_NONE
|
||||
* - #RC_SETTINGS_MODE_DOWN
|
||||
* - #RC_SETTINGS_MODE_UP
|
||||
*/
|
||||
extern uint8_t rc_settings_mode;
|
||||
|
||||
extern float slider_1_val, slider_2_val;
|
||||
|
||||
void rc_settings(bool_t mode_changed);
|
||||
|
||||
#define RcSettingsOff() (rc_settings_mode==RC_SETTINGS_MODE_NONE)
|
||||
|
||||
@@ -43,6 +43,8 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
|
||||
|
||||
let servos_period = 1./.40. (* s *)
|
||||
let periodic_period = 1./.60. (* s *)
|
||||
let nav_period = 1./.4. (* s *)
|
||||
let monitor_period = 1. (* s *)
|
||||
let rc_period = 1./.40. (* s *)
|
||||
|
||||
let msg = fun name ->
|
||||
@@ -125,6 +127,8 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
|
||||
window#show ()
|
||||
|
||||
external periodic_task : unit -> unit = "sim_periodic_task"
|
||||
external nav_task : unit -> unit = "sim_nav_task"
|
||||
external monitor_task : unit -> unit = "sim_monitor_task"
|
||||
external sim_init : unit -> unit = "sim_init"
|
||||
external update_bat : int -> unit = "update_bat"
|
||||
external update_adc1 : int -> unit = "update_adc1"
|
||||
@@ -177,6 +181,8 @@ module Make (A:Data.MISSION) (FM: FlightModel.SIG) = struct
|
||||
let boot = fun time_scale ->
|
||||
Stdlib.timer ~scale:time_scale servos_period (update_servos bat_button);
|
||||
Stdlib.timer ~scale:time_scale periodic_period periodic_task;
|
||||
Stdlib.timer ~scale:time_scale nav_period nav_task;
|
||||
Stdlib.timer ~scale:time_scale monitor_period monitor_task;
|
||||
|
||||
(* Forward or broacast messages according to "link" mode *)
|
||||
Hashtbl.iter
|
||||
|
||||
Reference in New Issue
Block a user