From 508f5ebb408c4680b51a1204750d8f272207d16e Mon Sep 17 00:00:00 2001 From: Ben Laurie Date: Sun, 8 Sep 2013 06:31:14 +0100 Subject: [PATCH] |navdata| does not need to be dynamically allocated. --- sw/airborne/boards/ardrone/baro_board.c | 4 +- sw/airborne/boards/ardrone/navdata.c | 73 ++++++++++--------- sw/airborne/boards/ardrone/navdata.h | 2 +- sw/airborne/firmwares/rotorcraft/telemetry.h | 56 +++++++------- sw/airborne/subsystems/imu/imu_ardrone2_raw.h | 6 +- 5 files changed, 71 insertions(+), 70 deletions(-) diff --git a/sw/airborne/boards/ardrone/baro_board.c b/sw/airborne/boards/ardrone/baro_board.c index 4320e0a3a1..9b05dad93a 100644 --- a/sw/airborne/boards/ardrone/baro_board.c +++ b/sw/airborne/boards/ardrone/baro_board.c @@ -77,8 +77,8 @@ void process_ardrone_baro(void) { if(baro.status == BS_RUNNING) { // first read temperature because pressure calibration depends on temperature - baro.differential = baro_apply_calibration_temp(navdata->temperature_pressure); // We store the temperature in Baro-Diff - baro.absolute = baro_apply_calibration(navdata->pressure); + baro.differential = baro_apply_calibration_temp(navdata.temperature_pressure); // We store the temperature in Baro-Diff + baro.absolute = baro_apply_calibration(navdata.pressure); } else { if (baro_calibrated == TRUE) { diff --git a/sw/airborne/boards/ardrone/navdata.c b/sw/airborne/boards/ardrone/navdata.c index 69a1d66463..4f6b9d36c5 100644 --- a/sw/airborne/boards/ardrone/navdata.c +++ b/sw/airborne/boards/ardrone/navdata.c @@ -54,6 +54,8 @@ typedef struct { static navdata_port port; static int nav_fd; +measures_t navdata; + static void navdata_write(const uint8_t *buf, size_t count) { size_t written = 0; @@ -112,7 +114,6 @@ int navdata_init() cmd=0x01; navdata_write(&cmd, 1); - navdata = malloc(sizeof(measures_t)); navdata_imu_available = 0; navdata_baro_available = 0; @@ -223,7 +224,7 @@ static void baro_update_logic(void) if (lastpressval != 0) { // If pressure was updated: this is a sync error - if (lastpressval != navdata->pressure) + if (lastpressval != navdata.pressure) { // wait for temp again temp_or_press_was_updated_last = 0; @@ -241,7 +242,7 @@ static void baro_update_logic(void) if (lasttempval != 0) { // If temp was updated: this is a sync error - if (lasttempval != navdata->temperature_pressure) + if (lasttempval != navdata.temperature_pressure) { // wait for press again temp_or_press_was_updated_last = 1; @@ -252,8 +253,8 @@ static void baro_update_logic(void) navdata_baro_available = 1; } - lastpressval = navdata->pressure; - lasttempval = navdata->temperature_pressure; + lastpressval = navdata.pressure; + lasttempval = navdata.temperature_pressure; // debug // navdata->temperature_pressure = sync_errors; @@ -273,15 +274,15 @@ void navdata_update() // if ( navdata_checksum() == 0 ) { assert(sizeof navdata == NAVDATA_PACKET_SIZE); - memcpy(navdata, port.buffer, NAVDATA_PACKET_SIZE); + memcpy(&navdata, port.buffer, NAVDATA_PACKET_SIZE); // Invert byte order so that TELEMETRY works better uint8_t tmp; - uint8_t* p = (uint8_t*) &(navdata->pressure); + uint8_t* p = (uint8_t*) &(navdata.pressure); tmp = p[0]; p[0] = p[1]; p[1] = tmp; - p = (uint8_t*) &(navdata->temperature_pressure); + p = (uint8_t*) &(navdata.temperature_pressure); tmp = p[0]; p[0] = p[1]; p[1] = tmp; @@ -326,13 +327,13 @@ void navdata_CropBuffer(int cropsize) int16_t navdata_getHeight() { - if (navdata->ultrasound > 10000) { + if (navdata.ultrasound > 10000) { return previousUltrasoundHeight; } int16_t ultrasoundHeight = 0; - ultrasoundHeight = (navdata->ultrasound - 880) / 26.553; + ultrasoundHeight = (navdata.ultrasound - 880) / 26.553; previousUltrasoundHeight = ultrasoundHeight; @@ -342,32 +343,32 @@ int16_t navdata_getHeight() { // The checksum should be calculated here: we don't know the algorithm uint16_t navdata_checksum() { navdata_cks = 0; - navdata_cks += navdata->nu_trame; - navdata_cks += navdata->ax; - navdata_cks += navdata->ay; - navdata_cks += navdata->az; - navdata_cks += navdata->vx; - navdata_cks += navdata->vy; - navdata_cks += navdata->vz; - navdata_cks += navdata->temperature_acc; - navdata_cks += navdata->temperature_gyro; - navdata_cks += navdata->ultrasound; - navdata_cks += navdata->us_debut_echo; - navdata_cks += navdata->us_fin_echo; - navdata_cks += navdata->us_association_echo; - navdata_cks += navdata->us_distance_echo; - navdata_cks += navdata->us_curve_time; - navdata_cks += navdata->us_curve_value; - navdata_cks += navdata->us_curve_ref; - navdata_cks += navdata->nb_echo; - navdata_cks += navdata->sum_echo; - navdata_cks += navdata->gradient; - navdata_cks += navdata->flag_echo_ini; - navdata_cks += navdata->pressure; - navdata_cks += navdata->temperature_pressure; - navdata_cks += navdata->mx; - navdata_cks += navdata->my; - navdata_cks += navdata->mz; + navdata_cks += navdata.nu_trame; + navdata_cks += navdata.ax; + navdata_cks += navdata.ay; + navdata_cks += navdata.az; + navdata_cks += navdata.vx; + navdata_cks += navdata.vy; + navdata_cks += navdata.vz; + navdata_cks += navdata.temperature_acc; + navdata_cks += navdata.temperature_gyro; + navdata_cks += navdata.ultrasound; + navdata_cks += navdata.us_debut_echo; + navdata_cks += navdata.us_fin_echo; + navdata_cks += navdata.us_association_echo; + navdata_cks += navdata.us_distance_echo; + navdata_cks += navdata.us_curve_time; + navdata_cks += navdata.us_curve_value; + navdata_cks += navdata.us_curve_ref; + navdata_cks += navdata.nb_echo; + navdata_cks += navdata.sum_echo; + navdata_cks += navdata.gradient; + navdata_cks += navdata.flag_echo_ini; + navdata_cks += navdata.pressure; + navdata_cks += navdata.temperature_pressure; + navdata_cks += navdata.mx; + navdata_cks += navdata.my; + navdata_cks += navdata.mz; // navdata_cks += navdata->chksum; return 0; // we dont know how to calculate the checksum diff --git a/sw/airborne/boards/ardrone/navdata.h b/sw/airborne/boards/ardrone/navdata.h index bd29297d81..1238663049 100644 --- a/sw/airborne/boards/ardrone/navdata.h +++ b/sw/airborne/boards/ardrone/navdata.h @@ -94,7 +94,7 @@ struct bmp180_baro_calibration int32_t b5; }; -measures_t* navdata; +extern measures_t navdata; struct bmp180_baro_calibration baro_calibration; uint16_t navdata_cks; uint8_t navdata_imu_available; diff --git a/sw/airborne/firmwares/rotorcraft/telemetry.h b/sw/airborne/firmwares/rotorcraft/telemetry.h index 4891f0a0df..5a6916b984 100644 --- a/sw/airborne/firmwares/rotorcraft/telemetry.h +++ b/sw/airborne/firmwares/rotorcraft/telemetry.h @@ -956,34 +956,34 @@ #ifdef ARDRONE2_RAW #include "navdata.h" #define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) DOWNLINK_SEND_ARDRONE_NAVDATA(_trans, _dev, \ - &navdata->taille, \ - &navdata->nu_trame, \ - &navdata->ax, \ - &navdata->ay, \ - &navdata->az, \ - &navdata->vx, \ - &navdata->vy, \ - &navdata->vz, \ - &navdata->temperature_acc, \ - &navdata->temperature_gyro, \ - &navdata->ultrasound, \ - &navdata->us_debut_echo, \ - &navdata->us_fin_echo, \ - &navdata->us_association_echo, \ - &navdata->us_distance_echo, \ - &navdata->us_curve_time, \ - &navdata->us_curve_value, \ - &navdata->us_curve_ref, \ - &navdata->nb_echo, \ - &navdata->sum_echo, \ - &navdata->gradient, \ - &navdata->flag_echo_ini, \ - &navdata->pressure, \ - &navdata->temperature_pressure, \ - &navdata->mx, \ - &navdata->my, \ - &navdata->mz, \ - &navdata->chksum \ + &navdata.taille, \ + &navdata.nu_trame, \ + &navdata.ax, \ + &navdata.ay, \ + &navdata.az, \ + &navdata.vx, \ + &navdata.vy, \ + &navdata.vz, \ + &navdata.temperature_acc, \ + &navdata.temperature_gyro, \ + &navdata.ultrasound, \ + &navdata.us_debut_echo, \ + &navdata.us_fin_echo, \ + &navdata.us_association_echo, \ + &navdata.us_distance_echo, \ + &navdata.us_curve_time, \ + &navdata.us_curve_value, \ + &navdata.us_curve_ref, \ + &navdata.nb_echo, \ + &navdata.sum_echo, \ + &navdata.gradient, \ + &navdata.flag_echo_ini, \ + &navdata.pressure, \ + &navdata.temperature_pressure, \ + &navdata.mx, \ + &navdata.my, \ + &navdata.mz, \ + &navdata.chksum \ ) #else #define PERIODIC_SEND_ARDRONE_NAVDATA(_trans, _dev) {} diff --git a/sw/airborne/subsystems/imu/imu_ardrone2_raw.h b/sw/airborne/subsystems/imu/imu_ardrone2_raw.h index 18b1b1bbad..cbc7c33b19 100644 --- a/sw/airborne/subsystems/imu/imu_ardrone2_raw.h +++ b/sw/airborne/subsystems/imu/imu_ardrone2_raw.h @@ -116,9 +116,9 @@ static inline void imu_ardrone2_event ( void (* _gyro_handler)(void), void (* _a //checks if the navboard has a new dataset ready if (navdata_imu_available == TRUE) { navdata_imu_available = FALSE; - RATES_ASSIGN(imu.gyro_unscaled, navdata->vx, -navdata->vy, -navdata->vz); - VECT3_ASSIGN(imu.accel_unscaled, navdata->ax, 4096-navdata->ay, 4096-navdata->az); - VECT3_ASSIGN(imu.mag_unscaled, -navdata->mx, -navdata->my, -navdata->mz); + RATES_ASSIGN(imu.gyro_unscaled, navdata.vx, -navdata.vy, -navdata.vz); + VECT3_ASSIGN(imu.accel_unscaled, navdata.ax, 4096-navdata.ay, 4096-navdata.az); + VECT3_ASSIGN(imu.mag_unscaled, -navdata.mx, -navdata.my, -navdata.mz); _gyro_handler(); _accel_handler();