From 067e90c316f357f28d897264ec9755851f4b7946 Mon Sep 17 00:00:00 2001 From: jtkenny <jtkenny@iastate.edu> Date: Sun, 31 Mar 2024 22:22:08 +0200 Subject: [PATCH] more commenting --- .../deck/api/deck_analog.c | 4 +- .../deck/api/deck_spi3.c | 6 +- .../deck/core/deck_drivers.c | 35 +- .../deck/core/deck_memory.c | 3 +- .../deck/drivers/interface/locodeck.h | 1 + .../deck/drivers/src/activeMarkerDeck.c | 35 +- .../deck/drivers/src/aideck.c | 5 +- .../deck/drivers/src/flowdeck_v1v2.c | 153 +-- .../deck/drivers/src/gtgps.c | 42 +- .../deck/drivers/src/ledring12.c | 92 +- .../deck/drivers/src/lhtesterdeck.c | 4 +- .../deck/drivers/src/lighthouse.c | 7 +- .../deck/drivers/src/lpsTdoa2Tag.c | 35 +- .../deck/drivers/src/lpsTdoa3Tag.c | 34 +- .../deck/drivers/src/lpsTwrTag.c | 16 +- .../deck/drivers/src/multiranger.c | 11 +- .../deck/drivers/src/oa.c | 3 +- .../deck/drivers/src/usddeck.c | 48 +- .../deck/drivers/src/zranger.c | 53 +- .../deck/drivers/src/zranger2.c | 47 +- .../drivers/src/exti.c | 3 +- .../drivers/src/fatfs_sd.c | 2 +- .../drivers/src/lps25h.c | 19 +- .../drivers/src/motors_def_cf2.c | 1057 +++++++++-------- .../hal/interface/pm.h | 6 +- .../hal/src/ow_syslink.c | 3 +- .../hal/src/pm_stm32f4.c | 44 +- .../hal/src/sensors_bmi088_bmp388.c | 34 +- .../hal/src/sensors_bosch.c | 47 +- .../hal/src/sensors_mpu9250_lps25h.c | 125 +- .../lib/FatFS/ff.h | 5 +- .../lib/vl53l1/core/src/vl53l1_api.c | 29 +- .../modules/interface/math3d.h | 120 +- .../modules/interface/quatcompress.h | 26 +- .../modules/interface/static_mem.h | 8 +- .../modules/src/collision_avoidance.c | 302 ++--- .../modules/src/controller_indi.c | 21 +- .../modules/src/controller_mellinger.c | 387 +++--- .../modules/src/crtp_commander_high_level.c | 12 +- .../modules/src/crtp_commander_rpyt.c | 4 +- .../modules/src/crtp_localization_service.c | 2 + .../modules/src/crtpservice.c | 5 +- .../modules/src/estimator.c | 3 +- .../modules/src/estimator_kalman.c | 14 +- .../modules/src/eventtrigger.c | 13 +- .../modules/src/health.c | 5 +- .../modules/src/info.c | 199 ++-- .../modules/src/kalman_core/kalman_core.c | 74 +- .../src/kalman_core/mm_distance_robust.c | 31 +- .../modules/src/lighthouse/lighthouse_core.c | 83 +- .../modules/src/log.c | 23 +- .../modules/src/outlierFilter.c | 95 +- .../modules/src/param.c | 17 +- .../modules/src/position_controller_indi.c | 3 +- .../modules/src/position_controller_pid.c | 3 +- .../modules/src/position_estimator_altitude.c | 3 +- .../modules/src/pptraj.c | 78 +- .../modules/src/pptraj_compressed.c | 76 +- .../modules/src/sensfusion6.c | 17 +- .../modules/src/sound_cf2.c | 21 +- .../modules/src/stabilizer.c | 6 +- .../modules/src/system.c | 5 +- .../uart/Makefile | 7 +- .../uart/build/activeMarkerDeck.o | Bin 7360 -> 5744 bytes .../uart/build/aideck.o | Bin 3952 -> 3904 bytes .../uart/build/collision_avoidance.o | Bin 4104 -> 4632 bytes .../uart/build/controller_indi.o | Bin 10832 -> 10392 bytes .../uart/build/controller_mellinger.o | Bin 9440 -> 6008 bytes .../uart/build/crtp_commander_high_level.o | Bin 13512 -> 10760 bytes .../uart/build/crtp_commander_rpyt.o | Bin 3776 -> 3696 bytes .../uart/build/crtp_localization_service.o | Bin 8384 -> 8784 bytes .../uart/build/crtpservice.o | Bin 4944 -> 4760 bytes .../uart/build/deck_analog.o | Bin 1464 -> 1320 bytes .../uart/build/deck_drivers.o | Bin 2312 -> 1160 bytes .../uart/build/deck_memory.o | Bin 2952 -> 2880 bytes .../uart/build/deck_spi3.o | Bin 1496 -> 1392 bytes .../uart/build/eprintf.o | Bin 3896 -> 1032 bytes .../uart/build/estimator.o | Bin 14528 -> 10384 bytes .../uart/build/estimator_kalman.o | Bin 18520 -> 7520 bytes .../uart/build/eventtrigger.o | Bin 2056 -> 1784 bytes .../uart/build/exti.o | Bin 0 -> 2552 bytes .../uart/build/fatfs_sd.o | Bin 0 -> 1248 bytes .../uart/build/ff.o | Bin 0 -> 30784 bytes .../uart/build/ffsystem.o | Bin 0 -> 888 bytes .../uart/build/ffunicode.o | Bin 0 -> 2936 bytes .../uart/build/flowdeck_v1v2.o | Bin 8096 -> 7088 bytes .../uart/build/gtgps.o | Bin 6920 -> 4888 bytes .../uart/build/health.o | Bin 10488 -> 10392 bytes .../uart/build/kalman_core.o | Bin 6104 -> 4064 bytes .../uart/build/ledring12.o | Bin 19616 -> 18160 bytes .../uart/build/lighthouse.o | Bin 3944 -> 3272 bytes .../uart/build/lighthouse_core.o | Bin 15968 -> 8744 bytes .../uart/build/lighthouse_geometry.o | Bin 3440 -> 1912 bytes .../uart/build/log.o | Bin 24072 -> 23704 bytes .../uart/build/lps25h.o | Bin 2184 -> 2024 bytes .../uart/build/lpsTdoa2Tag.o | Bin 3520 -> 3568 bytes .../uart/build/lpsTdoa3Tag.o | Bin 888 -> 960 bytes .../uart/build/lpsTwrTag.o | Bin 4672 -> 4720 bytes .../uart/build/motors.o | Bin 0 -> 2640 bytes .../uart/build/multiranger.o | Bin 11024 -> 10840 bytes .../uart/build/num.o | Bin 1744 -> 1368 bytes .../uart/build/nvic.o | Bin 0 -> 1528 bytes .../uart/build/oa.o | Bin 7504 -> 7360 bytes .../uart/build/outlierFilter.o | Bin 3648 -> 2496 bytes .../uart/build/ow_syslink.o | Bin 5944 -> 5616 bytes .../uart/build/param.o | Bin 13920 -> 13096 bytes .../uart/build/pm_stm32f4.o | Bin 0 -> 5128 bytes .../uart/build/position_controller_indi.o | Bin 12064 -> 11560 bytes .../uart/build/position_controller_pid.o | Bin 9440 -> 9488 bytes .../uart/build/position_estimator_altitude.o | Bin 3744 -> 3696 bytes .../uart/build/pptraj.o | Bin 7888 -> 6424 bytes .../uart/build/pptraj_compressed.o | Bin 3296 -> 1992 bytes .../uart/build/pulse_processor_v1.o | Bin 4120 -> 3536 bytes .../uart/build/pulse_processor_v2.o | Bin 3480 -> 3168 bytes .../uart/build/sensfusion6.o | Bin 6128 -> 5568 bytes .../uart/build/sound_cf2.o | Bin 10312 -> 9536 bytes .../uart/build/stabilizer.o | Bin 17912 -> 12984 bytes .../uart/build/system.o | Bin 12128 -> 11904 bytes .../uart/build/usddeck.o | Bin 13376 -> 11344 bytes .../uart/build/vl53l1_api.o | Bin 18304 -> 17824 bytes .../uart/build/zranger.o | Bin 4200 -> 3096 bytes .../uart/build/zranger2.o | Bin 6152 -> 4464 bytes .../utils/src/empty_math.h | 24 + .../utils/src/eprintf.c | 305 ++--- .../utils/src/filter.h | 15 +- .../src/lighthouse/lighthouse_geometry.c | 137 +-- .../utils/src/lighthouse/pulse_processor_v1.c | 83 +- .../utils/src/lighthouse/pulse_processor_v2.c | 7 +- .../utils/src/num.c | 28 +- 129 files changed, 2219 insertions(+), 2051 deletions(-) create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/exti.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/fatfs_sd.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ff.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ffsystem.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ffunicode.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/motors.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/nvic.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pm_stm32f4.o create mode 100644 uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/empty_math.h diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_analog.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_analog.c index 6296ff178..e0a6dabc5 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_analog.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_analog.c @@ -27,6 +27,8 @@ #include "deck.h" #include "stm32fxxx.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx_adc.h" static uint32_t stregResolution; static uint32_t adcRange; @@ -78,7 +80,7 @@ static uint16_t analogReadChannel(uint8_t channel) // while(ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC) == RESET); /* Get the conversion value */ - return ADC_GetConversionValue(ADC2); + return 0;//ADC_GetConversionValue(ADC2); } uint16_t analogRead(const deckPin_t pin) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_spi3.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_spi3.c index 4b16d397d..42e135816 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_spi3.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/api/deck_spi3.c @@ -189,10 +189,10 @@ static void spi3DMAInit() // NVIC_InitStructure.NVIC_IRQChannel = SPI_RX_DMA_IRQ; // NVIC_Init(&NVIC_InitStructure); -// } +} -// static void spi3ConfigureWithSpeed(uint16_t baudRatePrescaler) -// { +static void spi3ConfigureWithSpeed(uint16_t baudRatePrescaler) +{ // SPI_InitTypeDef SPI_InitStructure; // SPI_I2S_DeInit(SPI); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_drivers.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_drivers.c index 77fd37a8c..afc5ea72b 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_drivers.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_drivers.c @@ -49,24 +49,25 @@ static int driversLen; // Init the toc access variables. Lazy initialisation: it is going to be done // the first time any api function is called. static void deckdriversInit() { - static bool init = false; - if (!init) { - int i; - - drivers = &_deckDriver_start; - driversLen = &_deckDriver_stop - &_deckDriver_start; - init = true; - - DECK_DRV_DBG_PRINT("Found %d drivers\n", driversLen); - for (i=0; i<driversLen; i++) { - if (drivers[i]->name) { - DECK_DRV_DBG_PRINT("VID:PID %02x:%02x (%s)\n", drivers[i]->vid, drivers[i]->pid, drivers[i]->name); - } else { - DECK_DRV_DBG_PRINT("VID:PID %02x:%02x\n", drivers[i]->vid, drivers[i]->pid); - } + //COMMENTED FIRMWARE + // static bool init = false; + // if (!init) { + // int i; + + // drivers = &_deckDriver_start; + // driversLen = &_deckDriver_stop - &_deckDriver_start; + // init = true; + + // DECK_DRV_DBG_PRINT("Found %d drivers\n", driversLen); + // for (i=0; i<driversLen; i++) { + // if (drivers[i]->name) { + // DECK_DRV_DBG_PRINT("VID:PID %02x:%02x (%s)\n", drivers[i]->vid, drivers[i]->pid, drivers[i]->name); + // } else { + // DECK_DRV_DBG_PRINT("VID:PID %02x:%02x\n", drivers[i]->vid, drivers[i]->pid); + // } - } - } + // } + // } } int deckDriverCount() { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_memory.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_memory.c index d5fec8bb7..818c4532b 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_memory.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/core/deck_memory.c @@ -111,7 +111,8 @@ static void populateDeckMemoryInfo(uint8_t buffer[], const uint8_t deckNr) { memcpy(&buffer[OFFS_REQ_HASH], &deckMemDef->requiredHash, 4); memcpy(&buffer[OFFS_REQ_LEN], &deckMemDef->requiredSize, 4); memcpy(&buffer[OFFS_BASE_ADDR], &baseAddress, 4); - strncpy((char*)&buffer[OFFS_NAME], info->driver->name, NAME_LEN_EX_ZERO_TREM); + //COMMENTED FIRMWARE + // strncpy((char*)&buffer[OFFS_NAME], info->driver->name, NAME_LEN_EX_ZERO_TREM); } } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/interface/locodeck.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/interface/locodeck.h index ad869a62a..9cc36b84e 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/interface/locodeck.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/interface/locodeck.h @@ -37,6 +37,7 @@ #include <stdint.h> #include "FreeRTOS.h" +#include "FreeRTOSConfig.h" //COMMENTED FIRMWARE //#include "libdw1000.h" diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/activeMarkerDeck.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/activeMarkerDeck.c index b5d1ecf58..4eda70ff5 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/activeMarkerDeck.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/activeMarkerDeck.c @@ -118,21 +118,22 @@ static bool activeMarkerDeckTest() { return false; } -#ifndef ACTIVE_MARKER_DECK_TEST - if (0 == strcmp("Qualisys0.A", versionString)) { - deckFwVersion = version_0_A; - } else if (0 == strcmp("Qualisys1.0", versionString)) { - deckFwVersion = version_1_0; - } - - isVerified = (versionUndefined != deckFwVersion); - if (! isVerified) { - DEBUG_PRINT("Incompatible deck FW\n"); - } -#else - isVerified = true; - deckFwVersion = version_1_0; -#endif +//COMMENTED FIRMWARE +// #ifndef ACTIVE_MARKER_DECK_TEST +// if (0 == strcmp("Qualisys0.A", versionString)) { +// deckFwVersion = version_0_A; +// } else if (0 == strcmp("Qualisys1.0", versionString)) { +// deckFwVersion = version_1_0; +// } + +// isVerified = (versionUndefined != deckFwVersion); +// if (! isVerified) { +// DEBUG_PRINT("Incompatible deck FW\n"); +// } +// #else +// isVerified = true; +// deckFwVersion = version_1_0; +// #endif return isVerified; } @@ -197,7 +198,9 @@ static void task(void *param) { delay = POLL_UPDATE_PERIOD_MS; } - vTaskDelay(M2T(delay)); + //COMMENTED FIRMWARE + //vTaskDelay(M2T(delay)); + vTaskDelay(delay); } } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/aideck.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/aideck.c index 894f1d5c7..aaf594832 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/aideck.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/aideck.c @@ -37,6 +37,7 @@ #include "debug.h" #include "deck.h" #include "FreeRTOS.h" +#include "FreeRTOSConfig.h" #include "task.h" #include "queue.h" //COMMENTED FIRMWARE @@ -85,7 +86,9 @@ static void NinaTask(void *param) static void Gap8Task(void *param) { systemWaitStart(); - vTaskDelay(M2T(1000)); + //COMMENTED FIRMWARE + // vTaskDelay(M2T(1000)); + vTaskDelay(1000); // Pull the reset button to get a clean read out of the data pinMode(DECK_GPIO_IO4, OUTPUT); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/flowdeck_v1v2.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/flowdeck_v1v2.c index b44fc7100..191593fa3 100755 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/flowdeck_v1v2.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/flowdeck_v1v2.c @@ -83,82 +83,83 @@ static float flowStdFixed = 2.0f; static void flowdeckTask(void *param) { - systemWaitStart(); - - uint64_t lastTime = usecTimestamp(); - while(1) { - vTaskDelay(10); - - pmw3901ReadMotion(NCS_PIN, ¤tMotion); - - // Flip motion information to comply with sensor mounting - // (might need to be changed if mounted differently) - int16_t accpx = -currentMotion.deltaY; - int16_t accpy = -currentMotion.deltaX; - - // Outlier removal - if (abs(accpx) < OULIER_LIMIT && abs(accpy) < OULIER_LIMIT) { - - if (useAdaptiveStd) - { - // The standard deviation is fitted by measurements flying over low and high texture - // and looking at the shutter time - float shutter_f = (float)currentMotion.shutter; - stdFlow=0.0007984f *shutter_f + 0.4335f; - - - // The formula with the amount of features instead - /*float squal_f = (float)currentMotion.squal; - stdFlow = -0.01257f * squal_f + 4.406f; */ - if (stdFlow < 0.1f) stdFlow=0.1f; - } else { - stdFlow = flowStdFixed; - } - - - // Form flow measurement struct and push into the EKF - flowMeasurement_t flowData; - flowData.stdDevX = stdFlow; - flowData.stdDevY = stdFlow; - flowData.dt = 0.01; - -#if defined(USE_MA_SMOOTHING) - // Use MA Smoothing - pixelAverages.averageX[pixelAverages.ptr] = (float32_t)accpx; - pixelAverages.averageY[pixelAverages.ptr] = (float32_t)accpy; - - float32_t meanX; - float32_t meanY; - - arm_mean_f32(pixelAverages.averageX, AVERAGE_HISTORY_LENGTH, &meanX); - arm_mean_f32(pixelAverages.averageY, AVERAGE_HISTORY_LENGTH, &meanY); - - pixelAverages.ptr = (pixelAverages.ptr + 1) % AVERAGE_HISTORY_LENGTH; - - flowData.dpixelx = (float)meanX; // [pixels] - flowData.dpixely = (float)meanY; // [pixels] -#elif defined(USE_LP_FILTER) - // Use LP filter measurements - flowData.dpixelx = LP_CONSTANT * dpixelx_previous + (1.0f - LP_CONSTANT) * (float)accpx; - flowData.dpixely = LP_CONSTANT * dpixely_previous + (1.0f - LP_CONSTANT) * (float)accpy; - dpixelx_previous = flowData.dpixelx; - dpixely_previous = flowData.dpixely; -#else - // Use raw measurements - flowData.dpixelx = (float)accpx; - flowData.dpixely = (float)accpy; -#endif - // Push measurements into the estimator if flow is not disabled - // and the PMW flow sensor indicates motion detection - if (!useFlowDisabled && currentMotion.motion == 0xB0) { - flowData.dt = (float)(usecTimestamp()-lastTime)/1000000.0f; - lastTime = usecTimestamp(); - estimatorEnqueueFlow(&flowData); - } - } else { - outlierCount++; - } - } + //COMMENTED FIRMWARE +// systemWaitStart(); + +// uint64_t lastTime = usecTimestamp(); +// while(1) { +// vTaskDelay(10); + +// pmw3901ReadMotion(NCS_PIN, ¤tMotion); + +// // Flip motion information to comply with sensor mounting +// // (might need to be changed if mounted differently) +// int16_t accpx = -currentMotion.deltaY; +// int16_t accpy = -currentMotion.deltaX; + +// // Outlier removal +// if (abs(accpx) < OULIER_LIMIT && abs(accpy) < OULIER_LIMIT) { + +// if (useAdaptiveStd) +// { +// // The standard deviation is fitted by measurements flying over low and high texture +// // and looking at the shutter time +// float shutter_f = (float)currentMotion.shutter; +// stdFlow=0.0007984f *shutter_f + 0.4335f; + + +// // The formula with the amount of features instead +// /*float squal_f = (float)currentMotion.squal; +// stdFlow = -0.01257f * squal_f + 4.406f; */ +// if (stdFlow < 0.1f) stdFlow=0.1f; +// } else { +// stdFlow = flowStdFixed; +// } + + +// // Form flow measurement struct and push into the EKF +// flowMeasurement_t flowData; +// flowData.stdDevX = stdFlow; +// flowData.stdDevY = stdFlow; +// flowData.dt = 0.01; + +// #if defined(USE_MA_SMOOTHING) +// // Use MA Smoothing +// pixelAverages.averageX[pixelAverages.ptr] = (float32_t)accpx; +// pixelAverages.averageY[pixelAverages.ptr] = (float32_t)accpy; + +// float32_t meanX; +// float32_t meanY; + +// arm_mean_f32(pixelAverages.averageX, AVERAGE_HISTORY_LENGTH, &meanX); +// arm_mean_f32(pixelAverages.averageY, AVERAGE_HISTORY_LENGTH, &meanY); + +// pixelAverages.ptr = (pixelAverages.ptr + 1) % AVERAGE_HISTORY_LENGTH; + +// flowData.dpixelx = (float)meanX; // [pixels] +// flowData.dpixely = (float)meanY; // [pixels] +// #elif defined(USE_LP_FILTER) +// // Use LP filter measurements +// flowData.dpixelx = LP_CONSTANT * dpixelx_previous + (1.0f - LP_CONSTANT) * (float)accpx; +// flowData.dpixely = LP_CONSTANT * dpixely_previous + (1.0f - LP_CONSTANT) * (float)accpy; +// dpixelx_previous = flowData.dpixelx; +// dpixely_previous = flowData.dpixely; +// #else +// // Use raw measurements +// flowData.dpixelx = (float)accpx; +// flowData.dpixely = (float)accpy; +// #endif +// // Push measurements into the estimator if flow is not disabled +// // and the PMW flow sensor indicates motion detection +// if (!useFlowDisabled && currentMotion.motion == 0xB0) { +// flowData.dt = (float)(usecTimestamp()-lastTime)/1000000.0f; +// lastTime = usecTimestamp(); +// estimatorEnqueueFlow(&flowData); +// } +// } else { +// outlierCount++; +// } +// } } static void flowdeck1Init() diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/gtgps.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/gtgps.c index 7bca41c2d..505caf768 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/gtgps.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/gtgps.c @@ -121,14 +121,15 @@ static int32_t parse_coordinate(char ** sp) { // a large number * 10 M // 32 18.0489 N = 32 degrees + 18.0489 / 60 = 32.300815 N - dm = strtol(*sp, &i, 10); - degree = (dm / 100) * 10000000; - minute = ((dm % 100) * 10000000) / 60; - second = (strtol(i+1, &j, 10) * 1000) / 60; - ret = degree + minute + second; - skip_to_next(sp, ','); - if (**sp == 'S' || **sp == 'W') - ret *= -1; + //COMMENTED FIRMWARE + // dm = strtol(*sp, &i, 10); + // degree = (dm / 100) * 10000000; + // minute = ((dm % 100) * 10000000) / 60; + // second = (strtol(i+1, &j, 10) * 1000) / 60; + // ret = degree + minute + second; + // skip_to_next(sp, ','); + // if (**sp == 'S' || **sp == 'W') + // ret *= -1; return ret; } @@ -140,12 +141,14 @@ static float parse_float(char * sp) { char * i; char * j; - major = strtol(sp, &i, 10); + //COMMENTED FIRMWARE + //major = strtol(sp, &i, 10); // Do decimals - if (strncmp(i, ".", 1) == 0) { - minor = strtol(i+1, &j, 10); - deci_nbr = j - i - 1; - } + //COMMENTED FIRMWARE + // if (strncmp(i, ".", 1) == 0) { + // minor = strtol(i+1, &j, 10); + // deci_nbr = j - i - 1; + // } ret = (major * pow(10, deci_nbr) + minor) / pow(10, deci_nbr); //printf("%i.%i == %f (%i) (%c)\n", major, minor, ret, deci_nbr, (int) *i); return ret; @@ -156,7 +159,8 @@ static void parse_next(char ** sp, FieldType t, void * value) { //DEBUG_PRINT("[%s]\n", (*sp)); switch (t) { case FIELD_INT: - *((uint32_t*) value) = strtol(*sp, 0, 10); + //COMMENTED FIRMWARE + // *((uint32_t*) value) = strtol(*sp, 0, 10); break; case FIELD_FLOAT: *((float*) value) = parse_float(*sp); @@ -218,7 +222,8 @@ static bool verifyChecksum(const char * buff) { while (buff[i] != '*' && i < MAX_LEN_SENTANCE-3) { test_chksum ^= buff[i++]; } - ref_chksum = strtol(&buff[i+1], 0, 16); + //COMMENTED FIRMWARE + // ref_chksum = strtol(&buff[i+1], 0, 16); return (test_chksum == ref_chksum); } @@ -264,9 +269,10 @@ void gtgpsTask(void *param) if (verifyChecksum(buff)) { //DEBUG_PRINT("O"); for (j = 0; j < sizeof(parsers)/sizeof(parsers[0]); j++) { - if (strncmp(parsers[j].token, buff, LEN_TOKEN) == 0) { - parsers[j].parser(&buff[LEN_TOKEN]); - } + //COMMENTED FIRMWARE + // if (strncmp(parsers[j].token, buff, LEN_TOKEN) == 0) { + // parsers[j].parser(&buff[LEN_TOKEN]); + // } } } } else if (bi < MAX_LEN_SENTANCE) { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/ledring12.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/ledring12.c index 18a023097..23806a773 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/ledring12.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/ledring12.c @@ -465,29 +465,31 @@ static void gravityLightRender(uint8_t buffer[][3], float led_index, int intensi static void gravityLight(uint8_t buffer[][3], bool reset) { - static int pitchid, rollid; - static bool isInitialized = false; + //COMMENTED FIRMWARE + // static int pitchid, rollid; + // static bool isInitialized = false; - if (!isInitialized) { - pitchid = logGetVarId("stabilizer", "pitch"); - rollid = logGetVarId("stabilizer", "roll"); - isInitialized = true; - } + // if (!isInitialized) { + // pitchid = logGetVarId("stabilizer", "pitch"); + // rollid = logGetVarId("stabilizer", "roll"); + // isInitialized = true; + // } - float pitch = logGetFloat(pitchid); // -180 to 180 - float roll = logGetFloat(rollid); // -180 to 180 + // float pitch = logGetFloat(pitchid); // -180 to 180 + // float roll = logGetFloat(rollid); // -180 to 180 - float angle = gravityLightCalculateAngle(pitch, roll); - float led_index = NBR_LEDS * angle / (2 * (float) M_PI); - int intensity = LIMIT(sqrtf(pitch * pitch + roll * roll)); - gravityLightRender(buffer, led_index, intensity); + // float angle = gravityLightCalculateAngle(pitch, roll); + // float led_index = NBR_LEDS * angle / (2 * (float) M_PI); + // int intensity = LIMIT(sqrtf(pitch * pitch + roll * roll)); + // gravityLightRender(buffer, led_index, intensity); } static float gravityLightCalculateAngle(float pitch, float roll) { float angle = 0.0; if (roll != 0) { - angle = atanf(pitch / roll) + (float) M_PI_2; + //COMMENTED FIRMWARE + // angle = atanf(pitch / roll) + (float) M_PI_2; if (roll < 0.0f) { angle += (float) M_PI; @@ -498,19 +500,20 @@ static float gravityLightCalculateAngle(float pitch, float roll) { } static void gravityLightRender(uint8_t buffer[][3], float led_index, int intensity) { - float width = 5; - float height = intensity; - - int i; - for (i = 0; i < NBR_LEDS; i++) { - float distance = fabsf(led_index - i); - if (distance > NBR_LEDS / 2) { - distance = NBR_LEDS - distance; - } - - int col = height - distance * (height / (width / 2)); - SET_WHITE(buffer[i], LIMIT(col)); - } + //COMMENTED FIRMWARE + // float width = 5; + // float height = intensity; + + // int i; + // for (i = 0; i < NBR_LEDS; i++) { + // float distance = fabsf(led_index - i); + // if (distance > NBR_LEDS / 2) { + // distance = NBR_LEDS - distance; + // } + + // int col = height - distance * (height / (width / 2)); + // SET_WHITE(buffer[i], LIMIT(col)); + // } } @@ -990,23 +993,24 @@ static void checkLightSignalTrigger(void) static void overrideWithLightSignal(uint8_t buffer[][3]) { - uint8_t color; - uint32_t diffMsec; - - if (lightSignal.active) { - diffMsec = T2M(xTaskGetTickCount() - lightSignal.triggeredAt); - - if (diffMsec >= 1500) { - lightSignal.active = 0; - lightSignal.triggeredAt = 0; - color = 0; - } else { - diffMsec = diffMsec % 300; - color = (diffMsec <= 100) ? 255 : 0; - } - - memset(buffer, color, NBR_LEDS * 3); - } + //COMMENTED FIRMWARE + // uint8_t color; + // uint32_t diffMsec; + + // if (lightSignal.active) { + // diffMsec = T2M(xTaskGetTickCount() - lightSignal.triggeredAt); + + // if (diffMsec >= 1500) { + // lightSignal.active = 0; + // lightSignal.triggeredAt = 0; + // color = 0; + // } else { + // diffMsec = diffMsec % 300; + // color = (diffMsec <= 100) ? 255 : 0; + // } + + // memset(buffer, color, NBR_LEDS * 3); + // } } /********** Ring init and switching **********/ diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lhtesterdeck.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lhtesterdeck.c index ece3f90d3..26e06b737 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lhtesterdeck.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lhtesterdeck.c @@ -81,7 +81,9 @@ static void timerFcn(xTimerHandle xTimer) } static void startSwTimer() { - xTimerHandle timer = xTimerCreate("lhTesterTimer", M2T(1), pdTRUE, 0, timerFcn); + //COMMENTED FIRMWARE + //xTimerHandle timer = xTimerCreate("lhTesterTimer", M2T(1), pdTRUE, 0, timerFcn); + xTimerHandle timer = xTimerCreate("lhTesterTimer", 1, pdTRUE, 0, timerFcn); xTimerStart(timer, 0); } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lighthouse.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lighthouse.c index a15a4b459..00d2b1b83 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lighthouse.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lighthouse.c @@ -63,9 +63,10 @@ static void lighthouseInit(DeckInfo *info) 2*configMINIMAL_STACK_SIZE, NULL, LIGHTHOUSE_TASK_PRI, NULL); xTimerHandle timer; - timer = xTimerCreateStatic("ledTimer", M2T(FIFTH_SECOND), pdTRUE, - NULL, ledTimerHandle, &timerBuffer); - xTimerStart(timer, M2T(0)); + //COMMENTED FIRMWARE + // timer = xTimerCreateStatic("ledTimer", M2T(FIFTH_SECOND), pdTRUE, + // NULL, ledTimerHandle, &timerBuffer); + // xTimerStart(timer, M2T(0)); isInit = true; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa2Tag.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa2Tag.c index 8239867dd..4a4d07074 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa2Tag.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa2Tag.c @@ -318,14 +318,15 @@ static bool isRangingOk() } static bool getAnchorPosition(const uint8_t anchorId, point_t* position) { - tdoaAnchorContext_t anchorCtx; - uint32_t now_ms = T2M(xTaskGetTickCount()); + //COMMENTED FIRMWARE + // tdoaAnchorContext_t anchorCtx; + // uint32_t now_ms = T2M(xTaskGetTickCount()); - bool contextFound = tdoaStorageGetAnchorCtx(tdoaEngineState.anchorInfoArray, anchorId, now_ms, &anchorCtx); - if (contextFound) { - tdoaStorageGetAnchorPosition(&anchorCtx, position); - return true; - } + // bool contextFound = tdoaStorageGetAnchorCtx(tdoaEngineState.anchorInfoArray, anchorId, now_ms, &anchorCtx); + // if (contextFound) { + // tdoaStorageGetAnchorPosition(&anchorCtx, position); + // return true; + // } return false; } @@ -335,7 +336,8 @@ static uint8_t getAnchorIdList(uint8_t unorderedAnchorList[], const int maxListS } static uint8_t getActiveAnchorIdList(uint8_t unorderedAnchorList[], const int maxListSize) { - uint32_t now_ms = T2M(xTaskGetTickCount()); + //COMMENTED FIRMWARE + uint32_t now_ms = 0;//T2M(xTaskGetTickCount()); return tdoaStorageGetListOfActiveAnchorIds(tdoaEngineState.anchorInfoArray, unorderedAnchorList, maxListSize, now_ms); } @@ -352,14 +354,15 @@ static void lpsHandleLppShortPacket(const uint8_t srcId, const uint8_t *data, td } } -// uwbAlgorithm_t uwbTdoa2TagAlgorithm = { -// .init = Initialize, -// .onEvent = onEvent, -// .isRangingOk = isRangingOk, -// .getAnchorPosition = getAnchorPosition, -// .getAnchorIdList = getAnchorIdList, -// .getActiveAnchorIdList = getActiveAnchorIdList, -// }; +//COMMENTED FIRMWARE +uwbAlgorithm_t uwbTdoa2TagAlgorithm = { + // .init = Initialize, + // .onEvent = onEvent, + // .isRangingOk = isRangingOk, + // .getAnchorPosition = getAnchorPosition, + // .getAnchorIdList = getAnchorIdList, + // .getActiveAnchorIdList = getActiveAnchorIdList, +}; void lpsTdoa2TagSetOptions(lpsTdoa2AlgoOptions_t* newOptions) { options = newOptions; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa3Tag.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa3Tag.c index 0b32ecbf7..ec0bf0731 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa3Tag.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTdoa3Tag.c @@ -273,14 +273,15 @@ static void sendTdoaToEstimatorCallback(tdoaMeasurement_t* tdoaMeasurement) { } static bool getAnchorPosition(const uint8_t anchorId, point_t* position) { - tdoaAnchorContext_t anchorCtx; - uint32_t now_ms = T2M(xTaskGetTickCount()); + //COMMENTED FIRMWARE + // tdoaAnchorContext_t anchorCtx; + // uint32_t now_ms = T2M(xTaskGetTickCount()); - bool contextFound = tdoaStorageGetAnchorCtx(tdoaEngineState.anchorInfoArray, anchorId, now_ms, &anchorCtx); - if (contextFound) { - tdoaStorageGetAnchorPosition(&anchorCtx, position); - return true; - } + // bool contextFound = tdoaStorageGetAnchorCtx(tdoaEngineState.anchorInfoArray, anchorId, now_ms, &anchorCtx); + // if (contextFound) { + // tdoaStorageGetAnchorPosition(&anchorCtx, position); + // return true; + // } return false; } @@ -290,7 +291,8 @@ static uint8_t getAnchorIdList(uint8_t unorderedAnchorList[], const int maxListS } static uint8_t getActiveAnchorIdList(uint8_t unorderedAnchorList[], const int maxListSize) { - uint32_t now_ms = T2M(xTaskGetTickCount()); + //COMMENTED FIRMWARE + uint32_t now_ms = 0;//T2M(xTaskGetTickCount()); return tdoaStorageGetListOfActiveAnchorIds(tdoaEngineState.anchorInfoArray, unorderedAnchorList, maxListSize, now_ms); } @@ -316,11 +318,11 @@ static bool isRangingOk() } //COMMENTED FIRMWARE -// uwbAlgorithm_t uwbTdoa3TagAlgorithm = { -// .init = Initialize, -// .onEvent = onEvent, -// .isRangingOk = isRangingOk, -// .getAnchorPosition = getAnchorPosition, -// .getAnchorIdList = getAnchorIdList, -// .getActiveAnchorIdList = getActiveAnchorIdList, -// }; +uwbAlgorithm_t uwbTdoa3TagAlgorithm = { + // .init = Initialize, + // .onEvent = onEvent, + // .isRangingOk = isRangingOk, + // .getAnchorPosition = getAnchorPosition, + // .getAnchorIdList = getAnchorIdList, + // .getActiveAnchorIdList = getActiveAnchorIdList, +}; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTwrTag.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTwrTag.c index bed043dd8..c4371d640 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTwrTag.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/lpsTwrTag.c @@ -550,14 +550,14 @@ static uint8_t getActiveAnchorIdList(uint8_t unorderedAnchorList[], const int ma } //COMMENTED FIRMWARE -// uwbAlgorithm_t uwbTwrTagAlgorithm = { -// .init = twrTagInit, -// .onEvent = twrTagOnEvent, -// .isRangingOk = isRangingOk, -// .getAnchorPosition = getAnchorPosition, -// .getAnchorIdList = getAnchorIdList, -// .getActiveAnchorIdList = getActiveAnchorIdList, -// }; +uwbAlgorithm_t uwbTwrTagAlgorithm = { + // .init = twrTagInit, + // .onEvent = twrTagOnEvent, + // .isRangingOk = isRangingOk, + // .getAnchorPosition = getAnchorPosition, + // .getAnchorIdList = getAnchorIdList, + // .getActiveAnchorIdList = getActiveAnchorIdList, +}; /** * Log group for Two Way Ranging data diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/multiranger.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/multiranger.c index cb4ef4fee..7cdcf52dd 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/multiranger.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/multiranger.c @@ -66,7 +66,9 @@ static bool mrInitSensor(VL53L1_Dev_t *pdev, uint32_t pca95pin, char *name) // Bring up VL53 by releasing XSHUT pca95x4SetOutput(pca95pin); // Let VL53 boot - vTaskDelay(M2T(2)); + //COMMENTED FIRMWARE + //vTaskDelay(M2T(2)); + vTaskDelay(2); // Init VL53 if (vl53l1xInit(pdev, I2C1_DEV)) { @@ -92,7 +94,9 @@ static uint16_t mrGetMeasurementAndRestart(VL53L1_Dev_t *dev) while (dataReady == 0) { status = VL53L1_GetMeasurementDataReady(dev, &dataReady); - vTaskDelay(M2T(1)); + //COMMENTED FIRMWARE + //vTaskDelay(M2T(1)); + vTaskDelay(1); } status = VL53L1_GetRangingMeasurementData(dev, &rangingData); @@ -128,7 +132,8 @@ static void mrTask(void *param) while (1) { - vTaskDelayUntil(&lastWakeTime, M2T(100)); + //COMMENTED FIRMWARE + //vTaskDelayUntil(&lastWakeTime, M2T(100)); rangeSet(rangeFront, mrGetMeasurementAndRestart(&devFront)/1000.0f); rangeSet(rangeBack, mrGetMeasurementAndRestart(&devBack)/1000.0f); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/oa.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/oa.c index bf80e5b04..30b1e3e60 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/oa.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/oa.c @@ -75,7 +75,8 @@ static void oaTask(void *param) TickType_t lastWakeTime = xTaskGetTickCount(); while(1) { - vTaskDelayUntil(&lastWakeTime, M2T(50)); + //COMMENTED FIRMWARE + //vTaskDelayUntil(&lastWakeTime, M2T(50)); rangeFront = vl53l0xReadRangeContinuousMillimeters(&devFront); rangeBack = vl53l0xReadRangeContinuousMillimeters(&devBack); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/usddeck.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/usddeck.c index 707555a7d..1484ddc65 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/usddeck.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/usddeck.c @@ -344,7 +344,9 @@ static void csLow(void) static void delayMs(UINT ms) { - vTaskDelay(M2T(ms)); + //COMMENTED FIRMWARE + //vTaskDelay(M2T(ms)); + vTaskDelay(ms); } /* FatFS Disk Interface */ @@ -412,9 +414,10 @@ TCHAR* f_gets_without_comments ( if (c == '\n') { break; /* Break on EOL */ } - if (isspace((int)c)) { - continue; /* Strip whitespace */ - } + //COMMENTED FIRWMARE + // if (isspace((int)c)) { + // continue; /* Strip whitespace */ + // } if (c == '#') { isComment = true; /* keep reading until end of line */ } @@ -435,24 +438,25 @@ static bool initSuccess = false; static void usdInit(DeckInfo *info) { - if (!isInit) { - memoryRegisterHandler(&memDef); - - logFileMutex = xSemaphoreCreateMutex(); - logBufferMutex = xSemaphoreCreateMutex(); - /* try to mount drives before creating the tasks */ - if (f_mount(&FatFs, "", 1) == FR_OK) { - DEBUG_PRINT("mount SD-Card [OK].\n"); - - /* create usd-log task */ - xTaskCreate(usdLogTask, USDLOG_TASK_NAME, - USDLOG_TASK_STACKSIZE, NULL, - USDLOG_TASK_PRI, NULL); - } else { - DEBUG_PRINT("mount SD-Card [FAIL].\n"); - } - } - isInit = true; + //COMMENTED FIRMWARE + // if (!isInit) { + // memoryRegisterHandler(&memDef); + + // logFileMutex = xSemaphoreCreateMutex(); + // logBufferMutex = xSemaphoreCreateMutex(); + // /* try to mount drives before creating the tasks */ + // if (f_mount(&FatFs, "", 1) == FR_OK) { + // DEBUG_PRINT("mount SD-Card [OK].\n"); + + // /* create usd-log task */ + // xTaskCreate(usdLogTask, USDLOG_TASK_NAME, + // USDLOG_TASK_STACKSIZE, NULL, + // USDLOG_TASK_PRI, NULL); + // } else { + // DEBUG_PRINT("mount SD-Card [FAIL].\n"); + // } + // } + // isInit = true; } static void usddeckWriteEventData(const usdLogEventConfig_t* cfg, const uint8_t* payload, uint8_t payloadSize) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger.c index 095e755d1..13138475c 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger.c @@ -68,7 +68,8 @@ void zRangerInit(DeckInfo* info) xTaskCreate(zRangerTask, ZRANGER_TASK_NAME, ZRANGER_TASK_STACKSIZE, NULL, ZRANGER_TASK_PRI, NULL); // pre-compute constant in the measurement noise model for kalman - expCoeff = logf(expStdB / expStdA) / (expPointB - expPointA); + //COMMENTED FIRMWARE + //expCoeff = logf(expStdB / expStdA) / (expPointB - expPointA); isInit = true; } @@ -87,30 +88,32 @@ bool zRangerTest(void) void zRangerTask(void* arg) { - systemWaitStart(); - TickType_t xLastWakeTime; - - vl53l0xSetVcselPulsePeriod(&dev, VcselPeriodPreRange, 18); - vl53l0xSetVcselPulsePeriod(&dev, VcselPeriodFinalRange, 14); - vl53l0xStartContinuous(&dev, 0); - - xLastWakeTime = xTaskGetTickCount(); - - while (1) { - vTaskDelayUntil(&xLastWakeTime, M2T(dev.measurement_timing_budget_ms)); - - range_last = vl53l0xReadRangeContinuousMillimeters(&dev); - rangeSet(rangeDown, range_last / 1000.0f); - - // check if range is feasible and push into the estimator - // the sensor should not be able to measure >3 [m], and outliers typically - // occur as >8 [m] measurements - if (range_last < RANGE_OUTLIER_LIMIT) { - float distance = (float)range_last * 0.001f; // Scale from [mm] to [m] - float stdDev = expStdA * (1.0f + expf( expCoeff * (distance - expPointA))); - rangeEnqueueDownRangeInEstimator(distance, stdDev, xTaskGetTickCount()); - } - } + //COMMENTED FIRMWARE + // systemWaitStart(); + // TickType_t xLastWakeTime; + + // vl53l0xSetVcselPulsePeriod(&dev, VcselPeriodPreRange, 18); + // vl53l0xSetVcselPulsePeriod(&dev, VcselPeriodFinalRange, 14); + // vl53l0xStartContinuous(&dev, 0); + + // xLastWakeTime = xTaskGetTickCount(); + + // while (1) { + // //COMMENTED FIRMWARE + // //vTaskDelayUntil(&xLastWakeTime, M2T(dev.measurement_timing_budget_ms)); + + // range_last = vl53l0xReadRangeContinuousMillimeters(&dev); + // rangeSet(rangeDown, range_last / 1000.0f); + + // // check if range is feasible and push into the estimator + // // the sensor should not be able to measure >3 [m], and outliers typically + // // occur as >8 [m] measurements + // if (range_last < RANGE_OUTLIER_LIMIT) { + // float distance = (float)range_last * 0.001f; // Scale from [mm] to [m] + // float stdDev = expStdA * (1.0f + expf( expCoeff * (distance - expPointA))); + // rangeEnqueueDownRangeInEstimator(distance, stdDev, xTaskGetTickCount()); + // } + // } } static const DeckDriver zranger_deck = { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger2.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger2.c index d517511c0..014ba745b 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger2.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/deck/drivers/src/zranger2.c @@ -100,7 +100,8 @@ void zRanger2Init(DeckInfo* info) xTaskCreate(zRanger2Task, ZRANGER2_TASK_NAME, ZRANGER2_TASK_STACKSIZE, NULL, ZRANGER2_TASK_PRI, NULL); // pre-compute constant in the measurement noise model for kalman - expCoeff = logf(expStdB / expStdA) / (expPointB - expPointA); + //COMMENTED FIRMWARE + // expCoeff = logf(expStdB / expStdA) / (expPointB - expPointA); isInit = true; } @@ -115,34 +116,36 @@ bool zRanger2Test(void) void zRanger2Task(void* arg) { - TickType_t lastWakeTime; + //COMMENTED FIRMWARE + // TickType_t lastWakeTime; - systemWaitStart(); + // systemWaitStart(); - // Restart sensor - VL53L1_StopMeasurement(&dev); - VL53L1_SetDistanceMode(&dev, VL53L1_DISTANCEMODE_MEDIUM); - VL53L1_SetMeasurementTimingBudgetMicroSeconds(&dev, 25000); + // // Restart sensor + // VL53L1_StopMeasurement(&dev); + // VL53L1_SetDistanceMode(&dev, VL53L1_DISTANCEMODE_MEDIUM); + // VL53L1_SetMeasurementTimingBudgetMicroSeconds(&dev, 25000); - VL53L1_StartMeasurement(&dev); + // VL53L1_StartMeasurement(&dev); - lastWakeTime = xTaskGetTickCount(); + // lastWakeTime = xTaskGetTickCount(); - while (1) { - vTaskDelayUntil(&lastWakeTime, M2T(25)); + // while (1) { + // //COMMENTED FIRMWARE + // //vTaskDelayUntil(&lastWakeTime, M2T(25)); - range_last = zRanger2GetMeasurementAndRestart(&dev); - rangeSet(rangeDown, range_last / 1000.0f); + // range_last = zRanger2GetMeasurementAndRestart(&dev); + // rangeSet(rangeDown, range_last / 1000.0f); - // check if range is feasible and push into the estimator - // the sensor should not be able to measure >5 [m], and outliers typically - // occur as >8 [m] measurements - if (range_last < RANGE_OUTLIER_LIMIT) { - float distance = (float)range_last * 0.001f; // Scale from [mm] to [m] - float stdDev = expStdA * (1.0f + expf( expCoeff * (distance - expPointA))); - rangeEnqueueDownRangeInEstimator(distance, stdDev, xTaskGetTickCount()); - } - } + // // check if range is feasible and push into the estimator + // // the sensor should not be able to measure >5 [m], and outliers typically + // // occur as >8 [m] measurements + // if (range_last < RANGE_OUTLIER_LIMIT) { + // float distance = (float)range_last * 0.001f; // Scale from [mm] to [m] + // float stdDev = expStdA * (1.0f + expf( expCoeff * (distance - expPointA))); + // rangeEnqueueDownRangeInEstimator(distance, stdDev, xTaskGetTickCount()); + // } + // } } static const DeckDriver zranger2_deck = { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/exti.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/exti.c index 79810be14..403ab928a 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/exti.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/exti.c @@ -36,7 +36,8 @@ static bool isInit; /* Interruption initialisation */ void extiInit() { - static NVIC_InitTypeDef NVIC_InitStructure; + //COMMENTED FIRMWARE + //static NVIC_InitTypeDef NVIC_InitStructure; if (isInit) return; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/fatfs_sd.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/fatfs_sd.c index 1fe8a06ee..ae84f3677 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/fatfs_sd.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/fatfs_sd.c @@ -244,7 +244,7 @@ static BYTE sendCommand(sdSpiContext_t *context, BYTE cmd, DWORD arg) { // Receive command resp { // BYTE maxTries = 10; - // BYTE res; + BYTE res; // do { // res = context->xchgSpi(0xFF); // } while ((res & 0x80) && --maxTries); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/lps25h.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/lps25h.c index 4cb77a181..83653ca5b 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/lps25h.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/lps25h.c @@ -174,14 +174,15 @@ bool lps25hGetData(float* pressure, float* temperature, float* asl) */ float lps25hPressureToAltitude(float* pressure/*, float* ground_pressure, float* ground_temp*/) { - if (*pressure > 0) - { - //return (1.f - pow(*pressure / CONST_SEA_PRESSURE, CONST_PF)) * CONST_PF2; - //return ((pow((1015.7 / *pressure), CONST_PF) - 1.0) * (25. + 273.15)) / 0.0065; - return ((powf((1015.7f / *pressure), CONST_PF) - 1.0f) * (FIX_TEMP + 273.15f)) / 0.0065f; - } - else - { + //COMMENTED FIRMWARE + // if (*pressure > 0) + // { + // //return (1.f - pow(*pressure / CONST_SEA_PRESSURE, CONST_PF)) * CONST_PF2; + // //return ((pow((1015.7 / *pressure), CONST_PF) - 1.0) * (25. + 273.15)) / 0.0065; + // return ((powf((1015.7f / *pressure), CONST_PF) - 1.0f) * (FIX_TEMP + 273.15f)) / 0.0065f; + // } + // else + // { return 0; - } + //} } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/motors_def_cf2.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/motors_def_cf2.c index 73166e665..bb91988ce 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/motors_def_cf2.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/drivers/src/motors_def_cf2.c @@ -26,558 +26,559 @@ * This code mainly interfacing the PWM peripheral lib of ST. */ // Connector M1, PA1, TIM2_CH2 -static const MotorPerifDef CONN_M1 = -{ - .drvType = BRUSHED, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_1, - .gpioPinSource = GPIO_PinSource1, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_PWM_PERIOD, - .timPrescaler = MOTORS_PWM_PRESCALE, - .setCompare = TIM_SetCompare2, - .getCompare = TIM_GetCapture2, - .ocInit = TIM_OC2Init, - .preloadConfig = TIM_OC2PreloadConfig, -}; +//COMMENTED FIRMWARE +// static const MotorPerifDef CONN_M1 = +// { +// // .drvType = BRUSHED, +// // .gpioPerif = RCC_AHB1Periph_GPIOA, +// // .gpioPort = GPIOA, +// // .gpioPin = GPIO_Pin_1, +// // .gpioPinSource = GPIO_PinSource1, +// // .gpioOType = GPIO_OType_PP, +// // .gpioAF = GPIO_AF_TIM2, +// // .timPerif = RCC_APB1Periph_TIM2, +// // .tim = TIM2, +// // .timPolarity = TIM_OCPolarity_High, +// // .timDbgStop = DBGMCU_TIM2_STOP, +// // .timPeriod = MOTORS_PWM_PERIOD, +// // .timPrescaler = MOTORS_PWM_PRESCALE, +// // .setCompare = TIM_SetCompare2, +// // .getCompare = TIM_GetCapture2, +// // .ocInit = TIM_OC2Init, +// // .preloadConfig = TIM_OC2PreloadConfig, +// }; -// Connector M2, PB11, TIM2_CH4 -static const MotorPerifDef CONN_M2 = -{ - .drvType = BRUSHED, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_11, - .gpioPinSource = GPIO_PinSource11, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_PWM_PERIOD, - .timPrescaler = MOTORS_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Connector M2, PB11, TIM2_CH4 +// static const MotorPerifDef CONN_M2 = +// { +// // .drvType = BRUSHED, +// // .gpioPerif = RCC_AHB1Periph_GPIOB, +// // .gpioPort = GPIOB, +// // .gpioPin = GPIO_Pin_11, +// // .gpioPinSource = GPIO_PinSource11, +// // .gpioOType = GPIO_OType_PP, +// // .gpioAF = GPIO_AF_TIM2, +// // .timPerif = RCC_APB1Periph_TIM2, +// // .tim = TIM2, +// // .timPolarity = TIM_OCPolarity_High, +// // .timDbgStop = DBGMCU_TIM2_STOP, +// // .timPeriod = MOTORS_PWM_PERIOD, +// // .timPrescaler = MOTORS_PWM_PRESCALE, +// // .setCompare = TIM_SetCompare4, +// // .getCompare = TIM_GetCapture4, +// // .ocInit = TIM_OC4Init, +// // .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Connector M3, PA15, TIM2_CH1 -static const MotorPerifDef CONN_M3 = -{ - .drvType = BRUSHED, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_15, - .gpioPinSource = GPIO_PinSource15, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_PWM_PERIOD, - .timPrescaler = MOTORS_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Connector M3, PA15, TIM2_CH1 +// static const MotorPerifDef CONN_M3 = +// { +// // .drvType = BRUSHED, +// // .gpioPerif = RCC_AHB1Periph_GPIOA, +// // .gpioPort = GPIOA, +// // .gpioPin = GPIO_Pin_15, +// // .gpioPinSource = GPIO_PinSource15, +// // .gpioOType = GPIO_OType_PP, +// // .gpioAF = GPIO_AF_TIM2, +// // .timPerif = RCC_APB1Periph_TIM2, +// // .tim = TIM2, +// // .timPolarity = TIM_OCPolarity_High, +// // .timDbgStop = DBGMCU_TIM2_STOP, +// // .timPeriod = MOTORS_PWM_PERIOD, +// // .timPrescaler = MOTORS_PWM_PRESCALE, +// // .setCompare = TIM_SetCompare1, +// // .getCompare = TIM_GetCapture1, +// // .ocInit = TIM_OC1Init, +// // .preloadConfig = TIM_OC1PreloadConfig, +// }; -// Connector M4, PB9, TIM4_CH4 -static const MotorPerifDef CONN_M4 = -{ - .drvType = BRUSHED, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_9, - .gpioPinSource = GPIO_PinSource9, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM4, - .timPerif = RCC_APB1Periph_TIM4, - .tim = TIM4, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM4_STOP, - .timPeriod = MOTORS_PWM_PERIOD, - .timPrescaler = MOTORS_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Connector M4, PB9, TIM4_CH4 +// static const MotorPerifDef CONN_M4 = +// { +// // .drvType = BRUSHED, +// // .gpioPerif = RCC_AHB1Periph_GPIOB, +// // .gpioPort = GPIOB, +// // .gpioPin = GPIO_Pin_9, +// // .gpioPinSource = GPIO_PinSource9, +// // .gpioOType = GPIO_OType_PP, +// // .gpioAF = GPIO_AF_TIM4, +// // .timPerif = RCC_APB1Periph_TIM4, +// // .tim = TIM4, +// // .timPolarity = TIM_OCPolarity_High, +// // .timDbgStop = DBGMCU_TIM4_STOP, +// // .timPeriod = MOTORS_PWM_PERIOD, +// // .timPrescaler = MOTORS_PWM_PRESCALE, +// // .setCompare = TIM_SetCompare4, +// // .getCompare = TIM_GetCapture4, +// // .ocInit = TIM_OC4Init, +// // .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Connector M1, PA1, TIM2_CH2, Brushless config, inversed -static const MotorPerifDef CONN_M1_BL_INV = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_1, - .gpioPinSource = GPIO_PinSource1, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_Low, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare2, - .getCompare = TIM_GetCapture2, - .ocInit = TIM_OC2Init, - .preloadConfig = TIM_OC2PreloadConfig, -}; +// // Connector M1, PA1, TIM2_CH2, Brushless config, inversed +// static const MotorPerifDef CONN_M1_BL_INV = +// { +// // .drvType = BRUSHLESS, +// // .gpioPerif = RCC_AHB1Periph_GPIOA, +// // .gpioPort = GPIOA, +// // .gpioPin = GPIO_Pin_1, +// // .gpioPinSource = GPIO_PinSource1, +// // .gpioOType = GPIO_OType_PP, +// // .gpioAF = GPIO_AF_TIM2, +// // .timPerif = RCC_APB1Periph_TIM2, +// // .tim = TIM2, +// // .timPolarity = TIM_OCPolarity_Low, +// // .timDbgStop = DBGMCU_TIM2_STOP, +// // .timPeriod = MOTORS_BL_PWM_PERIOD, +// // .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// // .setCompare = TIM_SetCompare2, +// // .getCompare = TIM_GetCapture2, +// // .ocInit = TIM_OC2Init, +// // .preloadConfig = TIM_OC2PreloadConfig, +// }; -// Connector M2, PB11, TIM2_CH4, Brushless config, inversed -static const MotorPerifDef CONN_M2_BL_INV = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_11, - .gpioPinSource = GPIO_PinSource11, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_Low, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Connector M2, PB11, TIM2_CH4, Brushless config, inversed +// static const MotorPerifDef CONN_M2_BL_INV = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_11, +// .gpioPinSource = GPIO_PinSource11, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM2, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_Low, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare4, +// .getCompare = TIM_GetCapture4, +// .ocInit = TIM_OC4Init, +// .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Connector M3, PA15, TIM2_CH1, Brushless config, inversed -static const MotorPerifDef CONN_M3_BL_INV = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_15, - .gpioPinSource = GPIO_PinSource15, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_Low, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Connector M3, PA15, TIM2_CH1, Brushless config, inversed +// static const MotorPerifDef CONN_M3_BL_INV = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_15, +// .gpioPinSource = GPIO_PinSource15, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM2, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_Low, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare1, +// .getCompare = TIM_GetCapture1, +// .ocInit = TIM_OC1Init, +// .preloadConfig = TIM_OC1PreloadConfig, +// }; -// Connector M4, PB9, TIM4_CH4, Brushless config, inversed -static const MotorPerifDef CONN_M4_BL_INV = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_9, - .gpioPinSource = GPIO_PinSource9, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM4, - .timPerif = RCC_APB1Periph_TIM4, - .tim = TIM4, - .timPolarity = TIM_OCPolarity_Low, - .timDbgStop = DBGMCU_TIM4_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Connector M4, PB9, TIM4_CH4, Brushless config, inversed +// static const MotorPerifDef CONN_M4_BL_INV = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_9, +// .gpioPinSource = GPIO_PinSource9, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM4, +// .timPerif = RCC_APB1Periph_TIM4, +// .tim = TIM4, +// .timPolarity = TIM_OCPolarity_Low, +// .timDbgStop = DBGMCU_TIM4_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare4, +// .getCompare = TIM_GetCapture4, +// .ocInit = TIM_OC4Init, +// .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Bolt M1, PA1, TIM2_CH2, Brushless config -static const MotorPerifDef BOLT_M1_BL = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_1, - .gpioPinSource = GPIO_PinSource1, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOA, - .gpioPowerswitchPort = GPIOA, - .gpioPowerswitchPin = GPIO_Pin_0, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare2, - .getCompare = TIM_GetCapture2, - .ocInit = TIM_OC2Init, - .preloadConfig = TIM_OC2PreloadConfig, -}; +// // Bolt M1, PA1, TIM2_CH2, Brushless config +// static const MotorPerifDef BOLT_M1_BL = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_1, +// .gpioPinSource = GPIO_PinSource1, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM2, +// .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOA, +// .gpioPowerswitchPort = GPIOA, +// .gpioPowerswitchPin = GPIO_Pin_0, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare2, +// .getCompare = TIM_GetCapture2, +// .ocInit = TIM_OC2Init, +// .preloadConfig = TIM_OC2PreloadConfig, +// }; -// Bolt M2, PB11, TIM2_CH4, Brushless config -static const MotorPerifDef BOLT_M2_BL = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_11, - .gpioPinSource = GPIO_PinSource11, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOB, - .gpioPowerswitchPort = GPIOB, - .gpioPowerswitchPin = GPIO_Pin_12, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Bolt M2, PB11, TIM2_CH4, Brushless config +// static const MotorPerifDef BOLT_M2_BL = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_11, +// .gpioPinSource = GPIO_PinSource11, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM2, +// .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOB, +// .gpioPowerswitchPort = GPIOB, +// .gpioPowerswitchPin = GPIO_Pin_12, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare4, +// .getCompare = TIM_GetCapture4, +// .ocInit = TIM_OC4Init, +// .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Bolt M3, PA15, TIM2_CH1, Brushless config -static const MotorPerifDef BOLT_M3_BL = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_15, - .gpioPinSource = GPIO_PinSource15, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM2, - .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOC, - .gpioPowerswitchPort = GPIOC, - .gpioPowerswitchPin = GPIO_Pin_8, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Bolt M3, PA15, TIM2_CH1, Brushless config +// static const MotorPerifDef BOLT_M3_BL = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_15, +// .gpioPinSource = GPIO_PinSource15, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM2, +// .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOC, +// .gpioPowerswitchPort = GPIOC, +// .gpioPowerswitchPin = GPIO_Pin_8, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare1, +// .getCompare = TIM_GetCapture1, +// .ocInit = TIM_OC1Init, +// .preloadConfig = TIM_OC1PreloadConfig, +// }; -// Bolt M4, PB9, TIM4_CH4, Brushless config -static const MotorPerifDef BOLT_M4_BL = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_9, - .gpioPinSource = GPIO_PinSource9, - .gpioOType = GPIO_OType_PP, - .gpioAF = GPIO_AF_TIM4, - .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOC, - .gpioPowerswitchPort = GPIOC, - .gpioPowerswitchPin = GPIO_Pin_15, - .timPerif = RCC_APB1Periph_TIM4, - .tim = TIM4, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM4_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Bolt M4, PB9, TIM4_CH4, Brushless config +// static const MotorPerifDef BOLT_M4_BL = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_9, +// .gpioPinSource = GPIO_PinSource9, +// .gpioOType = GPIO_OType_PP, +// .gpioAF = GPIO_AF_TIM4, +// .gpioPowerswitchPerif = RCC_AHB1Periph_GPIOC, +// .gpioPowerswitchPort = GPIOC, +// .gpioPowerswitchPin = GPIO_Pin_15, +// .timPerif = RCC_APB1Periph_TIM4, +// .tim = TIM4, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM4_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare4, +// .getCompare = TIM_GetCapture4, +// .ocInit = TIM_OC4Init, +// .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Deck TX2, PA2, TIM2_CH3 -static const MotorPerifDef DECK_TX2_TIM2 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_2, - .gpioPinSource = GPIO_PinSource2, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare3, - .getCompare = TIM_GetCapture3, - .ocInit = TIM_OC3Init, - .preloadConfig = TIM_OC3PreloadConfig, -}; +// // Deck TX2, PA2, TIM2_CH3 +// static const MotorPerifDef DECK_TX2_TIM2 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_2, +// .gpioPinSource = GPIO_PinSource2, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM2, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare3, +// .getCompare = TIM_GetCapture3, +// .ocInit = TIM_OC3Init, +// .preloadConfig = TIM_OC3PreloadConfig, +// }; -// Deck TX2, PA2, TIM5_CH3 -static const MotorPerifDef DECK_TX2_TIM5 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_2, - .gpioPinSource = GPIO_PinSource2, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM5, - .timPerif = RCC_APB1Periph_TIM5, - .tim = TIM5, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM5_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare3, - .getCompare = TIM_GetCapture3, - .ocInit = TIM_OC3Init, - .preloadConfig = TIM_OC3PreloadConfig, -}; +// // Deck TX2, PA2, TIM5_CH3 +// static const MotorPerifDef DECK_TX2_TIM5 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_2, +// .gpioPinSource = GPIO_PinSource2, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM5, +// .timPerif = RCC_APB1Periph_TIM5, +// .tim = TIM5, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM5_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare3, +// .getCompare = TIM_GetCapture3, +// .ocInit = TIM_OC3Init, +// .preloadConfig = TIM_OC3PreloadConfig, +// }; -// Deck RX2, PA3, TIM2_CH4 -static const MotorPerifDef DECK_RX2_TIM2 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_3, - .gpioPinSource = GPIO_PinSource3, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Deck RX2, PA3, TIM2_CH4 +// static const MotorPerifDef DECK_RX2_TIM2 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_3, +// .gpioPinSource = GPIO_PinSource3, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM2, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare4, +// .getCompare = TIM_GetCapture4, +// .ocInit = TIM_OC4Init, +// .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Deck RX2, PA3, TIM5_CH4 -static const MotorPerifDef DECK_RX2_TIM5 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_3, - .gpioPinSource = GPIO_PinSource3, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM5, - .timPerif = RCC_APB1Periph_TIM5, - .tim = TIM5, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM5_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare4, - .getCompare = TIM_GetCapture4, - .ocInit = TIM_OC4Init, - .preloadConfig = TIM_OC4PreloadConfig, -}; +// // Deck RX2, PA3, TIM5_CH4 +// static const MotorPerifDef DECK_RX2_TIM5 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_3, +// .gpioPinSource = GPIO_PinSource3, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM5, +// .timPerif = RCC_APB1Periph_TIM5, +// .tim = TIM5, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM5_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare4, +// .getCompare = TIM_GetCapture4, +// .ocInit = TIM_OC4Init, +// .preloadConfig = TIM_OC4PreloadConfig, +// }; -// Deck IO1, PB8, TIM4_CH3 -static const MotorPerifDef DECK_IO1_TIM4 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_8, - .gpioPinSource = GPIO_PinSource8, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM4, - .timPerif = RCC_APB1Periph_TIM4, - .tim = TIM4, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM4_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare3, - .getCompare = TIM_GetCapture3, - .ocInit = TIM_OC3Init, - .preloadConfig = TIM_OC3PreloadConfig, -}; +// // Deck IO1, PB8, TIM4_CH3 +// static const MotorPerifDef DECK_IO1_TIM4 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_8, +// .gpioPinSource = GPIO_PinSource8, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM4, +// .timPerif = RCC_APB1Periph_TIM4, +// .tim = TIM4, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM4_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare3, +// .getCompare = TIM_GetCapture3, +// .ocInit = TIM_OC3Init, +// .preloadConfig = TIM_OC3PreloadConfig, +// }; -// Deck IO2, PB5, TIM3_CH2 -static const MotorPerifDef DECK_IO2 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_5, - .gpioPinSource = GPIO_PinSource5, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM3, - .timPerif = RCC_APB1Periph_TIM3, - .tim = TIM3, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM3_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare2, - .getCompare = TIM_GetCapture2, - .ocInit = TIM_OC2Init, - .preloadConfig = TIM_OC2PreloadConfig, -}; +// // Deck IO2, PB5, TIM3_CH2 +// static const MotorPerifDef DECK_IO2 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_5, +// .gpioPinSource = GPIO_PinSource5, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM3, +// .timPerif = RCC_APB1Periph_TIM3, +// .tim = TIM3, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM3_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare2, +// .getCompare = TIM_GetCapture2, +// .ocInit = TIM_OC2Init, +// .preloadConfig = TIM_OC2PreloadConfig, +// }; -// Deck IO3, PB4, TIM3_CH1 -static const MotorPerifDef DECK_IO3 = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOB, - .gpioPort = GPIOB, - .gpioPin = GPIO_Pin_4, - .gpioPinSource = GPIO_PinSource4, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM3, - .timPerif = RCC_APB1Periph_TIM3, - .tim = TIM3, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM3_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Deck IO3, PB4, TIM3_CH1 +// static const MotorPerifDef DECK_IO3 = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOB, +// .gpioPort = GPIOB, +// .gpioPin = GPIO_Pin_4, +// .gpioPinSource = GPIO_PinSource4, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM3, +// .timPerif = RCC_APB1Periph_TIM3, +// .tim = TIM3, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM3_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare1, +// .getCompare = TIM_GetCapture1, +// .ocInit = TIM_OC1Init, +// .preloadConfig = TIM_OC1PreloadConfig, +// }; -// Deck SCK, PA5, TIM2_CH1 -static const MotorPerifDef DECK_SCK = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_5, - .gpioPinSource = GPIO_PinSource5, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM2, - .timPerif = RCC_APB1Periph_TIM2, - .tim = TIM2, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM2_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Deck SCK, PA5, TIM2_CH1 +// static const MotorPerifDef DECK_SCK = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_5, +// .gpioPinSource = GPIO_PinSource5, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM2, +// .timPerif = RCC_APB1Periph_TIM2, +// .tim = TIM2, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM2_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare1, +// .getCompare = TIM_GetCapture1, +// .ocInit = TIM_OC1Init, +// .preloadConfig = TIM_OC1PreloadConfig, +// }; -// Deck MISO, PA6, TIM3_CH1 -static const MotorPerifDef DECK_MISO = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_6, - .gpioPinSource = GPIO_PinSource6, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM3, - .timPerif = RCC_APB1Periph_TIM3, - .tim = TIM3, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM3_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Deck MISO, PA6, TIM3_CH1 +// static const MotorPerifDef DECK_MISO = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_6, +// .gpioPinSource = GPIO_PinSource6, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM3, +// .timPerif = RCC_APB1Periph_TIM3, +// .tim = TIM3, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM3_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare1, +// .getCompare = TIM_GetCapture1, +// .ocInit = TIM_OC1Init, +// .preloadConfig = TIM_OC1PreloadConfig, +// }; -// Deck MOSI, PA7, TIM14_CH1 -static const MotorPerifDef DECK_MOSI = -{ - .drvType = BRUSHLESS, - .gpioPerif = RCC_AHB1Periph_GPIOA, - .gpioPort = GPIOA, - .gpioPin = GPIO_Pin_7, - .gpioPinSource = GPIO_PinSource7, - .gpioOType = GPIO_OType_OD, - .gpioAF = GPIO_AF_TIM14, - .timPerif = RCC_APB1Periph_TIM14, - .tim = TIM14, - .timPolarity = TIM_OCPolarity_High, - .timDbgStop = DBGMCU_TIM14_STOP, - .timPeriod = MOTORS_BL_PWM_PERIOD, - .timPrescaler = MOTORS_BL_PWM_PRESCALE, - .setCompare = TIM_SetCompare1, - .getCompare = TIM_GetCapture1, - .ocInit = TIM_OC1Init, - .preloadConfig = TIM_OC1PreloadConfig, -}; +// // Deck MOSI, PA7, TIM14_CH1 +// static const MotorPerifDef DECK_MOSI = +// { +// .drvType = BRUSHLESS, +// .gpioPerif = RCC_AHB1Periph_GPIOA, +// .gpioPort = GPIOA, +// .gpioPin = GPIO_Pin_7, +// .gpioPinSource = GPIO_PinSource7, +// .gpioOType = GPIO_OType_OD, +// .gpioAF = GPIO_AF_TIM14, +// .timPerif = RCC_APB1Periph_TIM14, +// .tim = TIM14, +// .timPolarity = TIM_OCPolarity_High, +// .timDbgStop = DBGMCU_TIM14_STOP, +// .timPeriod = MOTORS_BL_PWM_PERIOD, +// .timPrescaler = MOTORS_BL_PWM_PRESCALE, +// .setCompare = TIM_SetCompare1, +// .getCompare = TIM_GetCapture1, +// .ocInit = TIM_OC1Init, +// .preloadConfig = TIM_OC1PreloadConfig, +// }; -/** - * Mapping for Tags that don't have motors. - * Actually same mapping as for CF2 but the pins are not connected. - */ -const MotorPerifDef* motorMapNoMotors[NBR_OF_MOTORS] = -{ - &CONN_M1, - &CONN_M2, - &CONN_M3, - &CONN_M4 -}; +// /** +// * Mapping for Tags that don't have motors. +// * Actually same mapping as for CF2 but the pins are not connected. +// */ +// const MotorPerifDef* motorMapNoMotors[NBR_OF_MOTORS] = +// { +// &CONN_M1, +// &CONN_M2, +// &CONN_M3, +// &CONN_M4 +// }; -/** - * Default brushed mapping to M1-M4 connectors. - */ -const MotorPerifDef* motorMapDefaultBrushed[NBR_OF_MOTORS] = -{ - &CONN_M1, - &CONN_M2, - &CONN_M3, - &CONN_M4 -}; +// /** +// * Default brushed mapping to M1-M4 connectors. +// */ +// const MotorPerifDef* motorMapDefaultBrushed[NBR_OF_MOTORS] = +// { +// &CONN_M1, +// &CONN_M2, +// &CONN_M3, +// &CONN_M4 +// }; -/** - * Brushless motors mapped as on the Big-Quad deck - * M1 -> TX2 - * M2 -> IO3 - * M3 -> IO2 - * M4 -> RX2 - */ -const MotorPerifDef* motorMapBigQuadDeck[NBR_OF_MOTORS] = -{ - &DECK_TX2_TIM2, - &DECK_IO3, - &DECK_IO2, - &DECK_RX2_TIM2 -}; +// /** +// * Brushless motors mapped as on the Big-Quad deck +// * M1 -> TX2 +// * M2 -> IO3 +// * M3 -> IO2 +// * M4 -> RX2 +// */ +// const MotorPerifDef* motorMapBigQuadDeck[NBR_OF_MOTORS] = +// { +// &DECK_TX2_TIM2, +// &DECK_IO3, +// &DECK_IO2, +// &DECK_RX2_TIM2 +// }; -/** - * Brushless motors mapped to the standard motor connectors with pull-ups (~1K) to VBAT soldered. - */ -const MotorPerifDef* motorMapDefaltConBrushless[NBR_OF_MOTORS] = -{ - &CONN_M1_BL_INV, - &CONN_M2_BL_INV, - &CONN_M3_BL_INV, - &CONN_M4_BL_INV -}; +// /** +// * Brushless motors mapped to the standard motor connectors with pull-ups (~1K) to VBAT soldered. +// */ +// const MotorPerifDef* motorMapDefaltConBrushless[NBR_OF_MOTORS] = +// { +// &CONN_M1_BL_INV, +// &CONN_M2_BL_INV, +// &CONN_M3_BL_INV, +// &CONN_M4_BL_INV +// }; -/** - * Brushless motors mapped to the Bolt PWM outputs. - */ -const MotorPerifDef* motorMapBoltBrushless[NBR_OF_MOTORS] = -{ - &BOLT_M1_BL, - &BOLT_M2_BL, - &BOLT_M3_BL, - &BOLT_M4_BL -}; +// /** +// * Brushless motors mapped to the Bolt PWM outputs. +// */ +// const MotorPerifDef* motorMapBoltBrushless[NBR_OF_MOTORS] = +// { +// &BOLT_M1_BL, +// &BOLT_M2_BL, +// &BOLT_M3_BL, +// &BOLT_M4_BL +// }; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/interface/pm.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/interface/pm.h index 707af90ca..61b90519c 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/interface/pm.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/interface/pm.h @@ -48,13 +48,15 @@ #define PM_BAT_LOW_VOLTAGE LOW_VOLTAGE #endif #ifndef LOW_TIMEOUT - #define PM_BAT_LOW_TIMEOUT M2T(1000 * 5) // 5 sec default +//COMMENTED FIRMWARE + #define PM_BAT_LOW_TIMEOUT 1000 * 5//M2T(1000 * 5) // 5 sec default #else #define PM_BAT_LOW_TIMEOUT LOW_TIMEOUT #endif #ifndef SYSTEM_SHUTDOWN_TIMEOUT - #define PM_SYSTEM_SHUTDOWN_TIMEOUT M2T(1000 * 60 * 5) // 5 min default +//COMMENTED FIRMWARE + #define PM_SYSTEM_SHUTDOWN_TIMEOUT 1000 * 60 * 5//M2T(1000 * 60 * 5) // 5 min default #else #define PM_SYSTEM_SHUTDOWN_TIMEOUT M2T(1000 * 60 * SYSTEM_SHUTDOWN_TIMEOUT) #endif diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/ow_syslink.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/ow_syslink.c index 2d3b89a96..b858b5f9a 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/ow_syslink.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/ow_syslink.c @@ -55,7 +55,8 @@ void owInit() { syslinkInit(); vSemaphoreCreateBinary(waitForReply); - lockCmdBuf = xSemaphoreCreateMutexStatic(&lockCmdBufBuffer); + //COMMENTED FIRMWARE + //lockCmdBuf = xSemaphoreCreateMutexStatic(&lockCmdBufBuffer); // Put reply semaphore in right state. xSemaphoreTake(waitForReply, portMAX_DELAY); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/pm_stm32f4.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/pm_stm32f4.c index d522e268d..0808c45bf 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/pm_stm32f4.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/pm_stm32f4.c @@ -113,7 +113,8 @@ void pmInit(void) return; } - STATIC_MEM_TASK_CREATE(pmTask, pmTask, PM_TASK_NAME, NULL, PM_TASK_PRI); + //COMMENTED FIRMWARE + //STATIC_MEM_TASK_CREATE(pmTask, pmTask, PM_TASK_NAME, NULL, PM_TASK_PRI); isInit = true; //COMMENTED FIRMWARE @@ -216,28 +217,29 @@ void pmSetChargeState(PMChargeStates chgState) PMStates pmUpdateState() { PMStates state; - bool isCharging = pmSyslinkInfo.chg; - bool isPgood = pmSyslinkInfo.pgood; - uint32_t batteryLowTime; + //COMMENTED FIRMWARE + // bool isCharging = pmSyslinkInfo.chg; + // bool isPgood = pmSyslinkInfo.pgood; + // uint32_t batteryLowTime; - batteryLowTime = xTaskGetTickCount() - batteryLowTimeStamp; + // batteryLowTime = xTaskGetTickCount() - batteryLowTimeStamp; - if (isPgood && !isCharging) - { - state = charged; - } - else if (isPgood && isCharging) - { - state = charging; - } - else if (!isPgood && !isCharging && (batteryLowTime > PM_BAT_LOW_TIMEOUT)) - { - state = lowPower; - } - else - { - state = battery; - } + // if (isPgood && !isCharging) + // { + // state = charged; + // } + // else if (isPgood && isCharging) + // { + // state = charging; + // } + // else if (!isPgood && !isCharging && (batteryLowTime > PM_BAT_LOW_TIMEOUT)) + // { + // state = lowPower; + // } + // else + // { + // state = battery; + // } return state; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bmi088_bmp388.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bmi088_bmp388.c index 9f1d3a30c..0ecc3fd33 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bmi088_bmp388.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bmi088_bmp388.c @@ -27,6 +27,7 @@ #define DEBUG_MODULE "IMU" #include <math.h> +#include "empty_math.h" #include "sensors_bmi088_bmp388.h" #include "stm32fxxx.h" @@ -234,10 +235,11 @@ static void sensorsAccelGet(Axis3i16* dataOut) static void sensorsScaleBaro(baro_t* baroScaled, float pressure, float temperature) { - baroScaled->pressure = pressure*0.01f; - baroScaled->temperature = temperature; - baroScaled->asl = ((powf((1015.7f / baroScaled->pressure), 0.1902630958f) - - 1.0f) * (25.0f + 273.15f)) / 0.0065f; + //COMMENTED FIRMWARE + // baroScaled->pressure = pressure*0.01f; + // baroScaled->temperature = temperature; + // baroScaled->asl = ((powf((1015.7f / baroScaled->pressure), 0.1902630958f) + // - 1.0f) * (25.0f + 273.15f)) / 0.0065f; } bool sensorsBmi088Bmp388ReadGyro(Axis3f *gyro) @@ -512,6 +514,7 @@ static void sensorsDeviceInit(void) lpf2pInit(&accLpf[i], 1000, ACCEL_LPF_CUTOFF_FREQ); } + //COMMENTED FIRMWARE cosPitch = cosf(configblockGetCalibPitch() * (float) M_PI / 180); sinPitch = sinf(configblockGetCalibPitch() * (float) M_PI / 180); cosRoll = cosf(configblockGetCalibRoll() * (float) M_PI / 180); @@ -644,17 +647,18 @@ bool sensorsBmi088Bmp388Test(void) */ static bool processAccScale(int16_t ax, int16_t ay, int16_t az) { - if (!accScaleFound) - { - accScaleSum += sqrtf(powf(ax * SENSORS_BMI088_G_PER_LSB_CFG, 2) + powf(ay * SENSORS_BMI088_G_PER_LSB_CFG, 2) + powf(az * SENSORS_BMI088_G_PER_LSB_CFG, 2)); - accScaleSumCount++; - - if (accScaleSumCount == SENSORS_ACC_SCALE_SAMPLES) - { - accScale = accScaleSum / SENSORS_ACC_SCALE_SAMPLES; - accScaleFound = true; - } - } + //COMMENTED FIRMWARE + // if (!accScaleFound) + // { + // accScaleSum += sqrtf(powf(ax * SENSORS_BMI088_G_PER_LSB_CFG, 2) + powf(ay * SENSORS_BMI088_G_PER_LSB_CFG, 2) + powf(az * SENSORS_BMI088_G_PER_LSB_CFG, 2)); + // accScaleSumCount++; + + // if (accScaleSumCount == SENSORS_ACC_SCALE_SAMPLES) + // { + // accScale = accScaleSum / SENSORS_ACC_SCALE_SAMPLES; + // accScaleFound = true; + // } + // } return accScaleFound; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bosch.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bosch.c index c01eb7d9f..85adbf7be 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bosch.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_bosch.c @@ -34,6 +34,7 @@ #include "sensors_bosch.h" #include <math.h> +#include "empty_math.h" #include "stm32fxxx.h" @@ -764,24 +765,25 @@ static void calcMean(BiasObj* bias, Axis3f* mean) { */ static void calcVarianceAndMean(BiasObj* bias, Axis3f* variance, Axis3f* mean) { - Axis3i16* elem; - int64_t sumSquared[GYRO_NBR_OF_AXES] = {0}; - - for (elem = bias->bufStart; - elem != (bias->bufStart+SENSORS_NBR_OF_BIAS_SAMPLES); elem++) - { - sumSquared[0] += elem->x * elem->x; - sumSquared[1] += elem->y * elem->y; - sumSquared[2] += elem->z * elem->z; - } - calcMean(bias, mean); - - variance->x = fabs(sumSquared[0] / SENSORS_NBR_OF_BIAS_SAMPLES - - mean->x * mean->x); - variance->y = fabs(sumSquared[1] / SENSORS_NBR_OF_BIAS_SAMPLES - - mean->y * mean->y); - variance->z = fabs(sumSquared[2] / SENSORS_NBR_OF_BIAS_SAMPLES - - mean->z * mean->z); + //COMMENTED FIRMWARE + // Axis3i16* elem; + // int64_t sumSquared[GYRO_NBR_OF_AXES] = {0}; + + // for (elem = bias->bufStart; + // elem != (bias->bufStart+SENSORS_NBR_OF_BIAS_SAMPLES); elem++) + // { + // sumSquared[0] += elem->x * elem->x; + // sumSquared[1] += elem->y * elem->y; + // sumSquared[2] += elem->z * elem->z; + // } + // calcMean(bias, mean); + + // variance->x = fabs(sumSquared[0] / SENSORS_NBR_OF_BIAS_SAMPLES + // - mean->x * mean->x); + // variance->y = fabs(sumSquared[1] / SENSORS_NBR_OF_BIAS_SAMPLES + // - mean->y * mean->y); + // variance->z = fabs(sumSquared[2] / SENSORS_NBR_OF_BIAS_SAMPLES + // - mean->z * mean->z); } /** @@ -829,10 +831,11 @@ static void sensorsApplyBiasAndScale(Axis3f* scaled, Axis3i16* aligned, static void sensorsScaleBaro(baro_t* baroScaled, float pressure, float temperature) { - baroScaled->pressure = pressure*0.01f; - baroScaled->temperature = temperature; - baroScaled->asl = ((powf((1015.7f / baroScaled->pressure), 0.1902630958f) - - 1.0f) * (25.0f + 273.15f)) / 0.0065f; + //COMMENTED FIRMWARE + // baroScaled->pressure = pressure*0.01f; + // baroScaled->temperature = temperature; + // baroScaled->asl = ((powf((1015.7f / baroScaled->pressure), 0.1902630958f) + // - 1.0f) * (25.0f + 273.15f)) / 0.0065f; } bool sensorsBoschReadGyro(Axis3f *gyro) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_mpu9250_lps25h.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_mpu9250_lps25h.c index 7c3959e09..3b441215d 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_mpu9250_lps25h.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/hal/src/sensors_mpu9250_lps25h.c @@ -29,6 +29,7 @@ #include "sensors_mpu9250_lps25h.h" #include <math.h> +#include "empty_math.h" #include <stm32f4xx.h> #include "lps25h.h" @@ -609,19 +610,20 @@ bool sensorsMpu9250Lps25hTest(void) static bool processAccScale(int16_t ax, int16_t ay, int16_t az) { static bool accBiasFound = false; - static uint32_t accScaleSumCount = 0; + //COMMENTED FIRMWARE + // static uint32_t accScaleSumCount = 0; - if (!accBiasFound) - { - accScaleSum += sqrtf(powf(ax * SENSORS_G_PER_LSB_CFG, 2) + powf(ay * SENSORS_G_PER_LSB_CFG, 2) + powf(az * SENSORS_G_PER_LSB_CFG, 2)); - accScaleSumCount++; + // if (!accBiasFound) + // { + // accScaleSum += sqrtf(powf(ax * SENSORS_G_PER_LSB_CFG, 2) + powf(ay * SENSORS_G_PER_LSB_CFG, 2) + powf(az * SENSORS_G_PER_LSB_CFG, 2)); + // accScaleSumCount++; - if (accScaleSumCount == SENSORS_ACC_SCALE_SAMPLES) - { - accScale = accScaleSum / SENSORS_ACC_SCALE_SAMPLES; - accBiasFound = true; - } - } + // if (accScaleSumCount == SENSORS_ACC_SCALE_SAMPLES) + // { + // accScale = accScaleSum / SENSORS_ACC_SCALE_SAMPLES; + // accBiasFound = true; + // } + // } return accBiasFound; } @@ -803,56 +805,57 @@ static bool sensorsFindBiasValue(BiasObj* bias) bool sensorsMpu9250Lps25hManufacturingTest(void) { bool testStatus = false; - Axis3i16 g; - Axis3i16 a; - Axis3f acc; // Accelerometer axis data in mG - float pitch, roll; - uint32_t startTick = xTaskGetTickCount(); - - testStatus = mpu6500SelfTest(); - - if (testStatus) - { - sensorsBiasObjInit(&gyroBiasRunning); - while (xTaskGetTickCount() - startTick < SENSORS_VARIANCE_MAN_TEST_TIMEOUT) - { - mpu6500GetMotion6(&a.y, &a.x, &a.z, &g.y, &g.x, &g.z); - - if (processGyroBias(g.x, g.y, g.z, &gyroBias)) - { - gyroBiasFound = true; - DEBUG_PRINT("Gyro variance test [OK]\n"); - break; - } - } - - if (gyroBiasFound) - { - acc.x = -(a.x) * SENSORS_G_PER_LSB_CFG; - acc.y = (a.y) * SENSORS_G_PER_LSB_CFG; - acc.z = (a.z) * SENSORS_G_PER_LSB_CFG; - - // Calculate pitch and roll based on accelerometer. Board must be level - pitch = tanf(-acc.x/(sqrtf(acc.y*acc.y + acc.z*acc.z))) * 180/(float) M_PI; - roll = tanf(acc.y/acc.z) * 180/(float) M_PI; - - if ((fabsf(roll) < SENSORS_MAN_TEST_LEVEL_MAX) && (fabsf(pitch) < SENSORS_MAN_TEST_LEVEL_MAX)) - { - DEBUG_PRINT("Acc level test [OK]\n"); - testStatus = true; - } - else - { - DEBUG_PRINT("Acc level test Roll:%0.2f, Pitch:%0.2f [FAIL]\n", (double)roll, (double)pitch); - testStatus = false; - } - } - else - { - DEBUG_PRINT("Gyro variance test [FAIL]\n"); - testStatus = false; - } - } + //COMMENTED FIRMWARE + // Axis3i16 g; + // Axis3i16 a; + // Axis3f acc; // Accelerometer axis data in mG + // float pitch, roll; + // uint32_t startTick = xTaskGetTickCount(); + + // testStatus = mpu6500SelfTest(); + + // if (testStatus) + // { + // sensorsBiasObjInit(&gyroBiasRunning); + // while (xTaskGetTickCount() - startTick < SENSORS_VARIANCE_MAN_TEST_TIMEOUT) + // { + // mpu6500GetMotion6(&a.y, &a.x, &a.z, &g.y, &g.x, &g.z); + + // if (processGyroBias(g.x, g.y, g.z, &gyroBias)) + // { + // gyroBiasFound = true; + // DEBUG_PRINT("Gyro variance test [OK]\n"); + // break; + // } + // } + + // if (gyroBiasFound) + // { + // acc.x = -(a.x) * SENSORS_G_PER_LSB_CFG; + // acc.y = (a.y) * SENSORS_G_PER_LSB_CFG; + // acc.z = (a.z) * SENSORS_G_PER_LSB_CFG; + + // // Calculate pitch and roll based on accelerometer. Board must be level + // pitch = tanf(-acc.x/(sqrtf(acc.y*acc.y + acc.z*acc.z))) * 180/(float) M_PI; + // roll = tanf(acc.y/acc.z) * 180/(float) M_PI; + + // if ((fabsf(roll) < SENSORS_MAN_TEST_LEVEL_MAX) && (fabsf(pitch) < SENSORS_MAN_TEST_LEVEL_MAX)) + // { + // DEBUG_PRINT("Acc level test [OK]\n"); + // testStatus = true; + // } + // else + // { + // DEBUG_PRINT("Acc level test Roll:%0.2f, Pitch:%0.2f [FAIL]\n", (double)roll, (double)pitch); + // testStatus = false; + // } + // } + // else + // { + // DEBUG_PRINT("Gyro variance test [FAIL]\n"); + // testStatus = false; + // } + // } return testStatus; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/FatFS/ff.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/FatFS/ff.h index ec9c91ed6..7bdf765d1 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/FatFS/ff.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/FatFS/ff.h @@ -357,11 +357,12 @@ DWORD get_fattime (void); #endif /* LFN support functions */ -#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */ + +//#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */ WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */ WCHAR ff_uni2oem (DWORD uni, WORD cp); /* Unicode to OEM code conversion */ DWORD ff_wtoupper (DWORD uni); /* Unicode upper-case conversion */ -#endif +//#endif #if FF_USE_LFN == 3 /* Dynamic memory allocation */ void* ff_memalloc (UINT msize); /* Allocate memory block */ void ff_memfree (void* mblock); /* Free memory block */ diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/vl53l1/core/src/vl53l1_api.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/vl53l1/core/src/vl53l1_api.c index 2ccbe6e83..d075731f1 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/vl53l1/core/src/vl53l1_api.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/lib/vl53l1/core/src/vl53l1_api.c @@ -670,9 +670,9 @@ VL53L1_Error VL53L1_GetDeviceInfo(VL53L1_DEV Dev, LOG_FUNCTION_START(""); pLLData = VL53L1DevStructGetLLDriverHandle(Dev); - - strncpy(pVL53L1_DeviceInfo->ProductId, "", - VL53L1_DEVINFO_STRLEN-1); + //COMMENTED FIRMWARE + // strncpy(pVL53L1_DeviceInfo->ProductId, "", + // VL53L1_DEVINFO_STRLEN-1); pVL53L1_DeviceInfo->ProductType = pLLData->nvm_copy_data.identification__module_type; @@ -681,17 +681,18 @@ VL53L1_Error VL53L1_GetDeviceInfo(VL53L1_DEV Dev, pVL53L1_DeviceInfo->ProductRevisionMinor = (revision_id & 0xF0) >> 4; #ifndef VL53L1_USE_EMPTY_STRING - if (pVL53L1_DeviceInfo->ProductRevisionMinor == 0) - strncpy(pVL53L1_DeviceInfo->Name, - VL53L1_STRING_DEVICE_INFO_NAME0, - VL53L1_DEVINFO_STRLEN-1); - else - strncpy(pVL53L1_DeviceInfo->Name, - VL53L1_STRING_DEVICE_INFO_NAME1, - VL53L1_DEVINFO_STRLEN-1); - strncpy(pVL53L1_DeviceInfo->Type, - VL53L1_STRING_DEVICE_INFO_TYPE, - VL53L1_DEVINFO_STRLEN-1); +//COMMENTED FIRMWARE + // if (pVL53L1_DeviceInfo->ProductRevisionMinor == 0) + // strncpy(pVL53L1_DeviceInfo->Name, + // VL53L1_STRING_DEVICE_INFO_NAME0, + // VL53L1_DEVINFO_STRLEN-1); + // else + // strncpy(pVL53L1_DeviceInfo->Name, + // VL53L1_STRING_DEVICE_INFO_NAME1, + // VL53L1_DEVINFO_STRLEN-1); + // strncpy(pVL53L1_DeviceInfo->Type, + // VL53L1_STRING_DEVICE_INFO_TYPE, + // VL53L1_DEVINFO_STRLEN-1); #else pVL53L1_DeviceInfo->Name[0] = 0; pVL53L1_DeviceInfo->Type[0] = 0; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/math3d.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/math3d.h index 673d5d612..c3adb7681 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/math3d.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/math3d.h @@ -26,6 +26,7 @@ SOFTWARE. */ #include <math.h> +#include "empty_math.h" #include <stdbool.h> #include <stddef.h> @@ -55,16 +56,18 @@ static inline float clamp(float value, float min, float max) { // steps to allow. this does not work well for numbers near zero. // See https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ static inline bool fcloseulps(float a, float b, int ulps) { - if ((a < 0.0f) != (b < 0.0f)) { - // Handle negative zero. - if (a == b) { - return true; - } - return false; - } - int ia = *((int *)&a); - int ib = *((int *)&b); - return fabsf(ia - ib) <= ulps; + //COMMENTED FIRMWARE + // if ((a < 0.0f) != (b < 0.0f)) { + // // Handle negative zero. + // if (a == b) { + // return true; + // } + // return false; + // } + // int ia = *((int *)&a); + // int ib = *((int *)&b); + // return fabsf(ia - ib) <= ulps; + return false; } @@ -146,7 +149,8 @@ static inline float vmag2(struct vec v) { } // vector magnitude. static inline float vmag(struct vec v) { - return sqrtf(vmag2(v)); + //COMMENTED FIRMWARE + return 0;//sqrtf(vmag2(v)); } // vector Euclidean distance squared. static inline float vdist2(struct vec a, struct vec b) { @@ -154,7 +158,8 @@ static inline float vdist2(struct vec a, struct vec b) { } // vector Euclidean distance. static inline float vdist(struct vec a, struct vec b) { - return sqrtf(vdist2(a, b)); + //COMMENTED FIRMWARE + return 0;//sqrtf(vdist2(a, b)); } // normalize a vector (make a unit vector). static inline struct vec vnormalize(struct vec v) { @@ -579,23 +584,25 @@ static inline struct quat qnormalize(struct quat q); // assumes a and b are unit vectors. // does not handle degenerate case where a = -b. returns all-zero quat static inline struct quat qvectovec(struct vec a, struct vec b) { - struct vec const cross = vcross(a, b); - float const sinangle = vmag(cross); - float const cosangle = vdot(a, b); - // avoid taking sqrt of negative number due to floating point error. - // TODO: find tighter exact bound - float const EPS_ANGLE = 1e-6; - if (sinangle < EPS_ANGLE) { - if (cosangle > 0.0f) return qeye(); - else return mkquat(0.0f, 0.0f, 0.0f, 0.0f); // degenerate - } - float const halfcos = 0.5f * cosangle; - // since angle is < 180deg, the positive sqrt is always correct - float const sinhalfangle = sqrtf(fmax(0.5f - halfcos, 0.0f)); - float const coshalfangle = sqrtf(fmax(0.5f + halfcos, 0.0f)); - struct vec const qimag = vscl(sinhalfangle / sinangle, cross); - float const qreal = coshalfangle; - return quatvw(qimag, qreal); + //COMMENTED FIRMWARE + // struct vec const cross = vcross(a, b); + // float const sinangle = vmag(cross); + // float const cosangle = vdot(a, b); + // // avoid taking sqrt of negative number due to floating point error. + // // TODO: find tighter exact bound + // float const EPS_ANGLE = 1e-6; + // if (sinangle < EPS_ANGLE) { + // if (cosangle > 0.0f) return qeye(); + // else return mkquat(0.0f, 0.0f, 0.0f, 0.0f); // degenerate + // } + // float const halfcos = 0.5f * cosangle; + // // since angle is < 180deg, the positive sqrt is always correct + // float const sinhalfangle = sqrtf(fmax(0.5f - halfcos, 0.0f)); + // float const coshalfangle = sqrtf(fmax(0.5f + halfcos, 0.0f)); + // struct vec const qimag = vscl(sinhalfangle / sinangle, cross); + // float const qreal = coshalfangle; + // return quatvw(qimag, qreal); + return quatvw(a, 0); } // construct from (roll, pitch, yaw) Euler angles using Tait-Bryan convention // (yaw, then pitch about new pitch axis, then roll about new roll axis) @@ -622,25 +629,29 @@ static inline struct quat rpy2quat(struct vec rpy) { static inline struct quat rpy2quat_small(struct vec rpy) { // TODO: cite source, but can be derived from rpy2quat under first-order approximation: // sin(epsilon) = epsilon, cos(epsilon) = 1, epsilon^2 = 0 - float q2 = vmag2(rpy) / 4.0f; - if (q2 < 1) { - return quatvw(vdiv(rpy, 2), sqrtf(1.0f - q2)); - } - else { - float w = 1.0f / sqrtf(1.0f + q2); - return quatvw(vscl(w/2, rpy), w); - } + //COMMENTED FIRMWARE + // float q2 = vmag2(rpy) / 4.0f; + // if (q2 < 1) { + //return quatvw(vdiv(rpy, 2), sqrtf(1.0f - q2)); + // } + // else { + // float w = 1.0f / sqrtf(1.0f + q2); + // return quatvw(vscl(w/2, rpy), w); + // } + return quatvw(rpy, 0); } // construct quaternion from orthonormal matrix. static inline struct quat mat2quat(struct mat33 m) { - float w = sqrtf(fmax(0.0f, 1.0f + m.m[0][0] + m.m[1][1] + m.m[2][2])) / 2.0f; - float x = sqrtf(fmax(0.0f, 1.0f + m.m[0][0] - m.m[1][1] - m.m[2][2])) / 2.0f; - float y = sqrtf(fmax(0.0f, 1.0f - m.m[0][0] + m.m[1][1] - m.m[2][2])) / 2.0f; - float z = sqrtf(fmax(0.0f, 1.0f - m.m[0][0] - m.m[1][1] + m.m[2][2])) / 2.0f; - x = copysign(x, m.m[2][1] - m.m[1][2]); - y = copysign(y, m.m[0][2] - m.m[2][0]); - z = copysign(z, m.m[1][0] - m.m[0][1]); - return mkquat(x, y, z, w); + //COMMENTED FIRMWARE + // float w = sqrtf(fmax(0.0f, 1.0f + m.m[0][0] + m.m[1][1] + m.m[2][2])) / 2.0f; + // float x = sqrtf(fmax(0.0f, 1.0f + m.m[0][0] - m.m[1][1] - m.m[2][2])) / 2.0f; + // float y = sqrtf(fmax(0.0f, 1.0f - m.m[0][0] + m.m[1][1] - m.m[2][2])) / 2.0f; + // float z = sqrtf(fmax(0.0f, 1.0f - m.m[0][0] - m.m[1][1] + m.m[2][2])) / 2.0f; + // x = copysign(x, m.m[2][1] - m.m[1][2]); + // y = copysign(y, m.m[0][2] - m.m[2][0]); + // z = copysign(z, m.m[1][0] - m.m[0][1]); + //return mkquat(x, y, z, w); + return mkquat(0, 0, 0, 0); } // @@ -652,16 +663,19 @@ static inline struct quat mat2quat(struct mat33 m) { static inline struct vec quat2rpy(struct quat q) { // from https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles struct vec v; - v.x = atan2f(2.0f * (q.w * q.x + q.y * q.z), 1 - 2 * (fsqr(q.x) + fsqr(q.y))); // roll - v.y = asinf(2.0f * (q.w * q.y - q.x * q.z)); // pitch - v.z = atan2f(2.0f * (q.w * q.z + q.x * q.y), 1 - 2 * (fsqr(q.y) + fsqr(q.z))); // yaw + //COMMENTED FIRMWARE + // v.x = atan2f(2.0f * (q.w * q.x + q.y * q.z), 1 - 2 * (fsqr(q.x) + fsqr(q.y))); // roll + // v.y = asinf(2.0f * (q.w * q.y - q.x * q.z)); // pitch + // v.z = atan2f(2.0f * (q.w * q.z + q.x * q.y), 1 - 2 * (fsqr(q.y) + fsqr(q.z))); // yaw return v; } // compute the axis of a quaternion's axis-angle decomposition. static inline struct vec quat2axis(struct quat q) { // TODO this is not numerically stable for tiny rotations - float s = 1.0f / sqrtf(1.0f - q.w * q.w); - return vscl(s, mkvec(q.x, q.y, q.z)); + //COMMENTED FIRMWARE + //float s = 1.0f / sqrtf(1.0f - q.w * q.w); + //return vscl(s, mkvec(q.x, q.y, q.z)); + return vscl(0, mkvec(q.x, q.y, q.z)); } // compute the angle of a quaternion's axis-angle decomposition. // result lies in domain (-pi, pi]. @@ -753,8 +767,10 @@ static inline bool qeq(struct quat a, struct quat b) { // normalize a quaternion. // typically used to mitigate precision errors. static inline struct quat qnormalize(struct quat q) { - float s = 1.0f / sqrtf(qdot(q, q)); - return mkquat(s*q.x, s*q.y, s*q.z, s*q.w); + //COMMENTED FIRMWARE + // float s = 1.0f / sqrtf(qdot(q, q)); + // return mkquat(s*q.x, s*q.y, s*q.z, s*q.w); + return mkquat(0, 0, 0, 0); } // update an attitude estimate quaternion with a reading from a gyroscope // over the timespan dt. Gyroscope is assumed (roll, pitch, yaw) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/quatcompress.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/quatcompress.h index 6242343a8..5ab87d78e 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/quatcompress.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/quatcompress.h @@ -35,11 +35,12 @@ static inline uint32_t quatcompress(float const q[4]) { // we send the values of the quaternion's smallest 3 elements. unsigned i_largest = 0; - for (unsigned i = 1; i < 4; ++i) { - if (fabsf(q[i]) > fabsf(q[i_largest])) { - i_largest = i; - } - } + //COMMENTED FIRMWARE + // for (unsigned i = 1; i < 4; ++i) { + // if (fabsf(q[i]) > fabsf(q[i_largest])) { + // i_largest = i; + // } + // } // since -q represents the same rotation as q, // transform the quaternion so the largest element is positive. @@ -51,13 +52,14 @@ static inline uint32_t quatcompress(float const q[4]) // do compression using sign bit and 9-bit precision per element. uint32_t comp = i_largest; - for (unsigned i = 0; i < 4; ++i) { - if (i != i_largest) { - unsigned negbit = (q[i] < 0) ^ negate; - unsigned mag = ((1 << 9) - 1) * (fabsf(q[i]) / (float)M_SQRT1_2) + 0.5f; - comp = (comp << 10) | (negbit << 9) | mag; - } - } + //COMMENTED FIRMWARE + // for (unsigned i = 0; i < 4; ++i) { + // if (i != i_largest) { + // unsigned negbit = (q[i] < 0) ^ negate; + // unsigned mag = ((1 << 9) - 1) * (fabsf(q[i]) / (float)M_SQRT1_2) + 0.5f; + // comp = (comp << 10) | (negbit << 9) | mag; + // } + // } return comp; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/static_mem.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/static_mem.h index f371a5dd3..144925270 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/static_mem.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/interface/static_mem.h @@ -136,7 +136,9 @@ * * @param NAME - the name of the queue handle */ -#define STATIC_MEM_QUEUE_CREATE(NAME) xQueueCreateStatic(osSys_ ## NAME ## Length, osSys_ ## NAME ## ItemSize, osSys_ ## NAME ## Storage, &osSys_ ## NAME ## Mgm) +//COMMENTED FIRMWARE +// #define STATIC_MEM_QUEUE_CREATE(NAME) xQueueCreateStatic(osSys_ ## NAME ## Length, osSys_ ## NAME ## ItemSize, osSys_ ## NAME ## Storage, &osSys_ ## NAME ## Mgm) +#define STATIC_MEM_QUEUE_CREATE(NAME) xQueueCreate(osSys_ ## NAME ## Length, osSys_ ## NAME ## ItemSize, osSys_ ## NAME ## Storage, &osSys_ ## NAME ## Mgm) /** @@ -205,4 +207,6 @@ * @param PARAMETERS Passed on as argument to the function implementing the task * @param PRIORITY The task priority */ -#define STATIC_MEM_TASK_CREATE(NAME, FUNCTION, TASK_NAME, PARAMETERS, PRIORITY) xTaskCreateStatic((FUNCTION), (TASK_NAME), osSys_ ## NAME ## StackDepth, (PARAMETERS), (PRIORITY), osSys_ ## NAME ## StackBuffer, &osSys_ ## NAME ## TaskBuffer) +//COMMENTED FIRMWARE +//#define STATIC_MEM_TASK_CREATE(NAME, FUNCTION, TASK_NAME, PARAMETERS, PRIORITY) xTaskCreateStatic((FUNCTION), (TASK_NAME), osSys_ ## NAME ## StackDepth, (PARAMETERS), (PRIORITY), osSys_ ## NAME ## StackBuffer, &osSys_ ## NAME ## TaskBuffer) +#define STATIC_MEM_TASK_CREATE(NAME, FUNCTION, TASK_NAME, PARAMETERS, PRIORITY) xTaskCreate((FUNCTION), (TASK_NAME), osSys_ ## NAME ## StackDepth, (PARAMETERS), (PRIORITY), osSys_ ## NAME ## StackBuffer, &osSys_ ## NAME ## TaskBuffer) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/collision_avoidance.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/collision_avoidance.c index 60c40aa7d..d618e5198 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/collision_avoidance.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/collision_avoidance.c @@ -102,154 +102,156 @@ void collisionAvoidanceUpdateSetpointCore( float *workspace, setpoint_t *setpoint, sensorData_t const *sensorData, state_t const *state) { - // - // Part 1: Construct the polytope inequalities in A, b. - // - - int const nRows = nOthers + 6; - float *A = workspace; - float *B = workspace + 3 * nRows; - float *projectionWorkspace = workspace + 4 * nRows; - - // Compute the cell in a stretched coordinate system for downwash awareness. - // See header for details. - struct vec const radiiInv = veltrecip(params->ellipsoidRadii); - struct vec const ourPos = vec2svec(state->position); - - // We could do some optimizations here to reduce the number of rows, like - // leave out very far away neighbors. It would help the average case - // complexity, but not the worst case - so we skip it for now. - for (int i = 0; i < nOthers; ++i) { - struct vec peerPos = vloadf(otherPositions + 3 * i); - struct vec const toPeerStretched = veltmul(vsub(peerPos, ourPos), radiiInv); - float const dist = vmag(toPeerStretched); - struct vec const a = vdiv(veltmul(toPeerStretched, radiiInv), dist); - float const b = dist / 2.0f - 1.0f; - float scale = 1.0f / vmag(a); - vstoref(vscl(scale, a), A + 3 * i); - B[i] = scale * b; - } - - // Add the bounding box polytope faces. We also use the box faces to enforce - // max speed in the infinity-norm. - float const maxDist = params->horizonSecs * params->maxSpeed; - - memset(A + 3 * nOthers, 0, 18 * sizeof(float)); - - for (int dim = 0; dim < 3; ++dim) { - float boxMax = vindex(params->bboxMax, dim) - vindex(ourPos, dim); - A[3 * (nOthers + dim) + dim] = 1.0f; - B[nOthers + dim] = fminf(maxDist, boxMax); - - float boxMin = vindex(params->bboxMin, dim) - vindex(ourPos, dim); - A[3 * (nOthers + dim + 3) + dim] = -1.0f; - B[nOthers + dim + 3] = -fmaxf(-maxDist, boxMin); - } - - // - // Part 2: Use the constructed polytope to modify the setpoint. - // - - float const inPolytopeTolerance = 10.0f * params->voronoiProjectionTolerance; - - struct vec setPos = vec2svec(setpoint->position); - struct vec setVel = vec2svec(setpoint->velocity); - - if (setpoint->mode.x == modeVelocity) { - // Interpret the setpoint to mean "fly with this velocity". - - if (vinpolytope(vzero(), A, B, nRows, inPolytopeTolerance)) { - // Typical case - our current position is within our cell. - struct vec pseudoGoal = vscl(params->horizonSecs, setVel); - pseudoGoal = sidestepGoal(params, pseudoGoal, true, A, B, projectionWorkspace, nRows); - if (vinpolytope(pseudoGoal, A, B, nRows, inPolytopeTolerance)) { - setVel = vdiv(pseudoGoal, params->horizonSecs); - } - else { - // Projection failed to converge. Best we can do is stay still. - setVel = vzero(); - } - } - else { - // Atypical case - our current position is not within our cell. Forget - // about the original goal velocity and try to move towards our cell. - struct vec nearestInCell = vprojectpolytope( - vzero(), - A, B, projectionWorkspace, nRows, - params->voronoiProjectionTolerance, - params->voronoiProjectionMaxIters - ); - if (vinpolytope(nearestInCell, A, B, nRows, inPolytopeTolerance)) { - setVel = vclampnorm(nearestInCell, params->maxSpeed); - } - else { - // Projection failed to converge. Best we can do is stay still. - setVel = vzero(); - } - } - collisionState->lastFeasibleSetPosition = ourPos; - } - else if (setpoint->mode.x == modeAbs) { - - struct vec const setPosRelative = vsub(setPos, ourPos); - struct vec const setPosRelativeNew = sidestepGoal( - params, setPosRelative, false, A, B, projectionWorkspace, nRows); - - if (!vinpolytope(setPosRelativeNew, A, B, nRows, inPolytopeTolerance)) { - // If the projection algorithm failed to converge, then either - // 1) The problem is infeasible, or - // 2) The problem is somehow badly conditioned. - // Case 2) is still effectively infeasible -- we're in a real-time system - // with a fixed computation time budget, and we've already spent it. - // - // There's not a lot we can do if our buffered cell is empty. It means - // someone failed to stay within their cell in the past. We choose to stay - // a fixed position for as long as the cell is empty. - setVel = vzero(); - if (!visnan(collisionState->lastFeasibleSetPosition)) { - setPos = collisionState->lastFeasibleSetPosition; - } - else { - // This case should never happen as long as collision avoidance is - // initialized in a collision-free state, but we do something reasonable - // just in case. - setPos = ourPos; - collisionState->lastFeasibleSetPosition = ourPos; - } - } - else if (veq(setVel, vzero())) { - // Position, but no velocity. Interpret as waypoint, not trajectory - // tracking. "Go to this position and stop". - setPos = vadd(ourPos, setPosRelativeNew); - } - else { - // Position with nonzero velocity. Interpret as trajectory tracking. - if (vneq(setPosRelative, setPosRelativeNew)) { - // Set position is not within our cell. The situation has likely diverged - // from the original plan, and the nonzero velocity is probably pointing - // further away from our cell. Therefore, degrade to the v == 0 behavior. - setPos = vadd(ourPos, setPosRelativeNew); - setVel = vzero(); - } - else { - // Set position is within our cell. In case velocity would take us - // outside the cell within the planning horizon, scale it appropriately. - // See github issue #567 for more detailed discussion of this behavior. - float const scale = rayintersectpolytope(setPosRelative, setVel, A, B, nRows, NULL); - if (scale < 1.0f) { - setVel = vscl(scale, setVel); - } - // leave setPos unchanged. - } - } - collisionState->lastFeasibleSetPosition = setPos; - } - else { - // Unsupported control mode, do nothing. - } - - setpoint->position = svec2vec(setPos); - setpoint->velocity = svec2vec(setVel); + //COMMENTED FIRMWARE + // // + // // Part 1: Construct the polytope inequalities in A, b. + // // + + // int const nRows = nOthers + 6; + // float *A = workspace; + // float *B = workspace + 3 * nRows; + // float *projectionWorkspace = workspace + 4 * nRows; + + // // Compute the cell in a stretched coordinate system for downwash awareness. + // // See header for details. + // struct vec const radiiInv = veltrecip(params->ellipsoidRadii); + // struct vec const ourPos = vec2svec(state->position); + + // // We could do some optimizations here to reduce the number of rows, like + // // leave out very far away neighbors. It would help the average case + // // complexity, but not the worst case - so we skip it for now. + // for (int i = 0; i < nOthers; ++i) { + // struct vec peerPos = vloadf(otherPositions + 3 * i); + // struct vec const toPeerStretched = veltmul(vsub(peerPos, ourPos), radiiInv); + // float const dist = vmag(toPeerStretched); + // struct vec const a = vdiv(veltmul(toPeerStretched, radiiInv), dist); + // float const b = dist / 2.0f - 1.0f; + // float scale = 1.0f / vmag(a); + // vstoref(vscl(scale, a), A + 3 * i); + // B[i] = scale * b; + // } + + // // Add the bounding box polytope faces. We also use the box faces to enforce + // // max speed in the infinity-norm. + // float const maxDist = params->horizonSecs * params->maxSpeed; + + // memset(A + 3 * nOthers, 0, 18 * sizeof(float)); + + // //COMMENTED FIRMWARE + // // for (int dim = 0; dim < 3; ++dim) { + // // float boxMax = vindex(params->bboxMax, dim) - vindex(ourPos, dim); + // // A[3 * (nOthers + dim) + dim] = 1.0f; + // // B[nOthers + dim] = fminf(maxDist, boxMax); + + // // float boxMin = vindex(params->bboxMin, dim) - vindex(ourPos, dim); + // // A[3 * (nOthers + dim + 3) + dim] = -1.0f; + // // B[nOthers + dim + 3] = -fmaxf(-maxDist, boxMin); + // // } + + // // + // // Part 2: Use the constructed polytope to modify the setpoint. + // // + + // float const inPolytopeTolerance = 10.0f * params->voronoiProjectionTolerance; + + // struct vec setPos = vec2svec(setpoint->position); + // struct vec setVel = vec2svec(setpoint->velocity); + + // if (setpoint->mode.x == modeVelocity) { + // // Interpret the setpoint to mean "fly with this velocity". + + // if (vinpolytope(vzero(), A, B, nRows, inPolytopeTolerance)) { + // // Typical case - our current position is within our cell. + // struct vec pseudoGoal = vscl(params->horizonSecs, setVel); + // pseudoGoal = sidestepGoal(params, pseudoGoal, true, A, B, projectionWorkspace, nRows); + // if (vinpolytope(pseudoGoal, A, B, nRows, inPolytopeTolerance)) { + // setVel = vdiv(pseudoGoal, params->horizonSecs); + // } + // else { + // // Projection failed to converge. Best we can do is stay still. + // setVel = vzero(); + // } + // } + // else { + // // Atypical case - our current position is not within our cell. Forget + // // about the original goal velocity and try to move towards our cell. + // struct vec nearestInCell = vprojectpolytope( + // vzero(), + // A, B, projectionWorkspace, nRows, + // params->voronoiProjectionTolerance, + // params->voronoiProjectionMaxIters + // ); + // if (vinpolytope(nearestInCell, A, B, nRows, inPolytopeTolerance)) { + // setVel = vclampnorm(nearestInCell, params->maxSpeed); + // } + // else { + // // Projection failed to converge. Best we can do is stay still. + // setVel = vzero(); + // } + // } + // collisionState->lastFeasibleSetPosition = ourPos; + // } + // else if (setpoint->mode.x == modeAbs) { + + // struct vec const setPosRelative = vsub(setPos, ourPos); + // struct vec const setPosRelativeNew = sidestepGoal( + // params, setPosRelative, false, A, B, projectionWorkspace, nRows); + + // if (!vinpolytope(setPosRelativeNew, A, B, nRows, inPolytopeTolerance)) { + // // If the projection algorithm failed to converge, then either + // // 1) The problem is infeasible, or + // // 2) The problem is somehow badly conditioned. + // // Case 2) is still effectively infeasible -- we're in a real-time system + // // with a fixed computation time budget, and we've already spent it. + // // + // // There's not a lot we can do if our buffered cell is empty. It means + // // someone failed to stay within their cell in the past. We choose to stay + // // a fixed position for as long as the cell is empty. + // setVel = vzero(); + // if (!visnan(collisionState->lastFeasibleSetPosition)) { + // setPos = collisionState->lastFeasibleSetPosition; + // } + // else { + // // This case should never happen as long as collision avoidance is + // // initialized in a collision-free state, but we do something reasonable + // // just in case. + // setPos = ourPos; + // collisionState->lastFeasibleSetPosition = ourPos; + // } + // } + // else if (veq(setVel, vzero())) { + // // Position, but no velocity. Interpret as waypoint, not trajectory + // // tracking. "Go to this position and stop". + // setPos = vadd(ourPos, setPosRelativeNew); + // } + // else { + // // Position with nonzero velocity. Interpret as trajectory tracking. + // if (vneq(setPosRelative, setPosRelativeNew)) { + // // Set position is not within our cell. The situation has likely diverged + // // from the original plan, and the nonzero velocity is probably pointing + // // further away from our cell. Therefore, degrade to the v == 0 behavior. + // setPos = vadd(ourPos, setPosRelativeNew); + // setVel = vzero(); + // } + // else { + // // Set position is within our cell. In case velocity would take us + // // outside the cell within the planning horizon, scale it appropriately. + // // See github issue #567 for more detailed discussion of this behavior. + // float const scale = rayintersectpolytope(setPosRelative, setVel, A, B, nRows, NULL); + // if (scale < 1.0f) { + // setVel = vscl(scale, setVel); + // } + // // leave setPos unchanged. + // } + // } + // collisionState->lastFeasibleSetPosition = setPos; + // } + // else { + // // Unsupported control mode, do nothing. + // } + + // setpoint->position = svec2vec(setPos); + // setpoint->velocity = svec2vec(setVel); } @@ -258,7 +260,7 @@ void collisionAvoidanceUpdateSetpointCore( // with the standard Makefile. Everything depending on FreeRTOS, ARM, params, // etc. must go here. // -#ifdef CRAZYFLIE_FW +//#ifdef CRAZYFLIE_FW #include "FreeRTOS.h" #include "task.h" @@ -427,4 +429,4 @@ PARAM_GROUP_START(colAv) PARAM_ADD(PARAM_INT32, vorIters, ¶ms.voronoiProjectionMaxIters) PARAM_GROUP_STOP(colAv) -#endif // CRAZYFLIE_FW +//#endif // CRAZYFLIE_FW diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_indi.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_indi.c index 7483edaf8..f496cc593 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_indi.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_indi.c @@ -60,16 +60,17 @@ static inline void float_rates_zero(struct FloatRates *fr) { void indi_init_filters(void) { - // tau = 1/(2*pi*Fc) - float tau = 1.0f / (2.0f * M_PI_F * indi.filt_cutoff); - float tau_r = 1.0f / (2.0f * M_PI_F * indi.filt_cutoff_r); - float tau_axis[3] = {tau, tau, tau_r}; - float sample_time = 1.0f / ATTITUDE_RATE; - // Filtering of gyroscope and actuators - for (int8_t i = 0; i < 3; i++) { - init_butterworth_2_low_pass(&indi.u[i], tau_axis[i], sample_time, 0.0f); - init_butterworth_2_low_pass(&indi.rate[i], tau_axis[i], sample_time, 0.0f); - } + //COMMENTED FIRMWARE + // // tau = 1/(2*pi*Fc) + // float tau = 1.0f / (2.0f * M_PI_F * indi.filt_cutoff); + // float tau_r = 1.0f / (2.0f * M_PI_F * indi.filt_cutoff_r); + // float tau_axis[3] = {tau, tau, tau_r}; + // float sample_time = 1.0f / ATTITUDE_RATE; + // // Filtering of gyroscope and actuators + // for (int8_t i = 0; i < 3; i++) { + // init_butterworth_2_low_pass(&indi.u[i], tau_axis[i], sample_time, 0.0f); + // init_butterworth_2_low_pass(&indi.rate[i], tau_axis[i], sample_time, 0.0f); + // } } /** diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_mellinger.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_mellinger.c index 4a2dd2525..95bb7cd59 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_mellinger.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/controller_mellinger.c @@ -126,199 +126,200 @@ void controllerMellinger(control_t *control, setpoint_t *setpoint, const state_t *state, const uint32_t tick) { - struct vec r_error; - struct vec v_error; - struct vec target_thrust; - struct vec z_axis; - float current_thrust; - struct vec x_axis_desired; - struct vec y_axis_desired; - struct vec x_c_des; - struct vec eR, ew, M; - float dt; - float desiredYaw = 0; //deg - - if (!RATE_DO_EXECUTE(ATTITUDE_RATE, tick)) { - return; - } - - dt = (float)(1.0f/ATTITUDE_RATE); - struct vec setpointPos = mkvec(setpoint->position.x, setpoint->position.y, setpoint->position.z); - struct vec setpointVel = mkvec(setpoint->velocity.x, setpoint->velocity.y, setpoint->velocity.z); - struct vec statePos = mkvec(state->position.x, state->position.y, state->position.z); - struct vec stateVel = mkvec(state->velocity.x, state->velocity.y, state->velocity.z); - - // Position Error (ep) - r_error = vsub(setpointPos, statePos); - - // Velocity Error (ev) - v_error = vsub(setpointVel, stateVel); - - // Integral Error - i_error_z += r_error.z * dt; - i_error_z = clamp(i_error_z, -i_range_z, i_range_z); - - i_error_x += r_error.x * dt; - i_error_x = clamp(i_error_x, -i_range_xy, i_range_xy); - - i_error_y += r_error.y * dt; - i_error_y = clamp(i_error_y, -i_range_xy, i_range_xy); - - // Desired thrust [F_des] - if (setpoint->mode.x == modeAbs) { - target_thrust.x = g_vehicleMass * setpoint->acceleration.x + kp_xy * r_error.x + kd_xy * v_error.x + ki_xy * i_error_x; - target_thrust.y = g_vehicleMass * setpoint->acceleration.y + kp_xy * r_error.y + kd_xy * v_error.y + ki_xy * i_error_y; - target_thrust.z = g_vehicleMass * (setpoint->acceleration.z + GRAVITY_MAGNITUDE) + kp_z * r_error.z + kd_z * v_error.z + ki_z * i_error_z; - } else { - target_thrust.x = -sinf(radians(setpoint->attitude.pitch)); - target_thrust.y = -sinf(radians(setpoint->attitude.roll)); - // In case of a timeout, the commander tries to level, ie. x/y are disabled, but z will use the previous setting - // In that case we ignore the last feedforward term for acceleration - if (setpoint->mode.z == modeAbs) { - target_thrust.z = g_vehicleMass * GRAVITY_MAGNITUDE + kp_z * r_error.z + kd_z * v_error.z + ki_z * i_error_z; - } else { - target_thrust.z = 1; - } - } - - // Rate-controlled YAW is moving YAW angle setpoint - if (setpoint->mode.yaw == modeVelocity) { - desiredYaw = state->attitude.yaw + setpoint->attitudeRate.yaw * dt; - } else if (setpoint->mode.yaw == modeAbs) { - desiredYaw = setpoint->attitude.yaw; - } else if (setpoint->mode.quat == modeAbs) { - struct quat setpoint_quat = mkquat(setpoint->attitudeQuaternion.x, setpoint->attitudeQuaternion.y, setpoint->attitudeQuaternion.z, setpoint->attitudeQuaternion.w); - struct vec rpy = quat2rpy(setpoint_quat); - desiredYaw = degrees(rpy.z); - } - - // Z-Axis [zB] - struct quat q = mkquat(state->attitudeQuaternion.x, state->attitudeQuaternion.y, state->attitudeQuaternion.z, state->attitudeQuaternion.w); - struct mat33 R = quat2rotmat(q); - z_axis = mcolumn(R, 2); - - // yaw correction (only if position control is not used) - if (setpoint->mode.x != modeAbs) { - struct vec x_yaw = mcolumn(R, 0); - x_yaw.z = 0; - x_yaw = vnormalize(x_yaw); - struct vec y_yaw = vcross(mkvec(0, 0, 1), x_yaw); - struct mat33 R_yaw_only = mcolumns(x_yaw, y_yaw, mkvec(0, 0, 1)); - target_thrust = mvmul(R_yaw_only, target_thrust); - } - - // Current thrust [F] - current_thrust = vdot(target_thrust, z_axis); - - // Calculate axis [zB_des] - z_axis_desired = vnormalize(target_thrust); - - // [xC_des] - // x_axis_desired = z_axis_desired x [sin(yaw), cos(yaw), 0]^T - x_c_des.x = cosf(radians(desiredYaw)); - x_c_des.y = sinf(radians(desiredYaw)); - x_c_des.z = 0; - // [yB_des] - y_axis_desired = vnormalize(vcross(z_axis_desired, x_c_des)); - // [xB_des] - x_axis_desired = vcross(y_axis_desired, z_axis_desired); - - // [eR] - // Slow version - // struct mat33 Rdes = mcolumns( - // mkvec(x_axis_desired.x, x_axis_desired.y, x_axis_desired.z), - // mkvec(y_axis_desired.x, y_axis_desired.y, y_axis_desired.z), - // mkvec(z_axis_desired.x, z_axis_desired.y, z_axis_desired.z)); - - // struct mat33 R_transpose = mtranspose(R); - // struct mat33 Rdes_transpose = mtranspose(Rdes); - - // struct mat33 eRM = msub(mmult(Rdes_transpose, R), mmult(R_transpose, Rdes)); - - // eR.x = eRM.m[2][1]; - // eR.y = -eRM.m[0][2]; - // eR.z = eRM.m[1][0]; - - // Fast version (generated using Mathematica) - float x = q.x; - float y = q.y; - float z = q.z; - float w = q.w; - eR.x = (-1 + 2*fsqr(x) + 2*fsqr(y))*y_axis_desired.z + z_axis_desired.y - 2*(x*y_axis_desired.x*z + y*y_axis_desired.y*z - x*y*z_axis_desired.x + fsqr(x)*z_axis_desired.y + fsqr(z)*z_axis_desired.y - y*z*z_axis_desired.z) + 2*w*(-(y*y_axis_desired.x) - z*z_axis_desired.x + x*(y_axis_desired.y + z_axis_desired.z)); - eR.y = x_axis_desired.z - z_axis_desired.x - 2*(fsqr(x)*x_axis_desired.z + y*(x_axis_desired.z*y - x_axis_desired.y*z) - (fsqr(y) + fsqr(z))*z_axis_desired.x + x*(-(x_axis_desired.x*z) + y*z_axis_desired.y + z*z_axis_desired.z) + w*(x*x_axis_desired.y + z*z_axis_desired.y - y*(x_axis_desired.x + z_axis_desired.z))); - eR.z = y_axis_desired.x - 2*(y*(x*x_axis_desired.x + y*y_axis_desired.x - x*y_axis_desired.y) + w*(x*x_axis_desired.z + y*y_axis_desired.z)) + 2*(-(x_axis_desired.z*y) + w*(x_axis_desired.x + y_axis_desired.y) + x*y_axis_desired.z)*z - 2*y_axis_desired.x*fsqr(z) + x_axis_desired.y*(-1 + 2*fsqr(x) + 2*fsqr(z)); - - // Account for Crazyflie coordinate system - eR.y = -eR.y; - - // [ew] - float err_d_roll = 0; - float err_d_pitch = 0; - - float stateAttitudeRateRoll = radians(sensors->gyro.x); - float stateAttitudeRatePitch = -radians(sensors->gyro.y); - float stateAttitudeRateYaw = radians(sensors->gyro.z); - - ew.x = radians(setpoint->attitudeRate.roll) - stateAttitudeRateRoll; - ew.y = -radians(setpoint->attitudeRate.pitch) - stateAttitudeRatePitch; - ew.z = radians(setpoint->attitudeRate.yaw) - stateAttitudeRateYaw; - if (prev_omega_roll == prev_omega_roll) { /*d part initialized*/ - err_d_roll = ((radians(setpoint->attitudeRate.roll) - prev_setpoint_omega_roll) - (stateAttitudeRateRoll - prev_omega_roll)) / dt; - err_d_pitch = (-(radians(setpoint->attitudeRate.pitch) - prev_setpoint_omega_pitch) - (stateAttitudeRatePitch - prev_omega_pitch)) / dt; - } - prev_omega_roll = stateAttitudeRateRoll; - prev_omega_pitch = stateAttitudeRatePitch; - prev_setpoint_omega_roll = radians(setpoint->attitudeRate.roll); - prev_setpoint_omega_pitch = radians(setpoint->attitudeRate.pitch); - - // Integral Error - i_error_m_x += (-eR.x) * dt; - i_error_m_x = clamp(i_error_m_x, -i_range_m_xy, i_range_m_xy); - - i_error_m_y += (-eR.y) * dt; - i_error_m_y = clamp(i_error_m_y, -i_range_m_xy, i_range_m_xy); - - i_error_m_z += (-eR.z) * dt; - i_error_m_z = clamp(i_error_m_z, -i_range_m_z, i_range_m_z); - - // Moment: - M.x = -kR_xy * eR.x + kw_xy * ew.x + ki_m_xy * i_error_m_x + kd_omega_rp * err_d_roll; - M.y = -kR_xy * eR.y + kw_xy * ew.y + ki_m_xy * i_error_m_y + kd_omega_rp * err_d_pitch; - M.z = -kR_z * eR.z + kw_z * ew.z + ki_m_z * i_error_m_z; - - // Output - if (setpoint->mode.z == modeDisable) { - control->thrust = setpoint->thrust; - } else { - control->thrust = massThrust * current_thrust; - } - - cmd_thrust = control->thrust; - r_roll = radians(sensors->gyro.x); - r_pitch = -radians(sensors->gyro.y); - r_yaw = radians(sensors->gyro.z); - accelz = sensors->acc.z; - - if (control->thrust > 0) { - control->roll = clamp(M.x, -32000, 32000); - control->pitch = clamp(M.y, -32000, 32000); - control->yaw = clamp(-M.z, -32000, 32000); - - cmd_roll = control->roll; - cmd_pitch = control->pitch; - cmd_yaw = control->yaw; - - } else { - control->roll = 0; - control->pitch = 0; - control->yaw = 0; - - cmd_roll = control->roll; - cmd_pitch = control->pitch; - cmd_yaw = control->yaw; - - controllerMellingerReset(); - } + //COMMENTED FIRMWARE + // struct vec r_error; + // struct vec v_error; + // struct vec target_thrust; + // struct vec z_axis; + // float current_thrust; + // struct vec x_axis_desired; + // struct vec y_axis_desired; + // struct vec x_c_des; + // struct vec eR, ew, M; + // float dt; + // float desiredYaw = 0; //deg + + // if (!RATE_DO_EXECUTE(ATTITUDE_RATE, tick)) { + // return; + // } + + // dt = (float)(1.0f/ATTITUDE_RATE); + // struct vec setpointPos = mkvec(setpoint->position.x, setpoint->position.y, setpoint->position.z); + // struct vec setpointVel = mkvec(setpoint->velocity.x, setpoint->velocity.y, setpoint->velocity.z); + // struct vec statePos = mkvec(state->position.x, state->position.y, state->position.z); + // struct vec stateVel = mkvec(state->velocity.x, state->velocity.y, state->velocity.z); + + // // Position Error (ep) + // r_error = vsub(setpointPos, statePos); + + // // Velocity Error (ev) + // v_error = vsub(setpointVel, stateVel); + + // // Integral Error + // i_error_z += r_error.z * dt; + // i_error_z = clamp(i_error_z, -i_range_z, i_range_z); + + // i_error_x += r_error.x * dt; + // i_error_x = clamp(i_error_x, -i_range_xy, i_range_xy); + + // i_error_y += r_error.y * dt; + // i_error_y = clamp(i_error_y, -i_range_xy, i_range_xy); + + // // Desired thrust [F_des] + // if (setpoint->mode.x == modeAbs) { + // target_thrust.x = g_vehicleMass * setpoint->acceleration.x + kp_xy * r_error.x + kd_xy * v_error.x + ki_xy * i_error_x; + // target_thrust.y = g_vehicleMass * setpoint->acceleration.y + kp_xy * r_error.y + kd_xy * v_error.y + ki_xy * i_error_y; + // target_thrust.z = g_vehicleMass * (setpoint->acceleration.z + GRAVITY_MAGNITUDE) + kp_z * r_error.z + kd_z * v_error.z + ki_z * i_error_z; + // } else { + // target_thrust.x = -sinf(radians(setpoint->attitude.pitch)); + // target_thrust.y = -sinf(radians(setpoint->attitude.roll)); + // // In case of a timeout, the commander tries to level, ie. x/y are disabled, but z will use the previous setting + // // In that case we ignore the last feedforward term for acceleration + // if (setpoint->mode.z == modeAbs) { + // target_thrust.z = g_vehicleMass * GRAVITY_MAGNITUDE + kp_z * r_error.z + kd_z * v_error.z + ki_z * i_error_z; + // } else { + // target_thrust.z = 1; + // } + // } + + // // Rate-controlled YAW is moving YAW angle setpoint + // if (setpoint->mode.yaw == modeVelocity) { + // desiredYaw = state->attitude.yaw + setpoint->attitudeRate.yaw * dt; + // } else if (setpoint->mode.yaw == modeAbs) { + // desiredYaw = setpoint->attitude.yaw; + // } else if (setpoint->mode.quat == modeAbs) { + // struct quat setpoint_quat = mkquat(setpoint->attitudeQuaternion.x, setpoint->attitudeQuaternion.y, setpoint->attitudeQuaternion.z, setpoint->attitudeQuaternion.w); + // struct vec rpy = quat2rpy(setpoint_quat); + // desiredYaw = degrees(rpy.z); + // } + + // // Z-Axis [zB] + // struct quat q = mkquat(state->attitudeQuaternion.x, state->attitudeQuaternion.y, state->attitudeQuaternion.z, state->attitudeQuaternion.w); + // struct mat33 R = quat2rotmat(q); + // z_axis = mcolumn(R, 2); + + // // yaw correction (only if position control is not used) + // if (setpoint->mode.x != modeAbs) { + // struct vec x_yaw = mcolumn(R, 0); + // x_yaw.z = 0; + // x_yaw = vnormalize(x_yaw); + // struct vec y_yaw = vcross(mkvec(0, 0, 1), x_yaw); + // struct mat33 R_yaw_only = mcolumns(x_yaw, y_yaw, mkvec(0, 0, 1)); + // target_thrust = mvmul(R_yaw_only, target_thrust); + // } + + // // Current thrust [F] + // current_thrust = vdot(target_thrust, z_axis); + + // // Calculate axis [zB_des] + // z_axis_desired = vnormalize(target_thrust); + + // // [xC_des] + // // x_axis_desired = z_axis_desired x [sin(yaw), cos(yaw), 0]^T + // x_c_des.x = cosf(radians(desiredYaw)); + // x_c_des.y = sinf(radians(desiredYaw)); + // x_c_des.z = 0; + // // [yB_des] + // y_axis_desired = vnormalize(vcross(z_axis_desired, x_c_des)); + // // [xB_des] + // x_axis_desired = vcross(y_axis_desired, z_axis_desired); + + // // [eR] + // // Slow version + // // struct mat33 Rdes = mcolumns( + // // mkvec(x_axis_desired.x, x_axis_desired.y, x_axis_desired.z), + // // mkvec(y_axis_desired.x, y_axis_desired.y, y_axis_desired.z), + // // mkvec(z_axis_desired.x, z_axis_desired.y, z_axis_desired.z)); + + // // struct mat33 R_transpose = mtranspose(R); + // // struct mat33 Rdes_transpose = mtranspose(Rdes); + + // // struct mat33 eRM = msub(mmult(Rdes_transpose, R), mmult(R_transpose, Rdes)); + + // // eR.x = eRM.m[2][1]; + // // eR.y = -eRM.m[0][2]; + // // eR.z = eRM.m[1][0]; + + // // Fast version (generated using Mathematica) + // float x = q.x; + // float y = q.y; + // float z = q.z; + // float w = q.w; + // eR.x = (-1 + 2*fsqr(x) + 2*fsqr(y))*y_axis_desired.z + z_axis_desired.y - 2*(x*y_axis_desired.x*z + y*y_axis_desired.y*z - x*y*z_axis_desired.x + fsqr(x)*z_axis_desired.y + fsqr(z)*z_axis_desired.y - y*z*z_axis_desired.z) + 2*w*(-(y*y_axis_desired.x) - z*z_axis_desired.x + x*(y_axis_desired.y + z_axis_desired.z)); + // eR.y = x_axis_desired.z - z_axis_desired.x - 2*(fsqr(x)*x_axis_desired.z + y*(x_axis_desired.z*y - x_axis_desired.y*z) - (fsqr(y) + fsqr(z))*z_axis_desired.x + x*(-(x_axis_desired.x*z) + y*z_axis_desired.y + z*z_axis_desired.z) + w*(x*x_axis_desired.y + z*z_axis_desired.y - y*(x_axis_desired.x + z_axis_desired.z))); + // eR.z = y_axis_desired.x - 2*(y*(x*x_axis_desired.x + y*y_axis_desired.x - x*y_axis_desired.y) + w*(x*x_axis_desired.z + y*y_axis_desired.z)) + 2*(-(x_axis_desired.z*y) + w*(x_axis_desired.x + y_axis_desired.y) + x*y_axis_desired.z)*z - 2*y_axis_desired.x*fsqr(z) + x_axis_desired.y*(-1 + 2*fsqr(x) + 2*fsqr(z)); + + // // Account for Crazyflie coordinate system + // eR.y = -eR.y; + + // // [ew] + // float err_d_roll = 0; + // float err_d_pitch = 0; + + // float stateAttitudeRateRoll = radians(sensors->gyro.x); + // float stateAttitudeRatePitch = -radians(sensors->gyro.y); + // float stateAttitudeRateYaw = radians(sensors->gyro.z); + + // ew.x = radians(setpoint->attitudeRate.roll) - stateAttitudeRateRoll; + // ew.y = -radians(setpoint->attitudeRate.pitch) - stateAttitudeRatePitch; + // ew.z = radians(setpoint->attitudeRate.yaw) - stateAttitudeRateYaw; + // if (prev_omega_roll == prev_omega_roll) { /*d part initialized*/ + // err_d_roll = ((radians(setpoint->attitudeRate.roll) - prev_setpoint_omega_roll) - (stateAttitudeRateRoll - prev_omega_roll)) / dt; + // err_d_pitch = (-(radians(setpoint->attitudeRate.pitch) - prev_setpoint_omega_pitch) - (stateAttitudeRatePitch - prev_omega_pitch)) / dt; + // } + // prev_omega_roll = stateAttitudeRateRoll; + // prev_omega_pitch = stateAttitudeRatePitch; + // prev_setpoint_omega_roll = radians(setpoint->attitudeRate.roll); + // prev_setpoint_omega_pitch = radians(setpoint->attitudeRate.pitch); + + // // Integral Error + // i_error_m_x += (-eR.x) * dt; + // i_error_m_x = clamp(i_error_m_x, -i_range_m_xy, i_range_m_xy); + + // i_error_m_y += (-eR.y) * dt; + // i_error_m_y = clamp(i_error_m_y, -i_range_m_xy, i_range_m_xy); + + // i_error_m_z += (-eR.z) * dt; + // i_error_m_z = clamp(i_error_m_z, -i_range_m_z, i_range_m_z); + + // // Moment: + // M.x = -kR_xy * eR.x + kw_xy * ew.x + ki_m_xy * i_error_m_x + kd_omega_rp * err_d_roll; + // M.y = -kR_xy * eR.y + kw_xy * ew.y + ki_m_xy * i_error_m_y + kd_omega_rp * err_d_pitch; + // M.z = -kR_z * eR.z + kw_z * ew.z + ki_m_z * i_error_m_z; + + // // Output + // if (setpoint->mode.z == modeDisable) { + // control->thrust = setpoint->thrust; + // } else { + // control->thrust = massThrust * current_thrust; + // } + + // cmd_thrust = control->thrust; + // r_roll = radians(sensors->gyro.x); + // r_pitch = -radians(sensors->gyro.y); + // r_yaw = radians(sensors->gyro.z); + // accelz = sensors->acc.z; + + // if (control->thrust > 0) { + // control->roll = clamp(M.x, -32000, 32000); + // control->pitch = clamp(M.y, -32000, 32000); + // control->yaw = clamp(-M.z, -32000, 32000); + + // cmd_roll = control->roll; + // cmd_pitch = control->pitch; + // cmd_yaw = control->yaw; + + // } else { + // control->roll = 0; + // control->pitch = 0; + // control->yaw = 0; + + // cmd_roll = control->roll; + // cmd_pitch = control->pitch; + // cmd_yaw = control->yaw; + + // controllerMellingerReset(); + // } } PARAM_GROUP_START(ctrlMel) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_high_level.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_high_level.c index 7d309ccc6..4cef37cd5 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_high_level.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_high_level.c @@ -262,9 +262,11 @@ void crtpCommanderHighLevelInit(void) plan_init(&planner); //Start the trajectory task - STATIC_MEM_TASK_CREATE(crtpCommanderHighLevelTask, crtpCommanderHighLevelTask, CMD_HIGH_LEVEL_TASK_NAME, NULL, CMD_HIGH_LEVEL_TASK_PRI); + //COMMENTED FIRMWARE + //STATIC_MEM_TASK_CREATE(crtpCommanderHighLevelTask, crtpCommanderHighLevelTask, CMD_HIGH_LEVEL_TASK_NAME, NULL, CMD_HIGH_LEVEL_TASK_PRI); - lockTraj = xSemaphoreCreateMutexStatic(&lockTrajBuffer); + //COMMENTED FIRMWARE + //lockTraj = xSemaphoreCreateMutexStatic(&lockTrajBuffer); pos = vzero(); vel = vzero(); @@ -453,7 +455,8 @@ int takeoff_with_velocity(const struct data_takeoff_with_velocity* data) } float velocity = data->velocity > 0 ? data->velocity : defaultTakeoffVelocity; - float duration = fabsf(height - pos.z) / velocity; + //COMMENTED FIRMWARE + float duration = 1;//fabsf(height - pos.z) / velocity; result = plan_takeoff(&planner, pos, yaw, height, hover_yaw, duration, t); xSemaphoreGive(lockTraj); } @@ -508,7 +511,8 @@ int land_with_velocity(const struct data_land_with_velocity* data) } float velocity = data->velocity > 0 ? data->velocity : defaultLandingVelocity; - float duration = fabsf(height - pos.z) / velocity; + //COMMENTED FIRMWARE + float duration = 1;//fabsf(height - pos.z) / velocity; result = plan_land(&planner, pos, yaw, height, hover_yaw, duration, t); xSemaphoreGive(lockTraj); } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_rpyt.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_rpyt.c index 962121d4a..c8eedf066 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_rpyt.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_commander_rpyt.c @@ -24,6 +24,7 @@ * */ #include <math.h> +#include "empty_math.h" #include <stdbool.h> #include "crtp_commander.h" @@ -132,7 +133,8 @@ void crtpCommanderRpytDecodeSetpoint(setpoint_t *setpoint, CRTPPacket *pk) if (thrustLocked || (rawThrust < MIN_THRUST)) { setpoint->thrust = 0; } else { - setpoint->thrust = fminf(rawThrust, MAX_THRUST); + //COMMENTED FIRMWARE + setpoint->thrust = rawThrust;//fminf(rawThrust, MAX_THRUST); } if (altHoldMode) { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_localization_service.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_localization_service.c index 1468992ca..b44449844 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_localization_service.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtp_localization_service.c @@ -25,6 +25,7 @@ */ #include <string.h> #include <stdint.h> +#include "empty_math.h" #include "FreeRTOS.h" #include "task.h" @@ -33,6 +34,7 @@ #include "crtp_localization_service.h" #include "log.h" #include "param.h" +#include "cfassert.h" #include "stabilizer_types.h" #include "stabilizer.h" diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtpservice.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtpservice.c index 720d7de7e..a3b9a4812 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtpservice.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/crtpservice.c @@ -86,8 +86,9 @@ static void crtpSrvTask(void* prm) break; case linkSource: p.size = CRTP_MAX_DATA_SIZE; - bzero(p.data, CRTP_MAX_DATA_SIZE); - strcpy((char*)p.data, "Bitcraze Crazyflie"); + //COMMENTED FIRMWARE + //bzero(p.data, CRTP_MAX_DATA_SIZE); + //strcpy((char*)p.data, "Bitcraze Crazyflie"); crtpSendPacketBlock(&p); break; case linkSink: diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator.c index fb2df521d..ecf18fdfb 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator.c @@ -88,7 +88,8 @@ static EstimatorFcns estimatorFunctions[] = { }; void stateEstimatorInit(StateEstimatorType estimator) { - measurementsQueue = STATIC_MEM_QUEUE_CREATE(measurementsQueue); + //COMMENTED FIRMWARE + //measurementsQueue = STATIC_MEM_QUEUE_CREATE(measurementsQueue); stateEstimatorSwitchTo(estimator); } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator_kalman.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator_kalman.c index f9f6c25f9..3ac426322 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator_kalman.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/estimator_kalman.c @@ -181,11 +181,12 @@ STATIC_MEM_TASK_ALLOC_STACK_NO_DMA_CCM_SAFE(kalmanTask, 3 * configMINIMAL_STACK_ // Called one time during system startup void estimatorKalmanTaskInit() { - vSemaphoreCreateBinary(runTaskSemaphore); + //COMMENTED FIRMWARE + // vSemaphoreCreateBinary(runTaskSemaphore); - dataMutex = xSemaphoreCreateMutexStatic(&dataMutexBuffer); + // dataMutex = xSemaphoreCreateMutexStatic(&dataMutexBuffer); - STATIC_MEM_TASK_CREATE(kalmanTask, kalmanTask, KALMAN_TASK_NAME, NULL, KALMAN_TASK_PRI); + // STATIC_MEM_TASK_CREATE(kalmanTask, kalmanTask, KALMAN_TASK_NAME, NULL, KALMAN_TASK_PRI); isInit = true; } @@ -232,9 +233,10 @@ static void kalmanTask(void* parameters) { nextPrediction = osTick + S2T(1.0f / PREDICT_RATE); - if (!rateSupervisorValidate(&rateSupervisorContext, T2M(osTick))) { - DEBUG_PRINT("WARNING: Kalman prediction rate low (%lu)\n", rateSupervisorLatestCount(&rateSupervisorContext)); - } + //COMMENTED FIRMWARE + // if (!rateSupervisorValidate(&rateSupervisorContext, T2M(osTick))) { + // DEBUG_PRINT("WARNING: Kalman prediction rate low (%lu)\n", rateSupervisorLatestCount(&rateSupervisorContext)); + // } } /** diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/eventtrigger.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/eventtrigger.c index 29ef92812..c0e0d1238 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/eventtrigger.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/eventtrigger.c @@ -55,12 +55,13 @@ const eventtrigger *eventtriggerGetById(uint16_t id) const eventtrigger* eventtriggerGetByName(const char *name) { const eventtrigger* result = &_eventtrigger_start; - int numEventtriggers = &_eventtrigger_stop - &_eventtrigger_start; - for (int i = 0; i < numEventtriggers; ++i) { - if (strcmp(result[i].name, name) == 0) { - return &result[i]; - } - } + //COMMENTED FIRMWARE + // int numEventtriggers = &_eventtrigger_stop - &_eventtrigger_start; + // for (int i = 0; i < numEventtriggers; ++i) { + // if (strcmp(result[i].name, name) == 0) { + // return &result[i]; + // } + // } return 0; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/health.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/health.c index ec778f18b..a2c512e66 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/health.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/health.c @@ -284,9 +284,10 @@ void healthRunTests(sensorData_t *sensors) for (int j = 0; j < 3; j++) { motorsBeep(m, true, testsound[m], (uint16_t)(MOTORS_TIM_BEEP_CLK_FREQ / A4)/ 20); - vTaskDelay(M2T(MOTORS_TEST_ON_TIME_MS)); + //COMMENTED FIRMWARE + vTaskDelay(MOTORS_TEST_ON_TIME_MS);//M2T(MOTORS_TEST_ON_TIME_MS)); motorsBeep(m, false, 0, 0); - vTaskDelay(M2T(100)); + vTaskDelay(100);//M2T(100)); } } } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/info.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/info.c index fb98ee303..91c2c8dc0 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/info.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/info.c @@ -74,103 +74,104 @@ void infoInit() void infoTask(void *param) { - CRTPPacket p; - int i; - static int ctr=0; - - while (TRUE) - { - if (crtpReceivePacketWait(crtpInfo, &p, 1000) == pdTRUE) - { - InfoNbr infoNbr = CRTP_GET_NBR(p.port); - - switch (infoNbr) - { - case infoCopterNr: - if (p.data[0] == infoName) - { - p.data[1] = 0x90; - p.data[2] = 0x00; //Version 0.9.0 (Crazyflie) - strcpy((char*)&p.data[3], "CrazyFlie"); - - p.size = 3+strlen("CrazyFlie"); - crtpSendPacketBlock(&p); - } else if (p.data[0] == infoVersion) { - i=1; - - strncpy((char*)&p.data[i], V_SLOCAL_REVISION, 31-i); - i += strlen(V_SLOCAL_REVISION); - - if (i<31) p.data[i++] = ','; - - strncpy((char*)&p.data[i], V_SREVISION, 31-i); - i += strlen(V_SREVISION); - - if (i<31) p.data[i++] = ','; - - strncpy((char*)&p.data[i], V_STAG, 31-i); - i += strlen(V_STAG); - - if (i<31) p.data[i++] = ','; - if (i<31) p.data[i++] = V_MODIFIED?'M':'C'; - - p.size = (i<31)?i:31; - crtpSendPacketBlock(&p); - } else if (p.data[0] == infoCpuId) { - memcpy((char*)&p.data[1], (char*)CpuId, 12); - - p.size = 13; - crtpSendPacketBlock(&p); - } - - break; - case infoBatteryNr: - if (p.data[0] == batteryVoltage) - { - float value = pmGetBatteryVoltage(); - - memcpy(&p.data[1], (char*)&value, 4); - - p.size = 5; - crtpSendPacketBlock(&p); - } else if (p.data[0] == batteryMax) { - float value = pmGetBatteryVoltageMax(); - - memcpy(&p.data[1], (char*)&value, 4); - - p.size = 5; - crtpSendPacketBlock(&p); - } else if (p.data[0] == batteryMin) { - float value = pmGetBatteryVoltageMin(); - - memcpy(&p.data[1], (char*)&value, 4); - - p.size = 5; - crtpSendPacketBlock(&p); - } - break; - default: - break; - } - } - - // Send a warning message if the battery voltage drops under 3.3V - // This is sent every 5 info transaction or every 5 seconds - if (ctr++>5) { - ctr=0; - - if (pmGetBatteryVoltageMin() < INFO_BAT_WARNING) - { - float value = pmGetBatteryVoltage(); - - p.port = CRTP_PORT(0,8,3); - p.data[0] = 0; - memcpy(&p.data[1], (char*)&value, 4); - - p.size = 5; - crtpSendPacketBlock(&p); - } - } - - } + //COMMENTED FIRMWARE + // CRTPPacket p; + // int i; + // static int ctr=0; + + // while (TRUE) + // { + // if (crtpReceivePacketWait(crtpInfo, &p, 1000) == pdTRUE) + // { + // InfoNbr infoNbr = CRTP_GET_NBR(p.port); + + // switch (infoNbr) + // { + // case infoCopterNr: + // if (p.data[0] == infoName) + // { + // p.data[1] = 0x90; + // p.data[2] = 0x00; //Version 0.9.0 (Crazyflie) + // strcpy((char*)&p.data[3], "CrazyFlie"); + + // p.size = 3+strlen("CrazyFlie"); + // crtpSendPacketBlock(&p); + // } else if (p.data[0] == infoVersion) { + // i=1; + + // strncpy((char*)&p.data[i], V_SLOCAL_REVISION, 31-i); + // i += strlen(V_SLOCAL_REVISION); + + // if (i<31) p.data[i++] = ','; + + // strncpy((char*)&p.data[i], V_SREVISION, 31-i); + // i += strlen(V_SREVISION); + + // if (i<31) p.data[i++] = ','; + + // strncpy((char*)&p.data[i], V_STAG, 31-i); + // i += strlen(V_STAG); + + // if (i<31) p.data[i++] = ','; + // if (i<31) p.data[i++] = V_MODIFIED?'M':'C'; + + // p.size = (i<31)?i:31; + // crtpSendPacketBlock(&p); + // } else if (p.data[0] == infoCpuId) { + // memcpy((char*)&p.data[1], (char*)CpuId, 12); + + // p.size = 13; + // crtpSendPacketBlock(&p); + // } + + // break; + // case infoBatteryNr: + // if (p.data[0] == batteryVoltage) + // { + // float value = pmGetBatteryVoltage(); + + // memcpy(&p.data[1], (char*)&value, 4); + + // p.size = 5; + // crtpSendPacketBlock(&p); + // } else if (p.data[0] == batteryMax) { + // float value = pmGetBatteryVoltageMax(); + + // memcpy(&p.data[1], (char*)&value, 4); + + // p.size = 5; + // crtpSendPacketBlock(&p); + // } else if (p.data[0] == batteryMin) { + // float value = pmGetBatteryVoltageMin(); + + // memcpy(&p.data[1], (char*)&value, 4); + + // p.size = 5; + // crtpSendPacketBlock(&p); + // } + // break; + // default: + // break; + // } + // } + + // // Send a warning message if the battery voltage drops under 3.3V + // // This is sent every 5 info transaction or every 5 seconds + // if (ctr++>5) { + // ctr=0; + + // if (pmGetBatteryVoltageMin() < INFO_BAT_WARNING) + // { + // float value = pmGetBatteryVoltage(); + + // p.port = CRTP_PORT(0,8,3); + // p.data[0] = 0; + // memcpy(&p.data[1], (char*)&value, 4); + + // p.size = 5; + // crtpSendPacketBlock(&p); + // } + // } + + // } } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/kalman_core.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/kalman_core.c index 1cb0f2b58..c9575ec72 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/kalman_core.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/kalman_core.c @@ -167,10 +167,11 @@ void kalmanCoreInit(kalmanCoreData_t* this) { // this->S[KC_STATE_D2] = 0; // reset the attitude quaternion - initialQuaternion[0] = arm_cos_f32(initialYaw / 2); - initialQuaternion[1] = 0.0; - initialQuaternion[2] = 0.0; - initialQuaternion[3] = arm_sin_f32(initialYaw / 2); + //COMMENTED FIRMWARE + // initialQuaternion[0] = arm_cos_f32(initialYaw / 2); + // initialQuaternion[1] = 0.0; + // initialQuaternion[2] = 0.0; + // initialQuaternion[3] = arm_sin_f32(initialYaw / 2); for (int i = 0; i < 4; i++) { this->q[i] = initialQuaternion[i]; } // then set the initial rotation matrix to the identity. This only affects @@ -185,17 +186,18 @@ void kalmanCoreInit(kalmanCoreData_t* this) { } // initialize state variances - this->P[KC_STATE_X][KC_STATE_X] = powf(stdDevInitialPosition_xy, 2); - this->P[KC_STATE_Y][KC_STATE_Y] = powf(stdDevInitialPosition_xy, 2); - this->P[KC_STATE_Z][KC_STATE_Z] = powf(stdDevInitialPosition_z, 2); + //COMMENTED FIRMWARE + // this->P[KC_STATE_X][KC_STATE_X] = powf(stdDevInitialPosition_xy, 2); + // this->P[KC_STATE_Y][KC_STATE_Y] = powf(stdDevInitialPosition_xy, 2); + // this->P[KC_STATE_Z][KC_STATE_Z] = powf(stdDevInitialPosition_z, 2); - this->P[KC_STATE_PX][KC_STATE_PX] = powf(stdDevInitialVelocity, 2); - this->P[KC_STATE_PY][KC_STATE_PY] = powf(stdDevInitialVelocity, 2); - this->P[KC_STATE_PZ][KC_STATE_PZ] = powf(stdDevInitialVelocity, 2); + // this->P[KC_STATE_PX][KC_STATE_PX] = powf(stdDevInitialVelocity, 2); + // this->P[KC_STATE_PY][KC_STATE_PY] = powf(stdDevInitialVelocity, 2); + // this->P[KC_STATE_PZ][KC_STATE_PZ] = powf(stdDevInitialVelocity, 2); - this->P[KC_STATE_D0][KC_STATE_D0] = powf(stdDevInitialAttitude_rollpitch, 2); - this->P[KC_STATE_D1][KC_STATE_D1] = powf(stdDevInitialAttitude_rollpitch, 2); - this->P[KC_STATE_D2][KC_STATE_D2] = powf(stdDevInitialAttitude_yaw, 2); + // this->P[KC_STATE_D0][KC_STATE_D0] = powf(stdDevInitialAttitude_rollpitch, 2); + // this->P[KC_STATE_D1][KC_STATE_D1] = powf(stdDevInitialAttitude_rollpitch, 2); + // this->P[KC_STATE_D2][KC_STATE_D2] = powf(stdDevInitialAttitude_yaw, 2); //COMMENTED FIRMWARE // this->Pm.numRows = KC_STATE_DIM; @@ -572,17 +574,18 @@ void kalmanCoreAddProcessNoise(kalmanCoreData_t* this, float dt) { if (dt>0) { - this->P[KC_STATE_X][KC_STATE_X] += powf(procNoiseAcc_xy*dt*dt + procNoiseVel*dt + procNoisePos, 2); // add process noise on position - this->P[KC_STATE_Y][KC_STATE_Y] += powf(procNoiseAcc_xy*dt*dt + procNoiseVel*dt + procNoisePos, 2); // add process noise on position - this->P[KC_STATE_Z][KC_STATE_Z] += powf(procNoiseAcc_z*dt*dt + procNoiseVel*dt + procNoisePos, 2); // add process noise on position - - this->P[KC_STATE_PX][KC_STATE_PX] += powf(procNoiseAcc_xy*dt + procNoiseVel, 2); // add process noise on velocity - this->P[KC_STATE_PY][KC_STATE_PY] += powf(procNoiseAcc_xy*dt + procNoiseVel, 2); // add process noise on velocity - this->P[KC_STATE_PZ][KC_STATE_PZ] += powf(procNoiseAcc_z*dt + procNoiseVel, 2); // add process noise on velocity - - this->P[KC_STATE_D0][KC_STATE_D0] += powf(measNoiseGyro_rollpitch * dt + procNoiseAtt, 2); - this->P[KC_STATE_D1][KC_STATE_D1] += powf(measNoiseGyro_rollpitch * dt + procNoiseAtt, 2); - this->P[KC_STATE_D2][KC_STATE_D2] += powf(measNoiseGyro_yaw * dt + procNoiseAtt, 2); + //COMMENTED FIRMWARE + // this->P[KC_STATE_X][KC_STATE_X] += powf(procNoiseAcc_xy*dt*dt + procNoiseVel*dt + procNoisePos, 2); // add process noise on position + // this->P[KC_STATE_Y][KC_STATE_Y] += powf(procNoiseAcc_xy*dt*dt + procNoiseVel*dt + procNoisePos, 2); // add process noise on position + // this->P[KC_STATE_Z][KC_STATE_Z] += powf(procNoiseAcc_z*dt*dt + procNoiseVel*dt + procNoisePos, 2); // add process noise on position + + // this->P[KC_STATE_PX][KC_STATE_PX] += powf(procNoiseAcc_xy*dt + procNoiseVel, 2); // add process noise on velocity + // this->P[KC_STATE_PY][KC_STATE_PY] += powf(procNoiseAcc_xy*dt + procNoiseVel, 2); // add process noise on velocity + // this->P[KC_STATE_PZ][KC_STATE_PZ] += powf(procNoiseAcc_z*dt + procNoiseVel, 2); // add process noise on velocity + + // this->P[KC_STATE_D0][KC_STATE_D0] += powf(measNoiseGyro_rollpitch * dt + procNoiseAtt, 2); + // this->P[KC_STATE_D1][KC_STATE_D1] += powf(measNoiseGyro_rollpitch * dt + procNoiseAtt, 2); + // this->P[KC_STATE_D2][KC_STATE_D2] += powf(measNoiseGyro_yaw * dt + procNoiseAtt, 2); } for (int i=0; i<KC_STATE_DIM; i++) { @@ -746,17 +749,18 @@ void kalmanCoreExternalizeState(const kalmanCoreData_t* this, state_t *state, co }; // convert the new attitude into Euler YPR - float yaw = atan2f(2*(this->q[1]*this->q[2]+this->q[0]*this->q[3]) , this->q[0]*this->q[0] + this->q[1]*this->q[1] - this->q[2]*this->q[2] - this->q[3]*this->q[3]); - float pitch = asinf(-2*(this->q[1]*this->q[3] - this->q[0]*this->q[2])); - float roll = atan2f(2*(this->q[2]*this->q[3]+this->q[0]*this->q[1]) , this->q[0]*this->q[0] - this->q[1]*this->q[1] - this->q[2]*this->q[2] + this->q[3]*this->q[3]); - - // Save attitude, adjusted for the legacy CF2 body coordinate system - state->attitude = (attitude_t){ - .timestamp = tick, - .roll = roll*RAD_TO_DEG, - .pitch = -pitch*RAD_TO_DEG, - .yaw = yaw*RAD_TO_DEG - }; + //COMMENTED FIRMWARE + // float yaw = atan2f(2*(this->q[1]*this->q[2]+this->q[0]*this->q[3]) , this->q[0]*this->q[0] + this->q[1]*this->q[1] - this->q[2]*this->q[2] - this->q[3]*this->q[3]); + // float pitch = asinf(-2*(this->q[1]*this->q[3] - this->q[0]*this->q[2])); + // float roll = atan2f(2*(this->q[2]*this->q[3]+this->q[0]*this->q[1]) , this->q[0]*this->q[0] - this->q[1]*this->q[1] - this->q[2]*this->q[2] + this->q[3]*this->q[3]); + + // // Save attitude, adjusted for the legacy CF2 body coordinate system + // state->attitude = (attitude_t){ + // .timestamp = tick, + // .roll = roll*RAD_TO_DEG, + // .pitch = -pitch*RAD_TO_DEG, + // .yaw = yaw*RAD_TO_DEG + // }; // Save quaternion, hopefully one day this could be used in a better controller. // Note that this is not adjusted for the legacy coordinate system diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/mm_distance_robust.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/mm_distance_robust.c index e0662bd38..d0d12024b 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/mm_distance_robust.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/kalman_core/mm_distance_robust.c @@ -25,21 +25,22 @@ // Reference: https://www.geeksforgeeks.org/cholesky-decomposition-matrix-decomposition/ static void Cholesky_Decomposition(int n, float matrix[n][n], float lower[n][n]){ // Decomposing a matrix into Lower Triangular - for (int i = 0; i < n; i++) { - for (int j = 0; j <= i; j++) { - float sum = 0.0; - if (j == i) // summation for diagnols - { - for (int k = 0; k < j; k++) - sum += powf(lower[j][k], 2); - lower[j][j] = sqrtf(matrix[j][j] - sum); - } else { - for (int k = 0; k < j; k++) - sum += (lower[i][k] * lower[j][k]); - lower[i][j] = (matrix[i][j] - sum) / lower[j][j]; - } - } - } + //COMMENTED FIRMWARE + // for (int i = 0; i < n; i++) { + // for (int j = 0; j <= i; j++) { + // float sum = 0.0; + // if (j == i) // summation for diagnols + // { + // for (int k = 0; k < j; k++) + // sum += powf(lower[j][k], 2); + // lower[j][j] = sqrtf(matrix[j][j] - sum); + // } else { + // for (int k = 0; k < j; k++) + // sum += (lower[i][k] * lower[j][k]); + // lower[i][j] = (matrix[i][j] - sum) / lower[j][j]; + // } + // } + // } } /* Weight function for GM Robust cost function diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/lighthouse/lighthouse_core.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/lighthouse/lighthouse_core.c index 2c362c6ff..e60210772 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/lighthouse/lighthouse_core.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/lighthouse/lighthouse_core.c @@ -443,60 +443,61 @@ static void updateSystemStatus(const uint32_t now_ms) { } void lighthouseCoreTask(void *param) { - bool isUartFrameValid = false; + //COMMENTED FIRMWARE + // bool isUartFrameValid = false; - uart1Init(230400); - systemWaitStart(); + // uart1Init(230400); + // systemWaitStart(); - lighthouseStorageVerifySetStorageVersion(); - lighthouseStorageInitializeGeoDataFromStorage(); - lighthouseStorageInitializeCalibDataFromStorage(); + // lighthouseStorageVerifySetStorageVersion(); + // lighthouseStorageInitializeGeoDataFromStorage(); + // lighthouseStorageInitializeCalibDataFromStorage(); - if (lighthouseDeckFlasherCheckVersionAndBoot() == false) { - DEBUG_PRINT("FPGA not booted. Lighthouse disabled!\n"); - while(1) { - vTaskDelay(portMAX_DELAY); - } - } - deckIsFlashed = true; + // if (lighthouseDeckFlasherCheckVersionAndBoot() == false) { + // DEBUG_PRINT("FPGA not booted. Lighthouse disabled!\n"); + // while(1) { + // vTaskDelay(portMAX_DELAY); + // } + // } + // deckIsFlashed = true; - vTaskDelay(M2T(100)); + // vTaskDelay(M2T(100)); - memset(&bsIdentificationData, 0, sizeof(bsIdentificationData)); + // memset(&bsIdentificationData, 0, sizeof(bsIdentificationData)); - while(1) { - memset(pulseWidth, 0, sizeof(pulseWidth[0]) * PULSE_PROCESSOR_N_SENSORS); - waitForUartSynchFrame(); - uartSynchronized = true; + // while(1) { + // memset(pulseWidth, 0, sizeof(pulseWidth[0]) * PULSE_PROCESSOR_N_SENSORS); + // waitForUartSynchFrame(); + // uartSynchronized = true; - bool previousWasSyncFrame = false; + // bool previousWasSyncFrame = false; - while((isUartFrameValid = getUartFrameRaw(&frame))) { - const uint32_t now_ms = T2M(xTaskGetTickCount()); + // while((isUartFrameValid = getUartFrameRaw(&frame))) { + // const uint32_t now_ms = T2M(xTaskGetTickCount()); - // If a sync frame is getting through, we are only receiving sync frames. So nothing else. Reset state - if(frame.isSyncFrame && previousWasSyncFrame) { - pulseProcessorAllClear(&angles); - } - // Now we are receiving items - else if(!frame.isSyncFrame) { - STATS_CNT_RATE_EVENT(&frameRate); - - deckHealthCheck(&lighthouseCoreState, &frame, now_ms); - lighthouseUpdateSystemType(); - if (pulseProcessorProcessPulse) { - processFrame(&lighthouseCoreState, &angles, &frame); - } - } + // // If a sync frame is getting through, we are only receiving sync frames. So nothing else. Reset state + // if(frame.isSyncFrame && previousWasSyncFrame) { + // pulseProcessorAllClear(&angles); + // } + // // Now we are receiving items + // else if(!frame.isSyncFrame) { + // STATS_CNT_RATE_EVENT(&frameRate); - previousWasSyncFrame = frame.isSyncFrame; + // deckHealthCheck(&lighthouseCoreState, &frame, now_ms); + // lighthouseUpdateSystemType(); + // if (pulseProcessorProcessPulse) { + // processFrame(&lighthouseCoreState, &angles, &frame); + // } + // } - updateSystemStatus(now_ms); - } + // previousWasSyncFrame = frame.isSyncFrame; - uartSynchronized = false; - } + // updateSystemStatus(now_ms); + // } + + // uartSynchronized = false; + // } } void lighthouseCoreSetCalibrationData(const uint8_t baseStation, const lighthouseCalibration_t* calibration) { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/log.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/log.c index f56da9236..96b44bbb2 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/log.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/log.c @@ -977,17 +977,18 @@ logVarId_t logGetVarId(char* group, char* name) logVarId_t varId = invalidVarId; char * currgroup = ""; - for(i=0; i<logsLen; i++) - { - if (logs[i].type & LOG_GROUP) { - if (logs[i].type & LOG_START) { - currgroup = logs[i].name; - } - } else if ((!strcmp(group, currgroup)) && (!strcmp(name, logs[i].name))) { - varId = (logVarId_t)i; - return varId; - } - } + //COMMENTED FIRMWARE + // for(i=0; i<logsLen; i++) + // { + // if (logs[i].type & LOG_GROUP) { + // if (logs[i].type & LOG_START) { + // currgroup = logs[i].name; + // } + // } else if ((!strcmp(group, currgroup)) && (!strcmp(name, logs[i].name))) { + // varId = (logVarId_t)i; + // return varId; + // } + // } return invalidVarId; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/outlierFilter.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/outlierFilter.c index a6fab9f94..c3d453ea9 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/outlierFilter.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/outlierFilter.c @@ -71,33 +71,34 @@ bool outlierFilterValidateTdoaSimple(const tdoaMeasurement_t* tdoa) { bool outlierFilterValidateTdoaSteps(const tdoaMeasurement_t* tdoa, const float error, const vector_t* jacobian, const point_t* estPos) { bool sampleIsGood = false; - if (isDistanceDiffSmallerThanDistanceBetweenAnchors(tdoa)) { - float errorBaseDistance = sqrtf(powf(jacobian->x, 2) + powf(jacobian->y, 2) + powf(jacobian->z, 2)); - errorDistance = fabsf(error / errorBaseDistance); - - int filterIndex = updateBuckets(errorDistance); - - if (filterIndex > previousFilterIndex) { - filterCloseDelayCounter = FILTER_CLOSE_DELAY_COUNT; - } else if (filterIndex < previousFilterIndex) { - if (filterCloseDelayCounter > 0) { - filterCloseDelayCounter--; - filterIndex = previousFilterIndex; - } - } - previousFilterIndex = filterIndex; - - if (filterIndex == FILTER_NONE) { - // Lost tracking, open up to let the kalman filter converge - acceptanceLevel = 100.0; - sampleIsGood = true; - } else { - acceptanceLevel = filterLevels[filterIndex].acceptanceLevel; - if (errorDistance < acceptanceLevel) { - sampleIsGood = true; - } - } - } + //COMMENTED FIRMWARE + // if (isDistanceDiffSmallerThanDistanceBetweenAnchors(tdoa)) { + // float errorBaseDistance = sqrtf(powf(jacobian->x, 2) + powf(jacobian->y, 2) + powf(jacobian->z, 2)); + // errorDistance = fabsf(error / errorBaseDistance); + + // int filterIndex = updateBuckets(errorDistance); + + // if (filterIndex > previousFilterIndex) { + // filterCloseDelayCounter = FILTER_CLOSE_DELAY_COUNT; + // } else if (filterIndex < previousFilterIndex) { + // if (filterCloseDelayCounter > 0) { + // filterCloseDelayCounter--; + // filterIndex = previousFilterIndex; + // } + // } + // previousFilterIndex = filterIndex; + + // if (filterIndex == FILTER_NONE) { + // // Lost tracking, open up to let the kalman filter converge + // acceptanceLevel = 100.0; + // sampleIsGood = true; + // } else { + // acceptanceLevel = filterLevels[filterIndex].acceptanceLevel; + // if (errorDistance < acceptanceLevel) { + // sampleIsGood = true; + // } + // } + // } return sampleIsGood; } @@ -119,28 +120,30 @@ void outlierFilterReset(OutlierFilterLhState_t* this, const uint32_t now) { bool outlierFilterValidateLighthouseSweep(OutlierFilterLhState_t* this, const float distanceToBs, const float angleError, const uint32_t now) { // float error = distanceToBs * tan(angleError); // We use an approximattion - float error = distanceToBs * angleError; - - bool isGoodSample = (fabsf(error) < lhMaxError); - if (isGoodSample) { - this->openingWindow += lhGoodSampleWindowChange; - if (this->openingWindow > lhMaxWindowTime) { - this->openingWindow = lhMaxWindowTime; - } - } else { - this->openingWindow += lhBadSampleWindowChange; - if (this->openingWindow < lhMinWindowTime) { - this->openingWindow = lhMinWindowTime; - } - } + //COMMENTED FIRMWARE + // float error = distanceToBs * angleError; + + // bool isGoodSample = (fabsf(error) < lhMaxError); + // if (isGoodSample) { + // this->openingWindow += lhGoodSampleWindowChange; + // if (this->openingWindow > lhMaxWindowTime) { + // this->openingWindow = lhMaxWindowTime; + // } + // } else { + // this->openingWindow += lhBadSampleWindowChange; + // if (this->openingWindow < lhMinWindowTime) { + // this->openingWindow = lhMinWindowTime; + // } + // } bool result = true; - bool isFilterClosed = (now < this->openingTime); - if (isFilterClosed) { - result = isGoodSample; - } + //COMMENTED FIRMWARE + // bool isFilterClosed = (now < this->openingTime); + // if (isFilterClosed) { + // result = isGoodSample; + // } - this->openingTime = now + this->openingWindow; + // this->openingTime = now + this->openingWindow; return result; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/param.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/param.c index 35f375fb3..49189bcb4 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/param.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/param.c @@ -413,8 +413,9 @@ static char paramWriteByNameProcess(char* group, char* name, int type, void *val } else //Ptr points a variable { - if (!strcmp(params[ptr].name, name) && !strcmp(pgroup, group)) - break; + //COMMENTED FIRMWARE + // if (!strcmp(params[ptr].name, name) && !strcmp(pgroup, group)) + // break; } } @@ -564,12 +565,12 @@ paramVarId_t paramGetVarId(char* group, char* name) } else { id += 1; } - - if ((!strcmp(group, currgroup)) && (!strcmp(name, params[ptr].name))) { - varId.ptr = ptr; - varId.id = id - 1; - return varId; - } + //COMMENTED FIRMWARE + // if ((!strcmp(group, currgroup)) && (!strcmp(name, params[ptr].name))) { + // varId.ptr = ptr; + // varId.id = id - 1; + // return varId; + // } } return invalidVarId; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_indi.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_indi.c index 20fdd50cd..989c224c7 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_indi.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_indi.c @@ -26,7 +26,8 @@ #include "position_controller_indi.h" -#include "math3d.h" +//#include "math3d.h" +#include "empty_math.h" // Position controller gains float K_xi_x = 1.0f; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_pid.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_pid.c index 5cdff4472..2fa55dd5c 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_pid.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_controller_pid.c @@ -24,7 +24,8 @@ * position_estimator_pid.c: PID-based implementation of the position controller */ -#include <math.h> +//#include <math.h> +#include "empty_math.h" #include "num.h" #include "commander.h" diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_estimator_altitude.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_estimator_altitude.c index 461aa7681..79d716199 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_estimator_altitude.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/position_estimator_altitude.c @@ -74,7 +74,8 @@ static void positionEstimateInternal(state_t* estimate, const baro_t* baro, cons static float prev_estimatedZ = 0; static bool surfaceFollowingMode = false; - const uint32_t MAX_SAMPLE_AGE = M2T(50); + //COMMENTED FIRMWARE + const uint32_t MAX_SAMPLE_AGE = 50;//M2T(50); uint32_t now = xTaskGetTickCount(); bool isSampleUseful = ((now - tofMeasurement->timestamp) <= MAX_SAMPLE_AGE); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj.c index d24dc2f93..26cd702e6 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj.c @@ -256,12 +256,13 @@ float poly4d_max_accel_approx(struct poly4d const *p) float step = p->duration / (steps - 1); float t = 0; float amax = 0; - for (int i = 0; i < steps; ++i) { - struct vec ddx = polyval_xyz(acc, t); - float ddx_minkowski = vnorm1(ddx); - if (ddx_minkowski > amax) amax = ddx_minkowski; - t += step; - } + //COMMENTED FIRMWARE + // for (int i = 0; i < steps; ++i) { + // struct vec ddx = polyval_xyz(acc, t); + // float ddx_minkowski = vnorm1(ddx); + // if (ddx_minkowski > amax) amax = ddx_minkowski; + // t += step; + // } return amax; } @@ -293,38 +294,39 @@ struct traj_eval poly4d_eval(struct poly4d const *p, float t) { // flat variables struct traj_eval out; - out.pos = polyval_xyz(p, t); - out.yaw = polyval_yaw(p, t); - - // 1st derivative - struct poly4d* deriv = &poly4d_tmp; - *deriv = *p; - polyder4d(deriv); - out.vel = polyval_xyz(deriv, t); - float dyaw = polyval_yaw(deriv, t); - - // 2nd derivative - polyder4d(deriv); - out.acc = polyval_xyz(deriv, t); - - // 3rd derivative - polyder4d(deriv); - struct vec jerk = polyval_xyz(deriv, t); - - struct vec thrust = vadd(out.acc, mkvec(0, 0, GRAV)); - // float thrust_mag = mass * vmag(thrust); - - struct vec z_body = vnormalize(thrust); - struct vec x_world = mkvec(cosf(out.yaw), sinf(out.yaw), 0); - struct vec y_body = vnormalize(vcross(z_body, x_world)); - struct vec x_body = vcross(y_body, z_body); - - struct vec jerk_orth_zbody = vorthunit(jerk, z_body); - struct vec h_w = vscl(1.0f / vmag(thrust), jerk_orth_zbody); - - out.omega.x = -vdot(h_w, y_body); - out.omega.y = vdot(h_w, x_body); - out.omega.z = z_body.z * dyaw; + //COMMENTED FIRMWARE + // out.pos = polyval_xyz(p, t); + // out.yaw = polyval_yaw(p, t); + + // // 1st derivative + // struct poly4d* deriv = &poly4d_tmp; + // *deriv = *p; + // polyder4d(deriv); + // out.vel = polyval_xyz(deriv, t); + // float dyaw = polyval_yaw(deriv, t); + + // // 2nd derivative + // polyder4d(deriv); + // out.acc = polyval_xyz(deriv, t); + + // // 3rd derivative + // polyder4d(deriv); + // struct vec jerk = polyval_xyz(deriv, t); + + // struct vec thrust = vadd(out.acc, mkvec(0, 0, GRAV)); + // // float thrust_mag = mass * vmag(thrust); + + // struct vec z_body = vnormalize(thrust); + // struct vec x_world = mkvec(cosf(out.yaw), sinf(out.yaw), 0); + // struct vec y_body = vnormalize(vcross(z_body, x_world)); + // struct vec x_body = vcross(y_body, z_body); + + // struct vec jerk_orth_zbody = vorthunit(jerk, z_body); + // struct vec h_w = vscl(1.0f / vmag(thrust), jerk_orth_zbody); + + // out.omega.x = -vdot(h_w, y_body); + // out.omega.y = vdot(h_w, x_body); + // out.omega.z = z_body.z * dyaw; return out; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj_compressed.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj_compressed.c index 899d8d5e4..20510fdca 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj_compressed.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/pptraj_compressed.c @@ -242,48 +242,50 @@ void piecewise_compressed_load(struct piecewise_traj_compressed *traj, const voi static void piecewise_compressed_rewind(struct piecewise_traj_compressed *traj) { - struct traj_eval stopped; - compressed_piece_coordinate value; - compressed_piece_ptr ptr; - - /* Parse header that stores the start coordinates */ - bzero(&stopped, sizeof(stopped)); - ptr = traj->data; - ptr = next_coordinate(ptr, &value); stopped.pos.x = value / STORED_DISTANCE_SCALE; - ptr = next_coordinate(ptr, &value); stopped.pos.y = value / STORED_DISTANCE_SCALE; - ptr = next_coordinate(ptr, &value); stopped.pos.z = value / STORED_DISTANCE_SCALE; - ptr = next_coordinate(ptr, &value); stopped.yaw = value / STORED_ANGLE_SCALE; - traj->current_piece.t_begin_relative = 0; - traj->current_piece.data = ptr; - - piecewise_compressed_update_current_poly4d(traj, &stopped); + //COMMENTED FIRMWARE + // struct traj_eval stopped; + // compressed_piece_coordinate value; + // compressed_piece_ptr ptr; + + // /* Parse header that stores the start coordinates */ + // bzero(&stopped, sizeof(stopped)); + // ptr = traj->data; + // ptr = next_coordinate(ptr, &value); stopped.pos.x = value / STORED_DISTANCE_SCALE; + // ptr = next_coordinate(ptr, &value); stopped.pos.y = value / STORED_DISTANCE_SCALE; + // ptr = next_coordinate(ptr, &value); stopped.pos.z = value / STORED_DISTANCE_SCALE; + // ptr = next_coordinate(ptr, &value); stopped.yaw = value / STORED_ANGLE_SCALE; + // traj->current_piece.t_begin_relative = 0; + // traj->current_piece.data = ptr; + + // piecewise_compressed_update_current_poly4d(traj, &stopped); } static void piecewise_compressed_update_current_poly4d( struct piecewise_traj_compressed *traj, const struct traj_eval *prev_end) { - struct poly4d* poly4d = &traj->current_piece.poly4d; - compressed_piece_ptr ptr; - struct compressed_piece_parsed_header header; - - /* First, clear everything in the poly4d */ - bzero(poly4d, sizeof(*poly4d)); - - /* Parse the header of the current piece, extract the storage types and the duration */ - ptr = traj->current_piece.data; - parse_header_of_current_piece(&header, ptr); - poly4d->duration = header.duration_in_msec / STORED_DURATION_SCALE; - - /* Process the body */ - ptr = header.body; - ptr = calculate_polynomial_coefficients( - poly4d->p[0], ptr, header.x_type, prev_end->pos.x, poly4d->duration, STORED_DISTANCE_SCALE); - ptr = calculate_polynomial_coefficients( - poly4d->p[1], ptr, header.y_type, prev_end->pos.y, poly4d->duration, STORED_DISTANCE_SCALE); - ptr = calculate_polynomial_coefficients( - poly4d->p[2], ptr, header.z_type, prev_end->pos.z, poly4d->duration, STORED_DISTANCE_SCALE); - calculate_polynomial_coefficients( - poly4d->p[3], ptr, header.yaw_type, prev_end->yaw, poly4d->duration, STORED_ANGLE_SCALE); + //COMMENTED FIRMWARE + // struct poly4d* poly4d = &traj->current_piece.poly4d; + // compressed_piece_ptr ptr; + // struct compressed_piece_parsed_header header; + + // /* First, clear everything in the poly4d */ + // bzero(poly4d, sizeof(*poly4d)); + + // /* Parse the header of the current piece, extract the storage types and the duration */ + // ptr = traj->current_piece.data; + // parse_header_of_current_piece(&header, ptr); + // poly4d->duration = header.duration_in_msec / STORED_DURATION_SCALE; + + // /* Process the body */ + // ptr = header.body; + // ptr = calculate_polynomial_coefficients( + // poly4d->p[0], ptr, header.x_type, prev_end->pos.x, poly4d->duration, STORED_DISTANCE_SCALE); + // ptr = calculate_polynomial_coefficients( + // poly4d->p[1], ptr, header.y_type, prev_end->pos.y, poly4d->duration, STORED_DISTANCE_SCALE); + // ptr = calculate_polynomial_coefficients( + // poly4d->p[2], ptr, header.z_type, prev_end->pos.z, poly4d->duration, STORED_DISTANCE_SCALE); + // calculate_polynomial_coefficients( + // poly4d->p[3], ptr, header.yaw_type, prev_end->yaw, poly4d->duration, STORED_ANGLE_SCALE); } static void piecewise_compressed_advance_playhead(struct piecewise_traj_compressed *traj) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sensfusion6.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sensfusion6.c index 633e4c9d1..8bfc796bd 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sensfusion6.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sensfusion6.c @@ -262,16 +262,17 @@ void sensfusion6GetQuaternion(float* q_x, float* q_y, float* q_z, float* q_w) void sensfusion6GetEulerRPY(float* roll, float* pitch, float* yaw) { - float gx = gravX; - float gy = gravY; - float gz = gravZ; + // float gx = gravX; + // float gy = gravY; + // float gz = gravZ; - if (gx>1) gx=1; - if (gx<-1) gx=-1; + // if (gx>1) gx=1; + // if (gx<-1) gx=-1; - *yaw = atan2f(2*(qw*qz + qx*qy), qw*qw + qx*qx - qy*qy - qz*qz) * 180 / M_PI_F; - *pitch = asinf(gx) * 180 / M_PI_F; //Pitch seems to be inverted - *roll = atan2f(gy, gz) * 180 / M_PI_F; + // *yaw = atan2f(2*(qw*qz + qx*qy), qw*qw + qx*qx - qy*qy - qz*qz) * 180 / M_PI_F; + // *pitch = asinf(gx) * 180 / M_PI_F; //Pitch seems to be inverted + // *roll = atan2f(gy, gz) * 180 / M_PI_F; + //COMMENTED FIRMWARE } float sensfusion6GetAccZWithoutGravity(const float ax, const float ay, const float az) diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sound_cf2.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sound_cf2.c index 5fb238491..597588eaf 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sound_cf2.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/sound_cf2.c @@ -276,19 +276,20 @@ static int tilt_freq; static int tilt_ratio; static void tilt(uint32_t counter, uint32_t * mi, Melody * melody) { - pitchid = logGetVarId("stabilizer", "pitch"); - rollid = logGetVarId("stabilizer", "roll"); + //COMMENTED FIRMWARE + // pitchid = logGetVarId("stabilizer", "pitch"); + // rollid = logGetVarId("stabilizer", "roll"); - pitch = logGetInt(pitchid); - roll = logGetInt(rollid); - tilt_freq = 0; - tilt_ratio = 127; + // pitch = logGetInt(pitchid); + // roll = logGetInt(rollid); + // tilt_freq = 0; + // tilt_ratio = 127; - if (abs(pitch) > 5) { - tilt_freq = 3000 - 50 * pitch; - } + // if (abs(pitch) > 5) { + // tilt_freq = 3000 - 50 * pitch; + // } - buzzerOn(tilt_freq); + // buzzerOn(tilt_freq); } typedef struct { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/stabilizer.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/stabilizer.c index 158edb2cb..d3ed129de 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/stabilizer.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/stabilizer.c @@ -175,7 +175,8 @@ void stabilizerInit(StateEstimatorType estimator) estimatorType = getStateEstimator(); controllerType = getControllerType(); - STATIC_MEM_TASK_CREATE(stabilizerTask, stabilizerTask, STABILIZER_TASK_NAME, NULL, STABILIZER_TASK_PRI); + //COMMENTED FIRMWARE + //STATIC_MEM_TASK_CREATE(stabilizerTask, stabilizerTask, STABILIZER_TASK_NAME, NULL, STABILIZER_TASK_PRI); isInit = true; } @@ -225,7 +226,8 @@ static void stabilizerTask(void* param) // Wait for sensors to be calibrated lastWakeTime = xTaskGetTickCount(); while(!sensorsAreCalibrated()) { - vTaskDelayUntil(&lastWakeTime, F2T(RATE_MAIN_LOOP)); + //COMMENTED FIRMWARE + //vTaskDelayUntil(&lastWakeTime, F2T(RATE_MAIN_LOOP)); } // Initialize tick to something else then 0 tick = 1; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/system.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/system.c index 6531dc825..e273155b0 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/system.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/modules/src/system.c @@ -104,8 +104,9 @@ void systemInit(void) if(isInit) return; - canStartMutex = xSemaphoreCreateMutexStatic(&canStartMutexBuffer); - xSemaphoreTake(canStartMutex, portMAX_DELAY); + //COMMENTED FIRMWARE + // canStartMutex = xSemaphoreCreateMutexStatic(&canStartMutexBuffer); + // xSemaphoreTake(canStartMutex, portMAX_DELAY); usblinkInit(); sysLoadInit(); diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/Makefile b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/Makefile index 92cbb4ff5..c9a808960 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/Makefile +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/Makefile @@ -107,7 +107,7 @@ OBJS += build/platform.o OBJS += build/platform_utils.o build/platform_$(PLATFORM).o #build/platform_$(CPU).o # Drivers -PRO += build/exti.o build/nvic.o build/motors.o +OBJS += build/exti.o build/nvic.o build/motors.o OBJS += build/led.o build/mpu6500.o build/i2c_drv.o build/i2cdev.o build/ws2812_cf2.o build/lps25h.o OBJS += build/ak8963.o build/eeprom.o build/maxsonar.o build/piezo.o OBJS += build/uart_syslink.o build/swd.o build/uart1.o build/uart2.o build/watchdog.o @@ -248,6 +248,8 @@ endif # Libs #OBJS += libarm_math.a +OBJS += build/ff.o build/ffsystem.o build//ffunicode.o +OBJS += build/fatfs_sd.o build/pm_stm32f4.o BUILDDIR =./build @@ -344,6 +346,9 @@ build/%.o : ../lib/vl53l1/core/src/%.c build/%.o : ../utils/src/%.c $(CROSS)gcc $(CFLAGS) -c -o $@ $< +build/%.o : ../lib/FatFS/%.c + $(CROSS)gcc $(CFLAGS) -c -o $@ $< + diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/activeMarkerDeck.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/activeMarkerDeck.o index d4ace454eaec7eb40fc3a525cacf43c0640a66db..1802f3b085328cd93a776a8c0387eea5015086f0 100644 GIT binary patch literal 5744 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 HcQF1R=-V1a literal 7360 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/aideck.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/aideck.o index ff893923351f447170dde49533864db9a1273c0a..16aec57e1a8e76fe1f4c17c7729328873ab21abd 100644 GIT binary patch delta 327 zcmew$cR+4}2IGN=npTXLCg!BD$SW{k-FRjT6JyEbM&{#;&o_Ir$TKn)O%7xgXY2rz z)4=3BFu58`o&u9sz~qC;nrwBGSF`mpF)&OvV>jZ|V1NMO$%X9VnwE?V46;xW5M={p zO9RE_ki<PEZ)8`V9K+7T7z1R9GiFQ{<Pf*bfvOM%s%Ak_U4X-s8YFRr$*COfjEa-j za+FVA!@;xJfHQ)LQ-K|#;=$&L+~$mo43kgt)H8Za_T;T+OqhHUNFJE%$=42KU*t3A Y)L?@s{ybTb-<(r{3&LA4`5~h`002HezyJUM delta 395 zcmX>g_d#xg2IGf`npT`a3=9lY7-}3QPfSVKcwqw*W6k77=Hra7H+!<kGcsmR4rCQ) zECZ80U~(3iTm&Z9gUNGX@&=fEGFgzVj@j2JWO5%{-(&@L15X{G`5++8$iN^2VS-5m zC|ejPE{h~?0cBeP#pRI1T_(?DSGH9^5{ZDa(M?W45=T~FF!>?7xM2xYRupJH3zQ9_ zDxhqTY4S+oEt3m5#3ws&*f1(huH`6aRNnlRBbkZQf*qpf$L2(Cb4Esk$uoKC87n4B q^42p>m^>3mewZxD*A5g}$Y;*!zy?wLeey#fFMtceTQK<{qdWkc5<*x2 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/collision_avoidance.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/collision_avoidance.o index a566ddd75eb3b4a7f0d77ff9ac4c02a64c3d386e..3a299ee8411e64bc8bec07efde6d88af79097880 100644 GIT binary patch literal 4632 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 YA%fTfuK$OOO7V^ScO3doRa-FrFRuvPHvj+t literal 4104 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/controller_indi.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/controller_indi.o index 45007e75af7d080d7eea64703c972389d7abaf65..904ef29c1e2075314f86453dafbd4ab999a1adbf 100644 GIT binary patch delta 1337 zcmZ{kO=uHQ5Xbjzs%fw(+cxR$CQX`X(%tOA4=6;TgjOo_P$7kQ5y9<EY7Xs9P>cnI z9C8Ru4;~7}Tj@y&f(ONV_aK5r@Z!OXJyqzzgMx3~o0Z4PTiBVmzyHiI^Y-n2Y&~7; z`z5Dp{JR##YS9=s(#ApJ_Tg+P@p;%~dz0l6ih0NVq`?e}o|nmgg6)jWeh6#8MAmlm zOh$$j5mh)Z)N7<}lKShkT(nSScZGc@><%n(@=UDX3j0;q1U%0k4j)XnSy7}$9Zm7d z395=N1I)2I^F**KS5c$>k>?e@qQuWAyh-aEk1r@ZRQRmIGdzx8R}E|{+5#kw6pU<) z`^4j8T!eMUzO<mpY7)mW%2=MR5VO`dHCbKa@!on0SGTgSsk0+`8<1MyUd=kzR6D^e z_qU>|`!fP-uI*Z;90cb&8x6(%GOFp8s=^<~hMqeHm-&6m9b-L=fk&>xUgL@#z&5uf zSjyRMg&M@k&nb21VJl~M+N56LYDH1or{n{^Gj+np8osOH--yTe{k!Bh|2q_`^mW7! zOQ_+y8vX*_=k3lLjru{uPl)47s4CkLeY42t6mBKuL;N5tNDki2M0J&7FxOLZLxuap z>xCp^6}VBn!0i*X!&k-oqv<;oB@+2RX9}90lj={)LKbX!b#pHX`(DF59)%<60>5G2 zI|Ccs4f3$h-O4x|ac7kws5MOAf{j`u)ukWF7kF8#r^1Y^8Nkn4-5gXP2<H9*?45ba delta 1868 zcmZ{kO>7%Q6vy9s-DDkHNa8r_ZIaRM+K$&mCT*#RD^-!5=FlRLLYhNS57-GpJz!K! zPNd4FC5KA%U~7U@4u~KjH9<Y3<Wi6V2vsPDR0<!0OAmnqih4jLQKUu?g*W3ddNO#V znfLbh{_nln*|BfEvN=)l{LOy&cjTm(gQwvr6#u$5?pRCZgPAXv5m#_lwf5)OfezK* zUcNp)S-4$xA;p}^-1sNI-!8+c{Mw_zU}+#{Gd-JM+fM1F^BDJV?q1NAcXjxz3+8?R z!)22=_ad;rcUJSOcFbl@%w=18TjtkGum+yZp0#Y2%i9c_E@)U#`2K8L+Mj(Y?Z!Oj z7!HeP2Ux;$nVWUllox07-T)iH>BJIj1ZUE7Sg|{lnL>Z6&B(}Fm<xu@K6c?xf3`b4 z7nqE`zt9O)f7VO~u%M1fTGqirq9_)_39&d9jk6$btk4<FjG#Z+(v^AVI#de)6A;X; z{djn2?q0|*??rO^+o`jqM}woKgPHG^zR_R%`R=);&d@mx`{VeUcSKC<K6;&?!I+|> zG6wLAh-!bx^$5?S(nf_)E-GbEDW8|o7gcmcMW3|P!mo;`c15o5N#%#A=zyI=L*<8+ z{ZwkcmFt#Rj~D@fc7C_Dix<1T3QiZ_dSjJEOPUtu)o$~AyUL4VJze?2%qzbK`7y#b zoA5E-5i_+3e$6!fX|;QiYmwY}!g~q7L3khG6~&LC6<4P|>SrgoU598V@J(^FKm-Fp ze$+Dg87myRT*DCIj@858w8Gj|e!?=f3jaQ4@`4r9R>bp(^}0@E%SyFngK&C8o3hGJ zyl9!pEv4zhT&g*)9>k7x{=hPQ8a+dzwBxAa;-gSLrnorRIN9NR6aB(}^}bBIMG}-N z`3m8*@kSHAML4bVgm791g0=q8c-;z0)yQ90T%2Emyzw;AD_2JEsE5<2PZIqd^+SsK z7@#}7Uk^0!hfTQMTB|Cr7-^7Dyz!IWY~bqs0Tvqq^;!>`@W+JH7x<fSdJ<vv&(N?T zA5N)&xJ3Q+u4uD_rwAWYyzy#Z{r?7VlhpA@okhuUx1w=+^@E;PO-u5RdIxcRAlB7` z-WemXWbk*BFNC(uTIv=4MRF*xZSbAsaNu|wKiMx$8O^;g{~XQ5KE8wI#xwk6YB;d& w@^Wf8bh)FJeu-DxBYY#32(2sfnD3{CLieJz_#i*+4TUbMb9h^-U-H8L0JDAEjQ{`u diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/controller_mellinger.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/controller_mellinger.o index 9b587cebd896dbef3aa99f2487fe2d2c0b535ff6..7cddb54cef65b19595c6fab9d87ddaab90c01b1e 100644 GIT binary patch delta 1188 zcmZ9K&rcIU6vy8z)fCdCEiIJN+Lltu28r7yfCNjaN(w|cNH9TTvNUZ&%MU4SwX_F; zgah#c%}b024>bM*5-$WV;)z5^XrdlWOwf~_us4Di-?UpXyUBjPGvCjfx4W}*GJ1A> zOBBvbh0YG$`#SlH(^dDG--Sn>F+K+vxdW^3h5*jVZ-!ucb{JrF5Q48lu)8sQba)sz zIvg9|4zN840Kw{fjB?6;!iY`!=6^d`-+kHINti($Xvq0h^Ik0KE!F`_IMr3y1-*?W zy#<f;TBBJ-CXpE|)`!YEyNXVu&tPG*IBJlr8KtI6Rg=R4by!zuw~9W;eWF_m^{eO$ zEK~m?)*CmipDHyPFsN$2;*Qa>@<X95D*8*w)o)%_a+j+9kCJ;-xrXtb(}1YT_0_x) zyb7potpk@DE!bl6vJM<I4YM9Bm?U3_${VRs?W%3JtmG~Q)P7qQ%O;C)Q=!2c#e(_j z%3M@lT!_tt<x~<9aw`0ICMGY)d6-L7Ez8FfBo}Zw2Xk4O>jc*tsH`E0@)gPdR`AM1 zr9N8GB-e#-Iz1Ur8K0yxFe5*W#S@YF*f@n4YI076BazsA9#V2HoFz>rGLblWYH@xZ zA`8(<%)JWu=pV|&Q@m$h4lgItax|7sq+-$P=Pc*2r}-IvY<|GJc)#^76S3GTF%OnV zUC3+_v!l-@q06qtxJ_hcEKp{^eNr8kNxj%+m(bwS;*?!veYj>nWqw?`BGI@=+KnYr zFEWS3y3j`|Vwlu}1&4%N4lN!yL^gzFngywg=oIOh_niDGYosl>L#o5?q<%EIB&Nk% zq<~ALW-O9wu;e-wh5$db^)|dzj><Hk;O-UH0sGy7`eWrE2XW1PLpTQ9a|eVz0nf?K zblBe>5O(V@Pj;ZkJ+e2K@Vq_HWVl>ic%mE~-rS4ho@=Jx4OQ~`;@F{4--O$q7GcAL Hd!CNJc6a@d literal 9440 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 Mg1=vslePW70n><>+yDRo diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtp_commander_high_level.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtp_commander_high_level.o index 47a7737d61d83d401a4be63be346a2174f7f9030..0c0ecc4c24696122926c45b8721e02676bb29c22 100644 GIT binary patch literal 10760 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 literal 13512 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtp_commander_rpyt.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtp_commander_rpyt.o index 2cbfddea5dab0ff82be38877acf1eabbb183f0d0..ccde21281f36d5cd462b7480e0f8ebdfca8fdcb1 100644 GIT binary patch delta 1060 zcmZ8hO-NKx6#m}4(RnkCKPWjfX3zIDP$Z$i!4zrk2yUW9%($pFy=NsvQK>CTqo*R~ zBFN#kC<vrQq|(APf(H(a{j6%CLV*#aLQ%9a40O<OI(Hn!x^TXG?m6E*fA{ec2Up65 ztF7z%u)A1BWAK8EP81~MbDzpJ`J<3jPkbyTBeoiq##UvF|B<C}qCa461Z7}YLvN%{ zWw!=Ah#5dbSV2(4kjQS)*+Cqm5pf3Apt(?o#7JcE>*(c94V7w(AT`34P^Dh%hK*yo z3cs!zXT=4?`YYIUj=~z?WDR{z7JurX0JBx<l3YG%<sxalcCDL@Na}t~Z6+~2o?1;p zu$k`mDlE>N%!VtrRbr)j-i(U2LO_Sp&$>-FT1{e6_M}d%Co<}Es;13@xK#?<yhB2M zUCH=@VNq#5*;Mk^AZhl)UP`BZ7F9h*yJ&fa_MK6P(S+C1bq2K^dR$<2EZ-d|1spYr zt#nYd{))(%pdQ$5rHKENa5J4L#>}T=D(szv??fV|tLLdO!^>==0`cA))RjBY5q6-} z*yxLBKc98}C`Jl2Qt?g-(^O-F4>~HXVwP%iNVSYwF$Q6;M#Ez}V`2A4BN{4HG1LJX zoK9JmWlYKxg~l?kAu%r=sx8+wcA<!>^(eJQGm`LEs>TV#_r?On7n#3PwGt^il0%;Y zF!jyxUe*<%(wZPCB1U261YF5*fLT75>yv(Ea77?L;(9J$>uTqpT}{WkE?sR$I2vt< zv;v2+R}WAge^wXU;jCUvc6yE7)x=H3C!G`+IJJl4++_f#d5kzie1`C?z`$nKyZ^sv zW&F3|<1327tKEeGL-b0k<UiIu!IEAIJo+We5%rdA(=)iT#~#>YzrkO)eN&5W=8$f4 z-COTocWrwga?@L%Gc6`Y6DsBt-fHOsU+{*cSsus>NsON%9OjP*{d^%W<i45hafs{r T^=@S2tZ|c0h1vgsL8tP+k)#Il delta 1095 zcmZ8hT}V@57=F(=bN?Eqxj#GmF;E0SaKknPzm2-6ZelZ#yy&<>=%T`(i%jS&p+X4S z`nr%VQXyy)FHD0t;9y8WA%T;S?pzXKP*AAZsIlJfY?ILo=Q-bb|DNZ4zp)?9nd9*` zIb(uDBkGBO8B9=^SV<KGNbE+q)UE*Y`vZJxU*P5s9FWJf$2k-DngHT1h=pH@Wc-y8 z5*Z%+V>RHF1E6qfjQEKjypWj*=eCj~F}_6%VSXvzDn@UCtiVaP2v)Z!U4*m?ATj45 zE4-fgK|}mGElGz2@bc@e;<n&ilC_YRS9QOm0Tf~Nh;Do&t+B(!fzOS#IU`BCG(?#- zf|m)CjzU`YfFj)kWj7K`?GJ=f2M&@iOuSBJgiD)^AjiU6sQN>(Xdy_nZ71VAzRAO6 zI0POMh+AZ&+X5`PA+{kvtLTEv#%CmwwE7M<NmQ##T|pu#1bJd@5i2CpSx7U|3YmNh zl()#U%0mL{@*xzuDkGT(l@1zFsU4f$28AVr^cWPtr>?6GClE2-4*BRLC~vSyW##M& z_VPt<h9~}+r$>fA-Jh`oaP6>H^Z`5wlkcUqb10l$n-qZb6RcPJ8bJvU+96#{I{CM# z3X<xOPz0qyn#3ZujZGAnsUwQy!HH44Qv<_69{Qv|cfzi(&qsEgw2ANPagsum=Q;?E z#`aOUfa>J~#+al7?2Nw_s671gdwxwYO!MeNTccU6h5Mr7Hx+-X_>18q-2#1~3v>-# zyLx>HF5eg(f>Cw~Mk1%feXP8h0h$BbTS`Y2Ptbb3h4a#&-eMzVe*@-ds&Y=zVayq$ zbBK#7?y!8WpJownGPFHove8(rP&%r(KskfOwqA}hc577>2hm$DG?qs^_FrvJ+0UwM zRaNJ!{CLZU7O(O<mhT$Q@!T}cnz{|0`clp!tv7eqd}L|3wFWAg+qfM%W$s0MhuBXI owY^-9o<Z!SQ?<Q@czF-AG+T>(bfrE8T3^>~kjj4<5`H=V0p}$r2><{9 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtp_localization_service.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtp_localization_service.o index ad22cf9e6e73c1d4e86cda8d690d983190a6204a..a03ebd7e6f00533fc3ca159d6f1349aea03052b7 100644 GIT binary patch delta 2036 zcmb7EO-x)>6u$TI(*c6aAG~?<(|O}xM#T9sSf-H<GquH%Hk49~t=3GZEn}Nd3QQZv z6aywTA%+E$LyRF^6jwBHLBpao!DJd;uy8SpstxIay6G&sK;4iisrSBjUOjoPyvaM~ zzVCeJJLmqqSIJfnEku=SsNDHghSjsSN?q=kuwM7GeE#qIa-~7fE3E7dGI!0xb{!dg zZ^W71-{)nMa|#<NiWqD)bSLIG8~O8O_IAya+1<VV!-_1*8CziDi7-|czI^Vr*<s-q zpFDe}LbNfpcBZk5x5Z-d%U3R38yhXgi&N+05OD@O1>%{P@SC1LGG)OM34CeemFL z?s$K0I6L_6;gh+6!Q4>xouh|G*1p*DQa!J%-ER3y`N+*Un>BJ7bD-}RT}WJZB8P<^ zMf{e5{)?YLeAR}(50fvb{8PhzY1o^F{m!r(hJ9$*C(?!##jJa_!4x`%daVL?!lc8~ z5VdBZw~@Pw+#iuU^qlb_GG-giP*8L!$2DYl*CNggZ##dbSYX9V;{{f@oG%q%+ZBQ9 zu20~cO9Pktcyqp39G$w_pT9H)1$QURyN_uvqf$Wl*G*BwcEKHwI?#<#kMQ**nnJwY zh95#aBzzs=pMn!Yt%OlotBXXZ3H}DbD~Q{xZ^+)XDn{)+Jb=d@HTgHuj1kR}*fBZ& z(*rDfRlWgPuR8M+a-=d&jhrgUjT?w*b_kvzxQ<&OYb6Ojhq!%RizW`gdR^ML$g%I_ zD)4qyTPMnNbyY~Vs{<GDsO&p)6>-^*`Hh)Pl?We&jleXNh1xxmMNe&=;Plis2>vEn z^#k}_bpDXk!l}V|1d$F^+agig$y3=$YYM*)<Lu!34)qmUcMPNUU7dhC9qP<9$?Yax z-5^==7%Lc?L)^Lp7QRSy-a@W)>qLjHt777Cx5LFB$xd3M_zlZG9q^f|&d7g~b#D?F zm36IumDKOH;TFFaak(cwl8ECB!Rg(bN1W`Ei7ddfs=oJ>r0ut~gm>;SU+h<^7japh z^5+rv3p@#}zJT8;W^(9;WsHk=xj-L>gT9!ebC?n?%HbPdERsO7wF4IU6ejC%-=~5@ zi}Ec<YH?nJys+C)7Ip{jYjK5f_(O{+4h}E+W3a6`z~{@r*M1*N_~hKFJ=d}|bQT`_ z<Gci}KpYYx??@mD3z`>h1cHXnN??cIgympQ^NI&k8{xO$K5@KSs86(VI@H%(!}T8! z>j~{sqD`<FN-HZG`1hujTTSqRa2NfsBwVQ(HifGNz#mTY3Y-r2DMx~^6izEcEwC9* cH?6jqbtWL9ryMTx<#WjEJxVGBOZuz-0EMs(y8r+H delta 1649 zcmZ`&O-NKx6u$SV(^Dj!Kks{Q#_>%=jiWVANKGK)3>YZ{Wg4`Lp+zADqXk6?%_3?R zEoS;8TnK4xOj`J}anWL`O-tQWixvt68f~l=LP_2G-ZgF$-NiZQec$={?zy~`zDl+f z(=y?5{LvFyXJ6AuIS?kkoG*KP!%uefj2-C>kkPgKk1ayT1Z+=tV3v^KZ$sH<8~)7B z&h6K;m6{80ao3Yts(4~_DWlu9w6K(G{Gp+*DL^kG+r;Q~$KG@7Q^zhk_LXB-9s5pL z^D8C9M<}uD_&|P6xsL2OIR?tj%<RzIoV?88iky>i*prgAJuVvN9mUBBcFFc;DQ@`6 z81uCu>Obwt4h@|+JB(ZYINgtzeuj#_EBDbYAt7FSP{zW2k+GlSH46S+!D|(KTgE}2 zui~{B46p%1Dr>D`QxX@`V@kIk1#egI0-^zC7A0G)t%UUeyE7qKp+r^wLg^V-dZzdm z#ra2rf~y*e5*O2D=+r-OKX4=HO_r3}4u^HkvVwOi_!_c7M*FcEWah9GU46SNpe<}5 zFWKr%j!RtJLcLu{;??gGL#~CH-SVkK)nP?X3gs4dr$@44mTcqX+*GR6R~uLGzc!}e z31!NJ#Klcz=&+OS2QIaE%_${E)i5m-4m_7^wZd(QSHI~`1y>bzVu3N*g;9fHk~N-7 zDk}Trzqk9|1<CbGTx?c6>n=VlaWVUd%oT3jnNbik=oHo&YbWx*6`6;W%ub2_*$Wm7 zKYGkY^MO)vRH>Lp(q!!){=;_eaZ|0`Iam*!#D-}g6V~y@YKCDMbOl=$L%(I9Wa*eS zo6X$;whSn**Lhq(*-Bu=sg2PRuS+~^4WK&|rqdV<C9oFKQ4Gbjd4k2zVR{BLCPO}~ zd#gKLhBus`dBOj8nvPMPV`GNfF068!0c}n2uF2M4v<Jz^v4)b*l~}C9SmbEU_#T46 zy+KqWF<QiCq_@5(SMUj25q`-wTg&ShX-jK{fjRCrbbRLSy@9x$)++TF;qJVJIXg{t qY}&orvW0jwtxYyyB$}?@Zg2<2un<k@&F;rlY(<Z0vmwOy9rz6j$<?U< diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtpservice.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/crtpservice.o index 9da089ea35df32248f3823fc3f38b06cba29927b..ff3d3d66f7facbba26f69c7a37d1d2f45fa8a889 100644 GIT binary patch delta 804 zcmYjOJ8Tm{5S=+YBIn%td^TZih1ett$b5wOg@6S3M3p8@atah6K*mKx6WdX^2#TYl zh{Tzp0Eq%Rj3^wSNQFR3LzN(<NrmY^G`65Zgk#rUTQ|kNeecc8&hBm<dV0{$pSfy6 zKkUxV1_lP~-uqDBjX<r5-t4bAtfv6{ss^>~h&Nkn>`g-yDjtH9i$b{>NxjA(aF#SU zFT7*Y`}8kxZeF%mJb+2*i`Gwm1_74{_id8+NATKr_nnLRK{V-$&S^`JG7V6;-FQgP z^js#}Ap<?Jk6FUlUCh!-?1or(Vvq16jSX?!kZWdB<RwKfU*%s@_*J^++RAMy)ldk< z%F<%BR9RjqmW~%;!tDrim1XBv^$twjrW3|0eKxLW05r-@v;C@WL<~Jl*BPf(W@M&A zs=RYA9D2a`$wftFP1toqdb(F4(4%jR<8vBgJo7^7!=g4C%6UWOIKS8kxh&+qSNoKx z+7r^(L%K#YaXue*H<T;S68G)Lw%W=0NBSy2?=9sia<*~h{RTQ^j*rUL2_+p+h-#oT zmCd6AG9ynf%}w@K`5h1+mLflqjy2RTHId#X&T1Es)^OirD~~oEwhFo}n#q`?vNeS+ u)vW?f(+{hl`Efduyo5e2Bnx_Lu$#6{Yso47)lioqwFPU%yR1a*MD9N?!h{I` delta 902 zcmZuu&ubG=5T3W27B|`5Y<|>jtlCgi0xC2jjR7&+deMWIHV45#Q)9%UV6utY#De() z1RJIY5fKU=Oz@ECDWZqoA}F?Ep$88scu=SZsU8%X_}=Cvtl&G$%=dls&CIe753e0r z3f<E*=s&}%3{XIZ-MeopyCRfZq%^%VLn=OirJMleyc5d5E(w*r6mN*7X=+&>4T>9E zqOZz&8BPuwQNaPGAwYcA0oj)5uda%vk6Z0d{FVSw*0V}yQGT+@K#Q7L{@)NnP01;v z&}w&1vL0A8kma3DM`w%6%?1C|d_HB)71P19G#0Mjm`?+|JWY=6!JssVPb4pKV_nj* zBsq=)5NiMT4N)lA_@`WU<6G$t^-elxX<TtWATN-(bkeZmdn>N982C&bUOJ)1oe7?| znd)qFRU`Pwbx^wkhZZ1Z<})+q?f6{oIyPPR<;%sic@uJZGnFaejC>Jm^0*S@V|?`H z0sJoOxGl?pQ=A>4Ed3Atmq3rAhm#x+F;8CuxW;Sd8n*En%qsf%MVo4$xoqS2*<6op z{D_TzjdgnEuqxwoMGm~<3cFvib*<sLq6a?NRCa0as!b%S9%ym3_Z>a;3x-ww#80lW zuQ|YLmNbglV;dbbk68%7Pq3(t4X`yKTv2^iHI5DSs8t#GP5mJ3C-}-e;SBOqLjwMB zPmlzLwHQfaR*OkVKK=qWv<Ru;52}<f?1>5I+-Q2vkS5kWF)1W<*M7y{o`|H$U8G{v O8<C#5yC{uOZS*ft-=s|d diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_analog.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_analog.o index 6d50f893dbeb54baf37ce7cdd3f6dfd36210bc21..91cc548217ed6fadf42e9c7d258886d14a4e47a7 100644 GIT binary patch delta 225 zcmdnNy@G3k2Ga|siCSth3=9oH2bklp$ty5l1z}|N#+njFM-B!EPz6##42%p4P(BNk zHie2Cpox1y#T_OmGMVrv<|XFjrw65`r52^;C8th4!KA?o(%>;!k$F2~!Q`9F=A09l zAVx?`mSiz!+%P$i#U4mb1d|t8>^TJ(A@T~7C0Wfm4WO!HCPxB!E1*29$&oDb0B30_ A<p2Nx delta 340 zcmZ3%wS#+t22%y|L@l+64J;ZA3N4ou7*>4x%giv5fq`Ml-|B-a4lu`GlUHEADlfxO z^gw*R6i{4bV@?SpuMCg{0;)hPFj<gMSk?x}5@KLvFaQYy0S|;?@Bz|b6^fBS7D$By zRE7mg=Rw5-CMz<T7(2Q+$GfMNIOpe;r4|)u=I4ba=9H!~B<3aN<fjLvrll68<|PC9 z#l@*bCGiD`MTxnSQ<yXi6`-a`Gcqu6LfIh70?L*GigP20M@*i`w4JeGvL~}S=LaT; zgvaDgW^={^lMgc614%{}5b4Nb^^3jzU?J6X&*3!thSCZ7cIESMp3R+CRM%L4#M CS3!>e diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_drivers.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_drivers.o index ae25d4fe7cfbf40430df08c0f3293189d21c012e..30c0c881b5b4540bfe4ce3566fc9b446bba9e401 100644 GIT binary patch delta 420 zcmeAW>foH95zxWJ00$0WmIDI^13Qq_5Ojb!{+hf3^HmUTVEAFiP*XdZfx+P?NE|4C z30WS-pWMN?kCAEeK{nCJE=(em3z#G(J20_Lj$;xE5(XM7#J~u)1VnH^S;{~fBrX8u zOF(HusJH=?4^!^}6?b5mJd0V8KP5Fe+odS8EValvzcjC8vNDU!<W4r}$t&678Koz4 zvdc4iOipAHoovU>C8-G13UUB5)JPcB0d%nVWC13Y$$Qv&B-Me!Aj|Nn5|9O%19KYO z94I4tG9#1lWE&0@(HBq=4yeD`fPD7Jr5xIvAD|+!V6}TVR5*R1abXG(Vdnt=BdkKa literal 2312 zcmb_dO>7fa5dPM?;YTeMKP@1E#2PtKNSjschJ!h+?Zmmb5VZ>eaj-YuMOitv>3Tsy zs+6eep{h7IDhF-|i33Lt2<VMtC2mz)_1G%CSG^@tg_&8uN7gUiTPNC`dEcA)<{Q5k zdt<Ry&1f2=X?Tgfl|+G`5A4Nu9NIXHL&yOA3b19vE;fMqhGGBoTCe|}#paik);D19 zmVly0-ZQY9h4Ci)U**R?b#2Bq5a*sV_21+}z56-hJ5PMuI%dvmnBOGM4WI>V{_+Fh zWNF_t>|OlP+~HoVVUqfhhTTc(RVKely~@Cwa@;F3^DXuIXD~P=^)3+q#918A((@#P zd5?NL0=_<yfkX3cWvJHy>Y)Q4KSHMUg$C#K`pQn(z?M$68<=R71_MVoIM!N!y&X8L zg*6U6`ctHd=dY3`i1|VDgEak3vo%Q5HffTxvwvT|RH<Atr<X2YHJxsEt-0z39rIQ< zG^17DEY02yySIWhio)h<5c$pMPUxFOt1w%b%NMPD!JKx(_AEtn7cMYv<xSqn&lN7l zhnM=|vp4YXU|fPe_GSP&{f#r7m{dC&1KefQPQ=Uo`6mh25<Iff6u7LA{!@V;BF`p0 z$2un1jo9b3I-ZzoLG03<#!%}>I&P%kbUDZ7e?vI)FAJK6@N|!3{Fzuk5dN{im&Ks( z^?QD^RrkW+t{?WSCUWb@c?dc|WL+#4iV!<Bzav9%#X?+A>E7u?s4vy7luNbxm1^~? zMW^nR%C*Hh>U(MRUgU<9H-dC;$3#nhG~|j`)u7`Im*soc0&h9+_Q99kwl8L4cY@}T zXT)n6f1==W-jfP`mW#-k=fhzbzfBR-7YvRh@SKQMp6NvXM~QrSKB`Vf<fuBYr|?H9 z`QHg#)qh{$s{Vcozq}`$pVTk!k*fcBik?>~{J*B;pQe6ns(w@8s{Wk7_kI3}{G@(Z zy?gD*T_GQZL%%Ac&|h<{$X}0Od2ZywTIuy*HM{M$PuKeYF_UOmTH<FeCbr`@a9!vY z%YFarXJ~`(v@H{aZ-|RNO+P$r%+FNvo}XrrY>FPn)o;>=N?*=pQ{m4DW6retqg<3Q z*<V6=3Yc?F0>aDwHx*p=PkJ%pNal`6cqaTo+WmkY*<a3om@rj46Fn8+3tl8l_La~v R3dYrcFAnsQOcY+Ne+OBj@P7aR diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_memory.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_memory.o index 0afaa076b2ddd3bd7c09c5f11478090a4a40899b..7cfb235b728e034da496ff631cf8fa7f07740d15 100644 GIT binary patch delta 541 zcmXv|KWGzS9DUz?m!x->LK|A|xU^{s3MPY;Q@M2U&OcigO+^F;uc=6-Vv#H^n#3L= z6tUqKq`25Z1{DV-F4-bF2rjjQgNuoqqbXFQL;Wrnzv2CU@A2O6dk^*Yp^c-g@+Lzp zRUgI4<|s~-qPUPorBF&CVT;+8Fuxb4ugokzQgLx>kJYx0qwh~4aj=HZ9WH18aMT*B zXaT7I<#;K{l|n~oOvD4NvFf(Gvu@v)G499Zh2)sqzY@XQMj0(nbNhhvrOS~m3cmxl zcW&aDS)6fSI4JiXAZdLV^Gyf$F7>J~t>Eyi`24UCt4LYbm)!Y)9{@i?ZQ8mj_Wz#y z;%F69R=~djw*${&2{m~FxuD!4y_05gYb(ixpmzI=y}l%B8l2}(zt62-hLJBz#>$=D zP4hc9vO%IG8Tnt5p>0aKMsqwZ#rLVekFlrCDu2w_a~h9)noNMf<H9apJRG=7wTMpX z=q-8@-DN&iV>+u3ura`$0eaMp=|`>&vy%)^hWTJD4|P-MiRSc(#@J2DD7LZ@4PEEy zhGMf<w5>P-y8>U+tm;Ue7!}o1Y=^d0N12mD^GEuj+RE=p$cQqUO`bYJ%Ub#$$gYX^ delta 606 zcmYjMKWGzC82^3mUH)9sl;#?m^b&IyaflrpQswMoF0orcZ0ewsMi-$VsaK?fm_}O= zTF~%{6cyTvi%t!7P;j_WaZ<2gr^MOCh)8g#?|LcthVRes&-Z=L9ebF3oTm@%lY+8| zVVs#9#%U*r852uYCkxGz*=3k=Vq%~4Ml6a;TfeBaHHrSg1AKm(f!5_{b+|sUZJ`ff z{V&IBrYu!E5+`Z*uxsb-{&WcO<soHOAF=!U0lazHz&kr?OHXmnfZeM}Z7#8?8))>( zhW+XU(uL+oQ}*|ICiDU_xS){)Ok@kwH|!}1Xa~SgA3Np=w5x;OTYemwLRn&)z<f#i z?#l&~z}b?6mUmQ1d}PMOnmnz{<hd4FImJ5%>&?0JtoH@CY^~-L#EDboGN|&xvil`B zx7uK-xy3IVy2DbHKP(mf&QlW`EE)B@!sI4f`z^}+6g}CU=Z}cq3JQD@%YnrB9jVYj zsB>A!H{>U*h;Cp-aTadh64!%!bXUxTlC*XhpL=n9hxy7h0r7#!OFs_Tqj95>RsUlb zL_3s>Ee@9Hk{#Xs8j6x!&<$Iv8}zj|MNYNYdoJ31Ow`r<QMse$$raz!BFl$`9yv!H faV1hzZN;~B#CF6|&B2goqAR<4*ypOErW*eM7x0hc diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_spi3.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/deck_spi3.o index 6cef5099a5e88d6f18fad4cb8483cbfa6cc418e0..f285bfd6d8f32f42e0f7303547139a3f3de51337 100644 GIT binary patch delta 182 zcmcb?{ef$O2BX15O?M7PhK5ND3=Nky&ZuBy<e4nUq%11Lz{udh00AOUI%jesQ_18v zOv<VjP!TCc1_o{@8$<;liSthOWnRq~GWjR7Ip+Z;h=jppOBQp+DU%CX?1AJ)F!_<i fp7R4#U%+HbR&!1VsOq}Ol|bGHD9>tgC5t=&vu7ZK delta 280 zcmeysb%T3?2IGv0n(i8ZtM{$^%giv5k)dJIXKsd{!Zr*-3=9pI7#J9)JYW{q`poU{ z^KbQ`6&oum7#VdYe`Hi<6qxu?ShfJDK!|~nApuB(fCz+QXa>?i1tOCjnPP;T^YhX& z(@Tp|!!t`Vf(uepQzp+~(y(LjfGU<|WMJTivO!b?lr04m=Rpz&Sq1_ialXk<nN~BF zOrFSW&MCkQ5%-vUk=dMa%fye;lT}z$AdD0cV{#{pJ*NOr7YJlbzQ|(ES-}M1O`R;r PYR(w}HNk4KAd5TzdAvMl diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/eprintf.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/eprintf.o index 24a9c03ad96d39fcce2611de37ecdb5e63db38af..ec0193939c4e549c940a0154190ee4856dc6f8e4 100644 GIT binary patch delta 344 zcmdlX*TFGCLxO{e0S+9%EC&V-26l$Y7nlq<7#JFY4lu`GoBV=f9V64^jXa{0r*Mi) zKENq4c>*Wf<aL}vntVV#LJW*>GgP1~5vaHUl+Q8wBbO*|L4J8^5kqQ0QD$CA+T?s5 zS^kpLiV_CBl*E!m2EC->;>jy`0+<-2C;#M;XR=_JEX6A)sR%RyWIi+0Bp6izbdUJt z1WuO8Yj}Ai)q%o5_u^G0APX`F<|4Q`P)79RKu+PwIeaRjH=rUgnhnTjpS+Y$n{xxy VqcUK%Z}?O=&p<^?!6HDH004_(IP3rb literal 3896 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 bQntlU&9BBNz{5)V{p$a@E)A&enfm_$?~B>u diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/estimator.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/estimator.o index bb2534a8bf8ba11fea5662c1c8fad00e890d6dcc..c5fc42bcb53129b940d5193fd1308dddeacd92ec 100644 GIT binary patch literal 10384 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 M!Q4(`aAyAh0BnLD00000 literal 14528 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 G_5TA=rcw?7 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/estimator_kalman.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/estimator_kalman.o index 918557966a7be006a2dc372b37d901723bc6d3c9..d789768199fa22aca14ce4b1ed35eff56d7ddb1f 100644 GIT binary patch literal 7520 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 literal 18520 zcmeHPe{3Arah|)QWa>u?Mxte!7S2mrs%ckZDMk%MwW;>_OO!=P40*O>J1KcQuEeX3 zcjVq)M9D71C`PNMC@RJdEWk$0q)H*FDIlaqt3$(<Nex4Pw1rT#u7Vf^X*vnhw1r(+ zjp$fWXLe`qM$6lv0s2>aPuQFHzW2SEdGluXcK052x~sQ4914My5c~y{T7m)`=_u7r zw`xKyY=k?{{ne#A5ttr^ss0d5{eywW&2_N65#SusUK$F+@(jT15yZoI5Qp$w7^a6B zVVdgU=gk*aBYzbhXq(2JdlOLSL0JA8$_6|-QNOEW|5QKryW`MS|InFm+s$?6@}1|t zeQ_=__!f-?Fx#m9uo3yEJI~F!{-ND3-W&*B`XB<AZ*7F-`;qr&<ikO8nS4lmH9S2Z zsl9w=t>>TkOa0>WOxRo&oUoe%u}il$lI_2_h&pP?UKsVZqkngv`|C^QOw}~S2D$x% zQ?NW(9V!f-MOlY(Gag2$K(_IqIpdgbT?8{sb8~fh{{N}#zw7(wBh$B@4PV-X{I}5e zx7x$gKTbw2-TtG<^z!klOFzl2y0rA@>al<QmHWn6?@JWV`PYE#oO>M1JJeo-lG+Q0 zVR`;pJUSxN^T)uAgUf%#<1g&RzCne*426XOuTAT<8ILnKzl8`qz7^+a&Q(o+KMBhh z)=%{(@d*F6yH+m^UHx+Z)FT&dT7znMG&&XWVm@bgx0&nVSIJil?B$=Jp7~eI!rd34 z@Gv}heBUoXeEwy#U_@ZQH=o96onb`(01%ICy1b135dI?ia6j5V_0_8BmocX(ZnT!v zSG5^zGYs*CMYFJ{7AEF4L%ezu#P?KV{UL~7s>S+xn3$<YPUL~hr1w^&>Tw#Yb%cI; zH$MNOiGCq>t$AuHLi`6GC%((wOL+pALz^x)?lKGQRq(OKU7mjrqYokUf&6TsoXx}v z-?CS?(Hz@D5Qh)FIECTCb@NGcc{md)xVi=?PF}2NEX7aqbrEe3pIJ5S<*ny~<fhKq zdGrhYn+^?`g$DE~Gz6%7>Wg{};Dft6-8mfQIXvr)Aq=^6zEO^rU8Cxo7?;<~0{JKF zlxU0<*5NuYtcIOK(O6*y<yJ^W6RlO#iTc=V6+9B9b9Wi@@{zOV_IX_Imd&TPpI#d( zG|V+dkA`Ejr_aE066@`Foc;nVpRNxTYSuPIe^A{NJsk}dPB$XAIu(5r+ewt|cr?^m z(Ig)2cr=*9(N*<ZqDhns--X$Bl;8US%r360-@aJ4CHe*)i$8+dcNbxn=C+8rw}3e_ z^qq#^q&0l!n7N#6UDZZ?6hm4MqsA-%#?YvNf*Bi%(wwQE@_!!JqXE}1_wB0b1@HV} ze50EmlmlP+A;v1=wcnvJgB)+Q&YgGfJ`k&hoqMWaVgdR7oO}ZN_ZTo?RzZ9X=HQ+! zFfnx>$|jgdEZvPSKJc0C@7^?LhcJf2t7Ef?wRqqfK+_}9_NJ}T@H)(crY+G3o`aMR zL*WqihYG{1L$k?mz;a@3Xm<FwLWLHxQwI}3x;Mkb=f1bnmq(Ga7^%PfPUIns-M#0I zfqnViU2TGYX%)CRR*$$~a-Q8^2CJd*pD2yL74gQeMZ7r24LHY5I6urO%DKQfZU|vN z&T$jY@iNY_9_RQ>sPN;T-hE)WeHC86?)CkB#KpJ&Q1u^S9oPGw?-#mWHehZvR`qW; z&YQF07hpTAhgtdlk^Y97$n=>i_q(MQb-?~u?}6As0Ncu0PFK!JjU}8^HUq~K>9Irx zplcxRQFa@LWBmvB9o)Oy*zfik<F+-DN)p?!6OLu1vnPzEt?B$@Yf-NnH{eijHt!hO zqsDMHpBc$*GhBO4Dszm;SSIp`k$t)D^ht!MZD)t`IVV1nO;D@YK4E)J$T`{ZL2(i> zRG&^+_EGMJ^yuLfy6^E+XDZX3P8}O{gqI`djt~#!(=4B1*>}Xl`<`a`j3+x=Sngoi z3ZG5bs0B!(7FVJcSE3eAQU~_;Q3p!Y;>jH>TTxCBNRmL31d{x?CvE4+@ey>@YhhfR zK3oQp-Kk6>O|ZFe>V-W|uKE4%eDL=49^qAFB?6TQR3cD`KqUf|2vj0ai9jU+l?YTK zP>Db#0+k3<B2bAyB?6TQR3h;IB?3#4|Jh7`Uf$;d)Z+X1vgN+ADB#Z><x2(k;_`nr z4tvWlJN&%(RDhnK{KVhU%a*CKC_s>&rT~6*03O5-!h`&Qy&WC9ji$W^pETmxY&tob zNM($pS=(?%EhDyl+|C|NrLkrwM^lcKbn>=kv^BSGZ*AGp*1V(DXiC^)+p*U2*kgn@ z?=YxmM@uX13iug?&g&|8|86--r0fnBfC&C8S0bpXT!{egNbwc-$Gb8({V)h+?AE*J zeXt8RhESQ?;K@&*2qS-pFHp4kMM?x#W`$=r2w&-c43&k{yd)3$8J9L~JfSj-2l3Cl zEdc4KU$zLJVVvEC9OD-mkF)$8#&M8a)-(Pk#%p}|*BIZ-xXh%$xZ%V9p7AEe#n10E z-oiNUO>xUdjQ29m0@h%K=5@e_*D`+4hesLjV_fF-7~?}e{Ns$L8JBsHQ;{;?GT!>G zyt;O}dP=yg*C6B4zQA@o{Sp;wdBxMe5+8N-l<+3zpJH6vBEP_RAM*sKW(4?0W$q*4 z*<FdBclDI;89qN~Oay;G_ZLskO8k#qJte$H4UE7qs+L#v^sL1H+|^UUC9X6o0yQi2 zyovk`lH}Mc{C`1wB^%&B1Mn)GcR9WhfVUz}cEz5|{0YWq*wZx2X9DzO0`NTRk@HmI z`FjEUR|D`r3Bdm{0ROuHd@%t3uK@hR0K672{pI4kH30u)0NxjXI|2A)0RFoH_#Xz~ zmjm#t0r(pM_&*2WKMcVCJpg|{0I$XiUAZ_n2H?2QsVx7~0r>L)_-g_9)d2jv0r-aj z_(uGGE;p~10DK?fbe_J)U)ge=eui=R3Xt!q=NUKnQtw@-0A2~u50<xQC~Na>oaQ8K z8G$X6kj)L8%rO{G<c{MupycuP{L!P9&AW>T1v{T{d#$m=_-NL)0C%?}4&)tclDWk; zq;mT*DF+-J#ygd=w!66q63JvNnaq#n(+MYQ!?BZgR=4l%?!YZbj-TU!xf7N(e#qNO z)SXH@7VD?|O#}IH%l>RCm$f^x8FbINch8dAu*6l|t3;0U;@F%+E^_Te!p`6>r}lI< zc|4vPvsOfk;=z+oVnjMIAW+(D<$8)SJWBh0Ql~6w=iPll(i$90XOBtvfm_9WP=kZx z2|F=X>@O~&x3!BLa6>)$sl1i9_F5UsP9-~Ri#8tJgAG`j5ttm1#q%ic>e0fak}yfS zJeZL(w&D~ZAI^4)s^f{{7K~YA$?=nZs_QDx&0Dp8+ResU)`1~(8M%`=#~M4FNIB?< z?Rc*3wVZe=dE8t6!M(kQ+GD+ghq}85y5fWJSbJ~RAl$q7uBv$JfYKft8R@gLNh_B- zm`&xZl6#%j1jSELz0F&PQ_g5SdsN}><}F-IhDy1%FXv`BjYwtM-OY1wpfwK3Y$lgY zTYY&4A9ZZ7#_d$b(HgrZF?+oXaW#Ou;yB%>6863kuQgyf`|woA6*IfI1JB!8N1>zb zWw^@^2GD4{^?)xLPhkqW+tKa~l9%aTP)n*xlkdysQfiwa*(r5CojB2D+jtt68#zE{ zXe@IqZRJ#dzq?zoq@pvGa}t@Pg!5kgXuNz!Y#2j|SDqfr-62>q?^hr1JQP#bOLn_) z4`kVnpXrdR&X@k>P6=GRF7Ik<jo>6odA8r(kg2=-v$(8y2Ie|4PCuTtz1d?uiOfhE zuNz*eW4RIU2l1<>Smb-)A;fv>q1$ILgPuP$e<$O_=PimZvWxNieSA~#Wh_B*e@FgA znM0zN>w?SkYoEgLtEpJx3ddWp;&UzS!K6a|X#GPjTEa#Dh{CmgN8wukB;ynZ{mS4R z;}Yi?ZokBG6URsJtBebuoA6Dp_~ZEo<78K2PS8Ipyp8K5mK3hn>)#mnuWvQ#rBaVl z^X0zW?<YOCQt|s~GERQ}nn!Uz>A8}MtgqL?d{BDydc_$he|}xaD4hU3lL30@xsM9@ z^GUDje!i;k-%$7r<K$=QX%XO}53lAiUuT@+srgqFpYlrhulx9dU-j|pSpVNLPX22@ zuPc6|^8bdy$*#eD?=tS!v!wWX6Y&QD{M(98`j4>wj})%28~D=6E&e>A=S?c)kLlLD zkDZMB^Ha`O;_LkHRC;uLMim}Y`ll4$uJ9Ka_xnlDn^eedhgWq!Zz#M|;qwaD{3?8Y zp+b7PysG=To^i6<sBlB^yA{4o@pYVg6koqXKBD+~y@nWXL%Tgn|A^AFPvN6VkG4zC zp;Y|qa#rC_cog^ZRfX&8%mt-i$AO+Vsrd8Zn@W$)hieMo?G1H5uPgl&2RZL<_;5Mz z-d1|(kHMt8t8n?wqP``C>pZ0AQ!4(vs$rbs7V{|X=Nk$?pzwKxA5{2~(y!z8k;1v^ zjiSk8A-jjXs{2`|aQV)qjx7rRl;ZDHIKAVQVlqzirK-UlJ&gPFtyk&M`Ic7rfG9_K zTj6pKK;5<c+)ML%Qt`Jb{3(T-3O}syxWeVyM%`(JyMOq>W3DUQ{X-DO-&XjujFDJU z_@@;v&+YO(JHve+FyDXwAkXvu@6#%No~QUnm4127_w%;|@LL$C?_YgiAu8!lc!#8c zQqCvBbsjb`$Iow3IPrxix##E0T8Mt(X}gpfa{d}hKjH6jTkMb?Ixpls{VpFLu%C+Q ze&V}(Y*ReXaa-&YPWt8kN&88Bx&IsGal)7Ts&R!A|2(&+6z<N8{W+^};=jsm87KM; z=Fj-}(!Qc_(%;1Vs|qLm7r1>*;lyuY{&j^D|01{N6;AwJ%wJMC@xRXP+X^SX$$VJ{ ziNE+Q@ss)XFu#ta@Wr0YPxyVzlX(bV^oo7qA7Q@O5x&ez`h`Ele38PJ_PFws<~z#m zNrh8<&T?C%=$G;5eEciio>4gI7rhr1PWo?f`>Mi;KgI1ig%cmb^Z{^P;lvmJM4!yJ ziTO)DzWDu~!b$(@q?`(mllh)!UbVuBFZo)haPmjyZz!Dj@_f~zaN<i`<UUjUpTj;X zJwCp~xliGZ$m?_2cx_ZT>6bXleJSZDzLZHH{~FJCO5wzB;sNIrPWmMd)!Z*}yT)z9 zhu`3~=p#N|54W-1T|WLixBdF-7&lmoUEyi{6#s4Pw_pER9&ai=`uZ$!75(R#cf`k+ z-&aQ!?yfJl#}!Wc<#*R9h3j}ibMEArlNd(n*q$7fnr)>M&F&lGW_o!I&BM7IG}~Ef z5Pe7Uu3|HpbFh(2j(Hp!>C#XKa;S;#ahttYQ3@!&$@MtyyS*YSnH?Lm@V(yuMlnzc zEj{0E6jhpB+sXF>(orK7mJgw%c$(Z6G0uPA+Q$#aAHxo^Bl#iu^Gl5LZL|yr$7feM zI8CJq+ptDD{o^Nj{J3v`*cS!lCQ<aeFzS=>*8|22Y$BKH8}QJjXN}kL$4l&sq<eiD z@Av-*kH1~3wU**1DBXLO8{bDK9hON?6hFnT0Cdk>ZvE!?CC)h}()!U@887RXLadzq zYixgp&wEx=953w=tdz6g$1i_s=%mC#_9>P8_D>;J&i-fvc3|o8MDbI`3y{Z3Ir~E~ zk1@nVvcDb=887q4|0ATV{VQx=;>T)=<E4ETE9LCZvHka$NcL&hfZzTrh=uTI!9y3b z(QD~v5JHGcMN8ijx&1RdzK-*d@_Pp!e*4tz&s|b*^_S@r;2XStUaMqR+BC0n<FB-P Mj0-|!DSiw5-v9tf_W%F@ diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/eventtrigger.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/eventtrigger.o index e4144b488bf46d96fbcc228e56ca1c1df6e48c70..1f4e3cffa29c26a6d827f39dad58a60cfba12bbd 100644 GIT binary patch delta 255 zcmeAW_`y3tgJ}oLM6EI&28M=92bklp$ty5l-E717g;9%x0Rm<MDIo?%h5{&G0!lA~ ziceseT*SP5vI2|w<Or4mFPJi6Mg|5Js8SGB0%gmgiBEuvqpP0+G?sN6(*lOcT5M)q z3z#9wZZJ&FVl!iWF!>^*^yEEkDnQmpHu1?n*ff|PFicirx8rmGnhydqCTFsnbKYQr T@D5L23FK8k9b`3mC7V0|0H-TW delta 518 zcmeyt+aWMPgXsk8M6I&=ztwwJ{$*yE`1m=~ro}U7e)=5DxKfybVL}p<!_TkLOe>3l zbO?j+=_&u5Cr_zko;{z5p|F>UA>=DF!>TE441o!Y7$!2ZHUv#!S~#1Dfk9*eBSXkT zX3<p%Kz-ksg;y~!Fia^1s;OrZd9CpOzv%;Ju~nag9anyhc3Szj`mpSZ1I+Q)#26Yb zfdoO4PzkX3#x-9UIp+Y40D+m44VlE1764g742%pQ1OgHeieW8~28k;$PCmu7oUOQ| zC^@%aasji&<mJqTj3tv7GK))AK-F3T_3}d5AgW<9Ba3+b0jP*HP?jIc22)U*gn={* zk~j-gTn<fK0f%}OsJJMadIr7X%G{E~$@MHVnG6^wOR<`91wiewV4NJqYQ|K+IN6a= zZ1M_L4Z#AaAsjG=Ouon}KKTc$1W1t(n;qu`sDcfXBiYP38<-*LPEDQ(<aMw@cvh2V HvdRMhr4w<} diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/exti.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/exti.o new file mode 100644 index 0000000000000000000000000000000000000000..3516a2e18f3561e995313540a1c816fdbb97360e GIT binary patch literal 2552 zcmeH}&ubG=5XUEtzlsXAq6msUrD%(0*-abm_Ow!Jjfm7zq0~dVO|~R9zu2r0MKEVC z_Tb5r2mb)UgC2{2fr5JWKT!Vxb!I!$>`v2@9(`eV=KGoV=DmGyvdPoA+c$<X8IYEN zchFZt0p1_%`(EsNFbs#t+suIH`T&LV&|Ac@?pC(+^_<Cmp^M^xabaR5{$Ka^iuUAR z><7%x&d!+e`8)T_Qma)jSN&SkthYiFRReQ9*A83jwK{rXxmt^Ya`Z3^jBDj{dE0R< zCvV36u#rR0o|qtRIff#RoiD@(Kk!C1vk!j$9u&+DtSEpieg?HHX3{OLv;lbzW5-OQ zztrw%oM3kz!dciKN0YY`C`J?cPjT=pbHn-w+e^%C)-uyHb5HRi^999Mn6E0n!Mv^b z6Xrd|pEJiVTij$luTfpV=X$k`cXsM6^EZlrV7{gJC*~g&|HhmwHJSH2`ZVv4nD+TE z=Cak&|0o_D^&jB_6n=)eQT#G<Tk#p@p5nKdFDSmkd{yxW%-f1TX5Lf$8S_oWA?QXm zs|;gZsCA0XS_EU2n8iK?mx4|NbIVIbyHs4fd(&@L>OmL-M}xculNwBE;Fby+Ifat5 zYc9Jq>(}dRetCnZPRV>aI+>PJX<10it7&;HEvM7cO-o#7Y8{TFv|5;>R_3Us;iK>5 z<HBTf9M4T^j*$2#6(8aLnj7Xi&)6RQ!RkC}ME)AuDBQMH@xq|)TM^a<SQS6=!CLEd zz$&*Iji4EEzP~jF6HuuhP>DR&FSw2+EYB_aG&;0Lo&d4@KcUN-@>8nq_cwsNS1&Tx zzW|@ryqqS^AwJnFcu~&1#_Kd%J2;k@jaRbC{P&X(eHov$L#hu+o1x7MqwN^ROFus` gy>>*f%0EpnWg>#ul!Rl*2959X{?Ejt`ZqoP4*}{|2LJ#7 literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/fatfs_sd.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/fatfs_sd.o new file mode 100644 index 0000000000000000000000000000000000000000..94a84779ec66e7628af426b2383a01447d1b6ec3 GIT binary patch literal 1248 zcmbtU%}(1u5FTSxK&nK`3DHU{2nixJR%{80^nij=$^{_=?WH}q8^=*r*m1kwh?EPw z2|4r~dhJWlGq2DmfLSx^SSz2(NcK1L&EI-vlk3Cdk8_R#MjZGJGt005_j5D7Q>YzS zgarV0(Ej6wf7h9Nrytu60e;*s+^(4z+h%ZcW_&u|!Fn5SVZ~uiQ5TN7-S=$g=;Sl| zlx0aY<YL4InPh4hvxDY$nGHmOnv8}*#gQ7zn6<s28MOSi=Lc+u%e0AFtI^QB=QHi` zTfy$^d+IbjgL(M(Q0H@NCj{U^Wk{7o7d^JTEQq>E>pJsxI4mQxQt7)$5u3!nBHQpj z@r?MVegON#w=Djc_zv-=&KKfOi8p;<z||lR^S&3s)&$N!gnf};gkmI=;EA}3ODb1f zjq}o!G4GegrNpI`mdGNNl$H`{EOEaPfS3PF74IP``GiBGsd%Em>vP4y>*YCkQI@9h zNYQbh4R5f5-qH)JQitqs7GKVX_zgszZ{L6^`E9Uo#5M-#UHotUJIvKJ&Aw4BWJ>sz z(17V*#oAj<0eggcKKO4?oK@Fa)i0DKeC)GpevgVK+Ng->YpB<#)aC!8eEVl?=RX42 C;e59M literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ff.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ff.o new file mode 100644 index 0000000000000000000000000000000000000000..10a0c4f1d4604ba816e0db6a6857c86071fc2c10 GIT binary patch literal 30784 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 literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ffsystem.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ffsystem.o new file mode 100644 index 0000000000000000000000000000000000000000..5d56696b4edb40e6680db1076b1bda4b8caf52f9 GIT binary patch literal 888 zcmbVKy-ve05WX}O6p4imiN#E`60wp<3`Gn<6?8#NFfpaUQ6e=Ba*WhYyaJEFTku>w z0o<jw8aZaErSo_9-F-g)ecV0V4?GXd@ZcMEkzoPW9WrU@1V(TOFrUq?*?9i=%%19c znH6cdVtFl@Dg?U?-ejGZOY~$`luBgkT?#hkaS(^mlt(cer?Lvr3nvredBi9ah4Iy{ zx67mL4B_Y3mGhk^0PtbpDo5V`hadL&Ja0CQ5*5z?c(bWgx<FKNi-qx&SS#SKsY-z_ zng)1QSCv?){(}24XDFjPII!f26`Qd0d@Xg3GjaCGlQ!F*Z2bk6jL`PgU!s=Q4AHtH z(ZNfXMBnu9qU$xkwC+<Q-47Y<mB#57;0V#)JEcP1;8@ogFnvvYf{sgnqYLftYwQ02 D?ol`x literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ffunicode.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ffunicode.o new file mode 100644 index 0000000000000000000000000000000000000000..380e51bbc37405693a0b4adbd6f8f37b92754766 GIT binary patch literal 2936 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 literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/flowdeck_v1v2.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/flowdeck_v1v2.o index 6012d21e811d8d93803f5d6f8eefe107f06e9adc..7338442313cba619b4d3eb392a2cc97f7e628eac 100644 GIT binary patch delta 1895 zcmZ9NPfT285Wweq`@r3H7g(3&EzklnZ32bTU9j!a!}=Ck{@Ar(TGO6<OS)@VrC@;8 zf`@Gry%_@;4;*Z=9*oBH(1e;0;(?kTdhp;u8%aFuK@&}kF+C|4o$q_|ZNBaoGJk$E z-^{$>@u<G?;QVHPU$O)0$5oaK9T128fcLbwFYpt7B^Fu=mOFL_;Ox8wTYWb6Sj)n~ zPpqC7>B43VU<<$<D^NnASp}PSh6B%R%LaTYn0c*@vgDcb6^xL!KtO^0&se*pC6_<) zXnu)o$*Tgt4rW9d{|HWrbxehv&bt&6U{lyXd=oZtKIDihu7{??G(IBxt(}8VMToyJ zd(;s&eoiu`WVez7N}g3Ri(6qQb(LyGA;^WHZrxD)*?&3`=8O;UQP>e5<3V`!#M_I@ z?_XXkPL^+%im*xs`A}Y+St_rkSdU;KavJYNhE5er*WaBiFBK<N%C|}@<Lj5^Z<N5B z%Fm8x^WN;_<mKEI?@D$&pYzabNkk@cuU_<~=4NKSnb}di)sl-`zqztfT3UO3d9A#> zgnKO`Xt%akI%rP2K0Uw*wqwL!AUnx^KkIk{A7b83T<1vSGS_w3g$aWX08})GX|{9& z9mumWMh#ABNLs%pvhkq77ulAL%?Epr`STA<{cm$XHa0J88imYFd}`#Ie4BaWChi+` z=!xs+fwb^uYpk-%Ox`?Qj{`hrTkp_i|B1o%D=pFY%=HRg_G<<=^MCa@e%TsL{mD7c zuLmGZGs)Aq&Nkd?b1Ll|ZM>B<Zpj_#U+&Ay^@N(InK$k(Z`3h&H|O&T$hTrh4d{z& zMj>;RMWc`$$mKf=1~*r;$XpMq^Y0kkGTvVJkOT4whPk*@Rpxqs?81FE^yV~wXylul z+hwi?Qky$Q4Zh_-<LZ9EH=<7Gk48Cjfj{HjsB`icjyC>n)r^{hcsxGZMW0V~lD+~# zzT6jmY~P6w#|w-X%rJdJW4IqLiWHvgI79MHB|lQ~8zp~JGVaJ|&KadI?z%Hb_7}=N za6ADxmN+8>mJ=SP6A7#(67)~yUt+K`(0Nrv{^rS4XVtRWl{iuj`;%<j_+8gID{0|j zSEeZ~M^-s=-ThYD!j0~XH66e`Qt2ojlG+X6g<~1(Nfb9o?Nf|Yjbai~?0Cldhhn6D zw{eeDupJLcO*i3%o{Y8KjvJ)*n{clubEL1?pQ2`?)q5@kM}7AmW_!<vuEl-tDW;lw F{|8n+-5&q| literal 8096 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 JsoMPZ{{SPB0>c0R diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/gtgps.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/gtgps.o index f80236e5061f3295c45971c003b503f665d8e5e0..6d444a023c27a6df47613a2a61bb6b51be4e1208 100644 GIT binary patch delta 1519 zcmZWpOH30{6n*ctf&L&!XPg!iJ7UF&E?PGTi7739zzDHw7bGsQ)dGzMDHP*M#D&4c zMVrfl7!!?g194;AxG?@!YC?hw6BZ`6Yy?**{z!~?Uwa29^(DRM&N=7acW35Jr`u** z^9JaeqYyTN_r$eR>!<mg!dQMrutLeE%&&Ly!uK;`?q@UG(2$1@c71Xx#R^e0Gsb47 zUSV#l<ljVe<0t;UW8n{*HXqP!?~69?yz~`2V;v?2@+`{)O9Tv-of6TGB4>%tTRhuh zXWOR#Y$l3tcecyA>w<07SZdX53{B5bT;1H%KBD;(B82V3&|VXVd`<h~rJ6M%))+Lp zTK&7QlrtN~%2EmU!AY0K+aTi#`MZ$g%ub5TE9)3MLeFt{<LVYG*v@^K_rXnfH}8jc z?vQ^FU5#jNAbXK;6u3v@H_CCQ9Pi4we-8C+?CYl4-o%H*JE;CV;iGcxvvOQ0$M-Ud z5`$B9A$U;N7Z}P7jgBXh;}_UKckhX=Snt4zqeo94Nem=nUA;#JAYR`Tn@Eo3_8%L` z<X9@hQWJxNtju($bLWPWW9;0ek?~6x)A5PQWqNchGm;x*S7g^iW9eir4Oi=RxL0o^ zbsEfzlmC07j0K5TtN3<{KR~&JgOoR;U#DEcVJOvW{x~sGZLz5RQk^s(PIc|5rAoI{ z<tXpKZt^Uc>k1{3H|LksE#hVW-IPn1spOMP3au95HRaU>ix%GM|4qDnh;~aK^VDsx z;vIM`m-GkNWaUCek432cN3#av<=e3G3i0xetpoXpmp8D-(nq)OTkk>cA0$CeBsU0C zkwLuNV27nqn0Rv_(;p>XZfscmJ;eX_B+vsNydJowI$&7w)CeT-GZ)HU-UticX1{sh zbn3>jlbkRLNhQR4pnx$BFO?9SRUGh3F(8j<s0O@1>_=QfT=F(RTy=0AvZ@A8RD<Uq zm(*G=`Z;{w-sbW-EA1Br?A6-DEQgd95i1<-YZ2!P4SyR}wF6>WK#LDGH>7+K+Y7-U z=2qc}&k$h`ETi%o4gQGe@jwb;+6MO#X6s<tA8{_yH+BZTIJ|JMDX50&z^swdfP?IS aiKcx{o&G%5%igC=LFcc!%9MAA@%#l(3HCVv literal 6920 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 HhdcNmaHV~n diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/health.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/health.o index 05f25bbb5fdb1c4ce84bec5c2e30ac9c2746e803..c372474f5c42841844726142477ecc464d68dbd0 100644 GIT binary patch delta 374 zcmZY2F-yZx5C`ygNog7=(udZxc1SbS#_Hyf!67a}1(!%c1AYiQJNQNs3YLF|baQl2 zP_pRg;^5XIf{S$Q;Lx!kSg)@*d2qkSySsO98YR({PszhZh3FvNqa#DAvS^*Zi1vPo z&sWhF>76+=8bcvO&lKv=;3UqGxz?E1R9@-cnI+oZ&#d*1r>sjm_{fH|iLw<^1+leF zOKHdY&Kr{~E>}KNRqPO?vz+>l%25l?u0tp2x(+68P8Las3@`tSQ+QQ}dWhI-?XC8a zb^lGj>E1~DrJZUske)*&)<x4R&{i6IGm~}^*8+R8y7;V$ek~w{K`o>U$o07qJ3^No qW56bm^^gjP*fF{+&$CTPKeTTOi%s{4{lGphE^Z0>e!y=Ae*G5{o@1u~ delta 475 zcmZ{eu}i~X5XJ9WNg8peVjHzXB3M%wv2}<AAqomQ2(1Kka4G1dgFz6~ido%S&Y^>g z&_M^mkfp1Ow9=`6fK+g|-BMKQmqa8EF2C>I<K4Tjl6Uf@6gt*S0<meY;#O!FCP2S< z0;4g;-e)jO`##(X37Y_L1;r&IlS{;ZmFu4IVBCE5^%mW65~|eTG*n37H56%`pT|M_ zoc|aK0Z*r+FIcvhV^tj4$mnpa7moH<_6`astOo4&_+=!$#<?><0s%7q=y50D&jtKl zDoYak{@--*Cmmz{Kp<_>qa<RLx{MDrDNE!?QLMXqy!p@0o0sl*{PdC$-mi48&IZ~? z$&y8C%Mq%{QCy%`S;R%VC-=jcqu!J%$fBRlQ8uY!iHxL%6|y{b89S7o*3cn?@s=#c mL+W}?TG6mg2IDqaiYC;eep8)#iYk~fUtLo+rLr9(rF;YM&~Tjq diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/kalman_core.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/kalman_core.o index 563d5e817e9c5422eb2458c1eb223714987d37dd..cb23373c42718a47fa3b5369a9c44fb790d9b76a 100644 GIT binary patch delta 1212 zcmY*ZO>7%g5T3WY@z2_+*7k1f(rDL-LrrLmjZ{j7pnXY`(jHoc5Jg0)h#l7lloSW2 zsJN|U7X<_ohnnF4r$P?UR2(Yx5~D6uQ7@o!i3IYEKqV;R5;aJ~h{(*dcN_SmnQz`V z^JZt?{xs4X*3~B}8$oyk-i|l~Apkp<zFv9zV0C>*h8lzF#8v>BTQc0Bl8?x)$^bRc zo-*0y7wfaLtR@4uvn5Y$c8RC*A3`m!LMo?%UAYV^xyx)NH==A;)|Bn+6xdc={(*X~ z6W4w-re^^DV6E0<Wtr8t0=&6%Y3=$QdFDq^<{F#6KC%4QyAx|SKQBqzkSWtheULPj zEUS$Y|12vvHpqUF<tJ4Dy#mr)6>WL0B06dD0rQ=IT9X3+wnBEl)rz{E72wStx)Jbk zJ23$D0Ues-y*w59;AHAJX`vvu!|xqWo%JP6LphPsC%GNZfPFTsS)g%yDeSSvd~s9u zCCm}30biflN9@(9-=0X$8tVyJk>|NRqH0$71Z|cK>obpLEge2&Y6IN9AJnZvkJk!i zxIL?Sti(a6Z$Q`@_E0=Z1C4{7;9x%v-c-NhPl3*x2@UFT&bFVvBd2h)YgPaL-n|!u z(WBu2)uY5m@wVsot*UoH!nm4YNqk9-?iC3JGWduE=rr0mg;&%lJA<F7*9Kkf8f6$& z=uVBRf9dEkykbP~Pydj&-c~&LO(1%}?d)tK`j#wAom`0bN1%Z$7=7+1ibVEPArV$P z1WjV0XPu3A9bKoj&@&Q#7fgiC6>^KGi?1yfUM!c2Gv(X`40QJ=MslShER>4*c4|1E zpSk$|<y&Pu)}7qHTXO#VZoznQad$CQn8)SrB>vj{%&EED{JGrg$BL!GXdz#Gb78*l z%Cs{U#GGIs&9~1LiF=(mLb`i`LW<)Xd(yZX;!MM4D9wU67*4YoPLtR1eexRC$@}nk z@(S*aq#4{g8R=tqL4Oq+dR%Hq__uy2bkpCtM7BfV$6+Ha#bhiQNBl$dp$hb3*|4x- z#H5Uj4~_l(V<d{Bb@HO7jR%e}&hRV4#7$k95@YjD_L0}<D-&3dIxJ@JkhzcFJ&u=2 w6PL-5{TGM3@L|sp<KwQ5_`qo+x;}<u(F6Xf(`gXP(P!1F^P4&Ycrj}J3lSg!1poj5 literal 6104 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 MC+&Jw|MUC*7wAMKN&o-= diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ledring12.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ledring12.o index 3c84e8e04e00618f008fb59349a149907c8f0fc7..ae25ecf6cb0eab30aeebf41ca9074adf9523c367 100644 GIT binary patch delta 3989 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 V+jnigNIyv`B-<m(ZH#Jv{(pvN2rmEt delta 5401 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lighthouse.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lighthouse.o index 0ae8aed52372ff57b114402443984a3391433275..0723a497f8c8465a4ac89fdd0eb883c4a0cddfc2 100644 GIT binary patch delta 917 zcmZ8eO=uHA6n-<i*>tm;-%Z%2HYKHjhPD_HwL~OYgNFvZSmLo5F~!D;BCS#=*u-N` z4KIft<3X@T>0M$@JzBxiLl5F9N1-4D3HWAzLg>J}@4aun_cJs7nUmx}c5h_@M$582 z3t|w3;qKR?p#-f<4F(3lL6uwi4ujhyX)}rmX<LI?fR+y$KWelk+Wcl?RcO-CSgmr% zUuxE1xZC^Om7bgt4-Z#_1*ok*+ax%iXGaV>TtP*O;dibWKKppwMDdiH$v9CQsI|K) zF3#ao$@GWpNXGjtfo&;nS5iFb2p901loMz8SBmi#U_ibuLKd(SE3%WQj}koR7B=M^ zE8!Q}WRGpTY1{Y0Cih7eg@7jp?@2#m)R$vtLW6x@c&Y}O9e7!PzOlXW`t8<w`Bi-z z>RSSENtwqN%3b`eykk1P@tZ7yv#Pl_=@z|47dJ-@0H$5vAb$MC(qp`rE2xai=SiP* zeF0h5Ph6>U&*5Vr8c(?*0S{=bxun-#Fy3t$DO0$nnyDE<yKDSZ3>v|fY9ux9n9v(R z<a7E511(ifIUnlCuGW|kHGEDrHLz%V>EnDL%vc4>+H#=lKFK-YzIKPTsj7)pCgX*c zq3BfeA|12(q<ZL1vw&rNnV$fD&<p%f!Jb}Ve=sT=7!NM-Uka9j1(wBTu*kE1>``z7 zS*XY@KbArTwu8-3F>y}U5UbA}j1ZXkGqk97Wrz8PkLZ%q;f&hxJIp7WxzP0gjjfJQ literal 3944 zcmb`KUuYaf9LIlmn`jmP#aOYe+D(m;YO~}H3%TOMCYL`aoJO0I22?Jay@|KxE_>{4 zB%z`wC<?wLH27p6g|_(6xAvhzzz6%R=yMf>zDf-kA?WY7Gr!zqZx?)U!tL)jpZU)3 zH#@U4yZLy!Jd@32fJ+8$K)1#e;O>K6-;P`x9)|()o;Yb5Kl5+@;&)f~4cNLjpSd~+ zu(_DE3p;&qc6Si=!Ypi|ejDR&qTL(<*y@MQj{x>w4XuH{Y`$}zG;mDXEb993_p1Rf zes&7BKE*zyv(cW4`oi{~*hYPJ4Y&p%`}KWjU;52Bdad)3eTno#O1nE~@0qAs%tGPb z{KVD$i{D?_F{;0mOBex5L)0o>Qv|XGP!sM7`Acrud#@hW{k67u8SCxPZ&kUG#R-<? za{Gsu1}=XkXZ6-&2_i&zpZ}?RlA@}o@J<Sc*<$gWIWqhDTV}=g8*bh4R?THUFvGeq zCq`R=zw9;83*5RF3O8H}gjuliqxrF1!OG>$5hrMlqBnN>G;u3uQcG?ue>N?l<TML? z@W($%DkJg912FI}sTde3ULJ{noNK*}p46-sU+-x^zb=h@GrIQj=a5qzUdEe|4nXSl zsInoCCZmm$M^;e$h?K#CvSbXnPpe7Sj7%?|MxN31BT^n+4dCcqXhv=?rz0Sv>BqZW za6H=PS6s&F<<xAzLrT>(X5{wrIpi5lU+Q+jIC3>L1n**n=U(Sw3jaKXUryoIQ~0eE zzLUa#O5wk!@V}7{X!Fb~G=S@pbiZd(_)H3i#=-GrxiGwbaL|>U)mlTqa7|OZy6T1C zwIdVKX*jvIyo_gJQ#AcxV@fPTwc2t5r`eWAU^jNr4@8-d(8D;2R-G-+O-_`nb2BsZ z)0JvvVzNA4)iP86iql?!b-ES<;e-NS%U7^Y<B(uJbVARSl35W}Ja?t&udRkkG%Hp` z;JHP=*~EK;THt*kf@*g#@i9-~5kJ##+I10J2=K7ehNCr|7mhwfTFV=O-x5LSiT0ao zBG|x%)XH&Ok7HW>Y2^<h*G~&m@h4;ajN(UQd`$5Z$d4<Z485DEQ2hI)8(n!n6F;Hx zSCmijb^Vm$1>`(tLKVd+?=#9L^Nz-!)%c?Fc|81F*EFub`&x?Acyzw5aT+Jb=_pR) zIjMXyUufJ^KACOhlU^U^w;CT(KAD@!kFN_$=-i}t0v8?^@nME&c@GnRUgNr+?#ond zY)SvHVq`{?Pn_n5<0=fqbrz5RloFcCl3vfN$Jd`vetuX##tE(VMl*Dlz-otqv~~6Z z(QvF#tcPILoX`Plsoe%E@To%boHdSB5=8_(Z0sdg!*`tqbKI;`(T=v_J6eW{&Lu1Q zGP7Jf0tB85|3fh`22Pdsrj<c$Y2dc9Z1goCMthFt)5f1(7SyJ@L&32;ia&CB-FUrT zP(1!6bVT*T=0hcp=^UY$Y5f-u_3q|poI{6V()WyBIR7~vqR->!ameqK-uxvc7)j~R z*hVL5{>C4Wijor2{Lxnu=jZvmfQ(Yb@4uz;^Ye|8sBnL-(?2Ci`8x^usW12E{64az z{8v<d)^omi{r!~uw^e@5L-$W#W!#_nCbFdb*H!)!w(EuaGy4*qr2D_4@-HeO<)^Pa z?$7zZMn<U)&JFab{H5~0EvpAtg`++Msjj~dSh%3zrdn9qcl5rE=ci%D*PdeB?WZfi Z3MZ7+gS@I5{imDM-&UW%->@*H|G&aHTMqyL diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lighthouse_core.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lighthouse_core.o index ecff545b6401c3d5168e88901a7791be8b908c14..7a2dd26b484123793b371a898aaff4943225a9e6 100644 GIT binary patch literal 8744 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≈FwpHUooNm<3APq2PTam<gTqT<kxu)eN1^o-5A;?SqKVncE0 zrHxI+p&w)Ymg3OL$@ZS&&}UeGUvcQ=oV}+w^s}trR~-65x{wYPhkl9mM~Xu)=l)~G zp)ayt1}OKte6KJ7XG*dk>Z~799K`{vqWM-F@z+_OQXIuN>obZ&KgL|@rCr7*!3E*1 zb`{4E#b4ryeu#A$rAHSYVO#dK=w;t7DLqf2B}K(`|4q_wRsv_4^1uu8qLe(h>?8xX z5tt;M)Etvs_I;D|YA_&AC&$Qy$Py|=%w)NicLdToDcL?Yu+kotIxzhpRB@~FF~`0B z&$9%%;?X1fTq0$-@OJ^6%Q^{uk_wpji~!CL?N7kQJYf4#%F&Ljr>x&6nCrEG%V+s{ z_yHIy@iuFbXQ_mkQU6)?m-hy7koLvK@0*b7vjytJ|J!n30a6lw4sWK3p&V^r?(;o3 zsU-e_GF0d`fBSr+>-obPiNDO>BC&4mZ}LP%*Gv4#&8BPgw_E$W;TN~9_jjxxe8ped zFA?k3{x-L-zaJxM%O7Q=0$ttOKj8N3+#uS=w{Fq)zecQE`^PM7P`ys#FAP72cWZz4 ze5lxEA=<~YMf_#_w~3+s6kR&idE<UjLn=dyr1QuYv-SJzKfqskV;x86inb3~bnhX+ eAwT#}BEh9yXpnH5cJq((|LgdkRki;_{r>@t1PsLh literal 15968 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 H+5f)*zI!(X diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lighthouse_geometry.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lighthouse_geometry.o index e038d52e549332cbfc5452dc9414c74889d931fb..1d81ec6421f72d261ce63da238603e64dfc57caa 100644 GIT binary patch delta 662 zcmZ9I%P#|Q5XWcx>toAS)N1PyY(k<U^=v4IrX((0grfsZB-*4=!GZKpaTJoRaquVD zb@2}nj|(>>+$0r|I7(>Z((wCjXGKi1^Z3kfzBAePrmq@3oR7KS*AiBi058aJ&gLK6 zH1=SB|LYefndRK6QD#tBa3&%jvy!0#=xYurJTuk&WDc`5=P-h|P$)4lx%5Gi1<d3) z6hyw|PDF|<*kvZSD}Wbf^0Ja^ur>2BJ7$#T#*K3B>PRfdTBggQVHGFN&j5haI{2?^ z!8=!|v6CZ-cWbGoP>iDF4oPurbob_`IIH8YY_ql2iQBU_-y^QkzzW4P;yTs46yJzz zv_d8hne<X>J%w41+SjoNtI5s&o@i`v2(qi`rS!5@!~`A?c$lzNjNrE?h(%BRzC4LJ zd7{;ljFPa*7um-O6hpr^Bu(Ru+}>~h0KqfDack!9eU;Sm8<Y#K;A_>fFHEOf4ZLux zcv9U^m7*m&;C=OwBPF5V6+}%5i*!<ni?E}_1J^WtNYTS(6ns*;y$h_eilN^(?ENCW IQS>WqKT?Z#V*mgE literal 3440 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 MkFAa)o6G3nU)ZNo@Bjb+ diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/log.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/log.o index d388b0a20bc1d902647e1c836fed71f449d25265..439845cf17de60698da633eac99bc5a7f3a505fd 100644 GIT binary patch delta 732 zcmZ9HJxIe)6oubQ6{1vH`xj%2v{<z`*`;<+V^QnkpipRID(E6rTm%IL!BQL?h3nA8 zK{tN}C6myhLI*+o85JB_(9Ok7#KD)o`ye#K3->$s9L_zg(DE%kib-YtW_Z=tMo7_P zX8biuOQ0$yEt!wX<q+LAceQ87zD)S{BoX2vlq~!B97g_zyokJr{0lkpa}YxQi#&|n zjlA8#^GC!!Z3_Lwg~EJ*Zyur{h`b&!rRjGGKGTcl<ZQtW)vTQIGB-PnByqWb?fP1{ zXf5_}ogBbjR-soAXYVz9XBAc4AvQ&_3=260k~wFWOPJX|3f;P*&fzVso{Z(`mhm7< z?PQ(;M079g=}y&+ieD(0?1NKXiHA@PGF7y&7B*~o_S?50#azcW*9_)azlzP(Y=K%8 zHrWL=R9l<eTTKRDY?<~Zb>zLQ;S8KCK1d${ST_=#%W0ne>VXR*L8H(xG#Z0Q-g;N^ un)IW<S$=}b&|s(sB1>Aw&KUPpVQp!&BRR#VK{&T2oliQX#=Y=oIR62UYGMxn delta 1127 zcmZ9KPe@cz6voeeZxTmF8lC4{CquMNCb>}3nWCH-$EI~E&Yve(GayC<P6{myW~3Ga zwHP@r+NILMH_<|dK*5Cz7Xw8_rMPf0fr~alAz~AZ_O9=|7~Wmn%l)12eCM3|-ph5C z-C(&6sa9R>oKVu0*$u5C!~CHtX-xpRcM{Am_XO6*0a8D0FyhwPj?NB-ndXAb7X>my zM@d=xBSZd3X8BqGB?QnnY73MXYM@~{Vdg9M-%2pD+!`o<m)-f2+?)?hPWuMH_5A6v z-wOZ>nd6h2y-T{FB=dZ`9%$E1L}0UW(wpgr#)ILYcBl?$N6C;@ncZ61l*e}j6Zg`| zt055+ys)5bF_yrXyTB5Kdj94j`&wA<|0LUsx}8`bF&O0OZ3&<e7_{k=iq&?y1C)pd zh-Zi&5Z@$zo;Z^YpAvB=aR>2Vrk)uAx4~P$$qkUDgbS3g$P1mJJ*j4T=27zD6rKsI zh4Jt`r)Nwtgf894MmgfRgAEbRrttPCXEPX#@JmHfw&==Wm9k{zI2Uo%3ojq3IxrRC zX>)XIr9m2{$<o0C;zD1iI|ayXs!CtY%_lVd&FV!%kB=h_9`iYc<}CS%V;`6FX&rbs z%DWZ)hZL)o`uXoe-0Wx4kiiFJQSSLnQ89(+%8Y))?kG?1QB=I0=_k@J)7P^0e1*8R zhY{k!CrtIl@ubS9x_ZXo6JR#IMoG^o!P;)t!cBdSxOIR<;^#y|*cE#(z2^8g)>jv} zWmKAU;k9@l+s9Pg&wk+Q>Ha(Jm)4rGN9|`tOsRghi>s>N?z>^+>|$B<+MR>OtqZS? SdF?B4;}*lY>n?l|cl-l@hrFx+ diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lps25h.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lps25h.o index 84fa40873ca2032d205250dd5704f8b79e77b0ca..bb5120c15be34dcbaa6241b85ce03732f9420391 100644 GIT binary patch delta 124 zcmeAWe8E3KgDHb`qZT_OI|~E<0p|E?n-?%DFfnpWzR5gib1jQ9<K!Kz8<>7DOwM96 z<NU$Q00s(^SF)KiT1<Y(W)CD4*+FC?kPMl;klmhh10zJ$hRHA4%{ddGdZtcRWD=fi N!=b_`F*%V#9RNAR9_s)A delta 287 zcmaFC-yt|bgNcJ}qZT`3J%htu2?YhY90rCE1{MbX1I+Q)7R;O*w4i@Q(ckL*D;v9J z1v#ErUi6olVImWQx||{qJ4h(VF)%PpNla@BT3EEAh*>~Su3_K&poS`-y6S@~lz?g& zER^LKK{SVw9D{_S9LQXt9)^OV)Z*gOqErwY1U7px3NY~kZ3ly?KvH1xMn;jziOf@Y z3i8X-pb`v|9a+RT3$So7@@g<b#H4|=&}3fL-AplzlTWdlaW=3(BrGO#vY9i^ne51B u4<s9b<bufuf#jaajO_ND5=;<PCnkHcn{z&3hVW)h?qoM-+%fqeyE*_}nMK$D diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lpsTdoa2Tag.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lpsTdoa2Tag.o index e230a4e697b3232b837bce6a0be3b47be4c51156..d43febb0b07ed7d6c278da6325d0c49bef418882 100644 GIT binary patch delta 290 zcmX>g{Xu$y2BX17&E+hN3X?Cgh)WtUK!5_2wgS?O49pAxlNnjt1q*;YK_CwX6ec&a zmW!8`CxxWsCmMw$raR`O=NDy`WaI)>O#aU5$QUr$l1-m6WO62ujF>zVNXAS)2_zFH z{{)gLlQr4(88aqF0?C}ooj}rH@=hRWGWjKtw3sZ(q0eYD*%L@QOs)iyE|XURNsq}l zfuzr5PELKGt1W?~(&S7asWN#ckW`y|5=d%H{s|<tCTnu(GwMu^1d@82JGsIc84D&q o<lfGt!8UmoPaETg$%?$@oC{bX{%M_@2;|-1g788nFXWa70Efdw$N&HU delta 244 zcmXZWF-rn*9LDkc$=&5$SDYYd8064!2f@D~FvY>aL7|}_2w#GmW4(dMt@tjvwN+y@ zgj=g^j*g9Oj=A-~^$eefXM5I-&&GXb-dq0co5#|xRZ_1=^S?WM`!&+wnx|kw7WV9z zap>%XnLK47yKH2Se9Kv%ksL6UXUt{FkF2s+c2;L7_qmZxUgaSxnGr?Kj%Z7du`Dr@ zJ_{MLk!AAOS<FZ#Oy%zTJianJr;>b>egnReTYKbUrxo1=#r+8nS}$?2E?I6L`~kLQ BIqU!c diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lpsTdoa3Tag.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lpsTdoa3Tag.o index a4f95e6fb180fa842b3c89e970ba2dd9519a60f7..c53d4cfeacc3c4957c80d684098aea29271376bc 100644 GIT binary patch delta 154 zcmeytc7T0?2IGN=n(x{989;z};zH5MGK?a2LO_ln12b3<L@2;mIR(WbDfx-UA&KdF z$qXtf45j5sFagJ$^!%dCl8oHVc8pStf^a=hy&RJ>neurLKzVFHntk$9CT-3HMu?F5 OWJzXo#`ej9%<2GOava(K delta 89 zcmX@W{)26T24lrU&G(ZH7$x`^atew=Qt}gxLlV>Vk~g<8N-<7WU{aWTfGL4@0s{oF e0V%f0y3E>~28<99{>h2V=A8CWp6O&oCV2oZ*%E;O diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lpsTwrTag.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/lpsTwrTag.o index 2616de8729482728f3332653b089c5819c76cd78..993ede871d5fae48341a6473b2a430189b4fe8e3 100644 GIT binary patch delta 231 zcmX@0@<C;S2IGf~n%mhJ8zw(w6PN5@fB+6CZ3?6r8CV!5OcrE+F4zX-2?BWuP+5h^ zAK81wOUsi&%8No0(;ait^NTV|GIGJvn`=21Gc$HfR^-uVoG>{MNOn$c1d<acZv>KE zlOF=fNs|S6^%=V-I|9kclM8`l&*X(ba?0e3K(co-BcDFw)Xj!`>WqvVCP(tOGtQX& ukbgVlgUK@m>X`(1CQAvnF=|X+C}_?p0Cn-q$q#|N20n-jGbcN;$O8aemOEVl delta 189 zcmeyMazJH*2IGN^n%mhJ6DB`o6PL_jfB+6CZ3?6r8CVz!CJVAZpDe)9ws{@LB4);n z$$>ojj0KY$fn?_7jX<(+@<Sk*HCd2XpRs7NBaqCVTnHqKCocq&Ig>8}$&$&8eEN*J zlMR7n>E=W}bw<X9$({V|j1`jw1-3J8n0!*8p6LPiWG}%sMuEu}1<g5sutVI@Hd#=} PoHKwA!pofO$RZB_7Nsym diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/motors.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/motors.o new file mode 100644 index 0000000000000000000000000000000000000000..d29acf81fc1b6dbcf5043b849c920ef2c38a5667 GIT binary patch literal 2640 zcmb_d%}*0i5PxO;79$uB1`fUhF(r{rTQmXVVFeY9R0vdKqDfiWg*NGSo85;(I9N}5 z#KeO~O+4tuc++?hZ~g=N7kKcf-igla&cN$q8xA_j?#%q&Z$94i?d!uU(^q>k8Nref z@5PSCs1SVzcWfs%9dS(bicPEh?X<MM^0Sw}wf^Z%MzrU)Eb&x;hE&hcmzwR6y|w=N zHLfir{z<H{SN^nhY`68mkGuBs<=FHKq(@1gOLU}yR$|3;@gdW)KK9(`K@aDGh6T?f zc+v#d(&T^P?X={GO-)W-klCr5w`3^@8kL$`Z_1@0l&a>*OCzl?SgJR`3M;j`@+xX2 z^yIi*7%AlP<95Cvvu@~*fR!5_M%>OzT*>DO=ere5aGc3L@#{|-%St^-IKT91Sdht- zBQcP6A~DZ?lMZJRWjBtfB@UqKkc8h2-`x)eTSEI7C|i<eH{J*98I8X|d{mY=ta*t! z2<n73H|`)yIOaoPd=zZtO9Vj}p8y;2T#O2Fk#v#p7WvG-M|j)7mkH;-nSY<~7Y6?^ z`2E_P579b&>@m(h@8fxl|Ng@`>z6Uk)!_c2Ji-rD5Jq-I46TZxswkHm!EzLTvB}D1 z?|QSYh*t6<Hs?Jx=c;-@D;jC4b7jKwT11*{xND`L>1l4!YXsFbp&)S-tTd~lI8&OL zn@<=;mm<p{mWrTfhx#6bBizq>06pCWztaV;5k6q#;d$W|uAgE_e8!oV)$jqbQH^Oh z=HYoe8jgJaMP@Y|`KQR|{;@9dxo*wiOY&P9j{IKo+ZvAfxo=@dYrb+9L8~y)HMT;p z;o8buRl=^i$`$rv6bU;F&_R0M9%C0YlHu&w_;+Ae0^j$Vii-Y&k`N19@Axe+or5os zSBctw^PCyL?;mIEFhF{NuCxX6@m|C_JYSyw8N$sQ_B+Ly3Ulak797lJ#{VFa*)P}U z9C<J>XMq9I9FOa|a6I?nz#`f`Itgq^1l}hvb3FTazaiD^e~jWcm`K`;zXo{P{5NU- zKPe99kGDO?b6>Xs!%{hTbooN{@9H4f1b1k2?--IL@CoUofE|a&tdIXF=H3Ak?{HHf ZZxgls=K2ia9hDl7A0bFNQQL1b{x6he;|~A; literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/multiranger.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/multiranger.o index 53d37adf73b7b073c1279f93d845b3a1eb655fb2..bf1b6da25775c6af1817eff673138b1fdced94e1 100644 GIT binary patch delta 1324 zcmZ{jQAkr^6vywmcS4RC8=KyH-R9kN<K9inS)mB(G^FfpR)mlb6ATmz)Dnscu_qsb zc0E1#Ae2z#hEQt{?Lkm`DiSgw^daIJK3D`6)mviUclQl0i#_arzVrWm-#O=gyEk=d z`(jE1Nsn~dH#v@b_+_QL{j`3oO;rNINBTRsy_`M}IQ`cJNV_>Mb)Dz*8?TS*e=hUs z$$NhNy;|wX(36JX(f38Hh5D-Q2aD&AaB7_)xHBs_1b)Gjd4<#9tuTb@%yV1-1)kv= z(MPxgUg!4Vp;+uk<1DYjCdT+N8_ja_yr%|+F)N913g1d``2~=Mv}Yl3y(ID+a0v{` zA|!L|@>zh-I9<C1@36-!!go^zTp(+&sg0&~ntI06K~t}pI*Bd5W=NUqIjWfQNx15h zNIhC(3oHFwxa+@*<8?XIl$hMXM)8u-8rYhKJ{(t?F|TyslH!0xl8Gn<9Owu*Aa7=U zEPF#U*gyz~ux+jlbG>J-f8bi6VM?`B_OVN#9W{&JQN|xE<KHRc&;Re&nQhh?aFZCZ zG~U4eART=tD4sLeo^}!&EqivEPls-@_`jJ?YaX%qf6-Mh0*B-EqHN;}fSx^W+2g|n zLPLzwj>jxi!w-Zul{uS4Xb|OLMyttLo8{~Xwh%hQD4oq^q4#l!(3FMJ$-CK(In)Ww zm(V^&mvN2IPbD<LsDVET<%B|7ypsV&Z5RxZ=PjX0Mm6jww3pGEk|(-~(;=~QjM38P zonbz`;bvBkhLpvR;nPr~t2omL+w}xpVNqVR)TMV(q)XTn7OU17ttHh@;Fa)6Imw(D zs{(}3D@o+C;VB^BLW|mF-zdCw++GDvsI9!yhFMz;uBuvvlm1tzN8PiU22PA<aq@wU z5|uEm#rb>)ziC~Nz(^!cUZGK<1DGZ%;a8%MF%pg2IjPXwu;E0s)o%C-=|14gXlv!o La3P(?tg8G2T!`G9 delta 1603 zcmZ`&TSyd97(V~3S;}hbC1+MwXI9tUS);t-1<X|t>?KIEkb+nrf+CY$v@nWXgC2q) zhrh@NA$<r|DNyubv!Dw-7)S~Q`XHpyLy!;J1vC;nXXYq}rJaZGpYwg+|NZBjVV2ql z&kX9YVE7v{+Xx{K$jwG%^~<ZqI>`vvsM|MQjBVS9@$(dnWf3yiBN3zbcE0iZoHTaz zZMre<!(?!zXOFY46<hZBuOcwe0s4`q`_Z-)AKB80uOMQNnDId4naMI|jmLI&9zi|H zBzOg6_XJ;QB+{nQF0$l4PZYg?xr20O6z_lvBlrYVZHRk=|M7m@*^zM_d?|ZJLPZKq z4N8t2=)zG&hLiYQ2{>N^O{UMVRY)_f5&;s#45tjCDZjG?;0K0t7vUY2=gBZ{;<}0Z z(V&cKVyTHuCbpV**2ECHU8Qi>e1FIgBQ6D=;s9mmO!l*h-|@X`(RQMu9Utf4I(V(U zv*&X2g|5!)r@MPEb)l<ZS|S8L6jVSNf+|BZ8mf$Cs*={hcb-R2;>BZX3*OW05XEw; zM^$^8m+P#=Om-=bon@@^lb9p)ESu`r1nQcZ7}4y-;+##vtqWOpY;w!}3cqu<W51x* z3VeyccO>BZ67WL__?X3)5H?sGu*@5>Xgw?pUcs<ihHq@s&UNl#y+wj&6G!Qh{tD_* zLABGb#vYb@z<M<?oAY&)FBN!&^M~U6F3z**WrDxT;`{doXk4sMFrYDRz^=bJ!GI9w z*#VM-!M#FG62b1mRA(Qja^kE*XcWrMVWA;I2pYjRRE-KMyQfC(n8gjM&c&(6xw?k# zBKl?G)RSCwU@KL#ZPs%4Mt6UgDjc9{ZJZk9z3n(j)tg+6KYRpNi)7S2nxB1-3f{v? zly@+`Qs5`B$s;?bg*>+D5O>5d?2(IK3VRXNWzOf)%qo25se}-&dSnPrZF%|uR`9yF zCRJChtmDZz<E;h_H@pFg<vxaCiZPs|sN;q&AccytLT`W|hILb*co8=!E?~Jo023JY h2T~o1mFU=qGydvSE#F$&B>dyAPATKR`!H^K)qh^I`lSE> diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/num.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/num.o index 4d9fd5f2d3727fd6f0485968050b44b455ae3d73..413d95c8446bf5eba5281680099e9e1bd956a610 100644 GIT binary patch delta 240 zcmcb>dxL9&hIj-s0~|PjSq=;w4D1{21sO#cSQz*ZFvnk$S75#h!XWnK7mOv76PU~x znI=zU5uH4RNo4W?Cb`M$n1m*OV2Y6BfEs22q=gt5859^H0xXkPGTU>cq$Z{$CFZ3} z_GgiuT*wkVS%8&g@)Z^tMwQ7QS>zcNCkL{MGo>&BO%|Knz$(C~K6xUtfXL)4tRjpl olV7sh3m$+P46}f3vL%~7=L05)b&it@*~~c=p?))+T*xX90EuHVS^xk5 delta 617 zcmZXRyGz4R6vofZO*QpdU)Wkq;?f#aR1jZ?rr^*;C|FQIkd!nk7{SLNI5@d0$Ho6Z zHyvHX`WJLjx(W_i9V>)*Z*yY>FI;}-eEGhU98znmc3zDRUdix#%tmEG9F)hE9&$lV zUG>kO?|ll_I;*{Q@biooyUcn+ICES#egFLRj%odxPT!&%WxXtM4dzuuE}<LhCqOYd zqN@`Gim+g)UN-0Q8839_9c1WceX1$2ms|!x5e!594uV0n$thNej5RWg8L1ZwQWEDS zmBesE+V7lc>;W*(n7|6@i!Ddh@G7f%fk1(Trp*wrCLI0vA<gYNu65>s<L)0iV3#es zWF6YzSfvvuw2zB)nz3C>;4p<g#MtpixBvLNnmX!qSUxTvShz&D`9eg;TdI*ee4^S` zni=`uF`I!#rErm*d<bY^<ntBLCj~P?r=pMG;j}z9z}^3!e9>%bTI8mpfS`v*@=8x$ d3fn!gQY%*E$@qg9wT^XpE?y8{xQKPC{Qz+SYq9_U diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/nvic.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/nvic.o new file mode 100644 index 0000000000000000000000000000000000000000..4b12e11efccfe6a33d29b2460e6c9234bbbea697 GIT binary patch literal 1528 zcmcJO&2AGh5XUE7K3Z`ps0RcGe5g<>k=1S_4y}Z=P)J*ew1}oBBwA<VHY@fc@;WFz z0TPeEffwKz=#c}j0Pn#Qz|3~M*;+Y)7|EIc{Khl3*Ur0V&$|n)7FcV+SC~bX0-Sp@ z9aS=dC0K-S-qFu{!uw$drdF&b@8<tU4BJ~<n__Ky?@;uMB8^8f$;C;bg&8UFxINaz zNs^+{@hCAWHWRJHhTmy-f^fqRJ7P`htc@yIUnlN|f-+&yc{n?>tLPhDfnUE}PO&%l z3leX9#73cqom^Y2z`UEFK3Co8a0AJ$#=5rS3iD;IuzVF`%Q#iJ5PzwUU})z*Vjehr zpLyi)*UVoye9ZjV;UAb&p3JWM2{rBKJwY_fA%C01ehjPAO6}%}frGQMpTuvDc4R(G zl?H=BS1a|hzkdLGz1=#oBlWN=C#k8)SSPuuG4xc{les)q^@Jyr@^ZytiRsJesTxd9 zdqrLs;eMB^T?5>~t6XATIlny1j2wVp8hznMR%w+=->9hpe<+Ove^8d-$3>Q@+%$Xq zgBDmzuj`uABjWg@!|gdNzKeqHBC>$}F+cI!98-T<=i)sBSbm?m`;Yj}b*`fxO?!X= z_59m<dgs(Lz|l0j{;MWLZP#!51!oS0f+u`te;pYO_x$u0+`S`$b8h;Df`-|3ExL(f OUj3Berk%*%t^Wf6ZKY8F literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/oa.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/oa.o index 56905475c647a3ab8d1f2f64a4f28ae20a0d3c6b..01a6eaf2beefcf71cb6fa7049f7915a76e786669 100644 GIT binary patch delta 632 zcmYk2KS(1%6vp41jfOP@q9$2)v!JBfScu_@pn_{7Xkp<WM7Sn`h3P!hh?NR=T<h{I z#7csN*~Wxz6f9zAshyp%Q&3P&Q9;p}-JH(Ae7x`Xz4r#@tiRT`Y2i>cqq4Q*^1A}g zzey~&18gobaF$BwJpE+lVhNn(G&;{IcwI?@0{~kH>l1ZFb46WOlCJRIJkj9sFP={` z=YLNy6U<&I&@JX?J11~e1OZ66v(vJVyL8LU(A~#}=EamssI|s>#WDD0fKc(y!z+k8 z-l%$sI7L@28s>%4LZk!#`kuU_$S_h{w20vSi4KHuj!xnlF8TV~*DYW7gzCr4e*)SO zAQY6o)(Cle(MVG~?UB+tJ;b%OYbouO(tBxV6X)}MTAW9Ti}Jp~Um85Yz1;sMak<}A z{B_M>@PRCiC4XSW+ejWT?4qomQ?00<!!G^Ob1bjWcvF&Uy2U^1Mz^_U3>z&f7&bdi zkZTNzfTI{?QZ~+0fvZJjt}(jdIzk!K#u+M@wtCnc>^`NcnN!yzfh*Aicl%o4wyCOj FegZdbiq8N5 delta 738 zcmZ9F%}X0m6vgj-<JU9_m1HuRNx&vu7+u&H!Pr(hp|s$}jkTrX##snTgB!o0V3t{C zxGoyHQ8y)lT4kUVO2PgIvk?pkjk_)_rKpQy-+MEyLm$kUdw%bobC2$O52{)84hK}W z^|}6A0q5s4tVaQ=%M6^A3_8DNS$!=7&gvdG7fHCfxQh+|Y$KGXT1vbj=9Z#0gumf2 z$>;Xa`OD`r?B6Ui{czQHM>#Hb1i6Q=i_}u|pwKTqQ(#b(+f%qHLcWhR>=!p)EFq7j zy1rju>!Q&;X9sP)r~JJ*CjS^9c<y26I^w=NpngNl)7M)%K9;&b>Bv2-$oZ|*ckW{3 zDMlyr)37#eFTZ*+U$Qr!FRd(==zaIPo9!9v#1h#t-PmAq2_z9<$RDMaDXr;PmAWJK zK<bfD<1|P`d8#dxYSC^~-?|KS=0dli_(tp+4)LxK&xiQ!fQv2doG<XdII$2HtIh+S z@cAfc{{>P(K=5#2Jm4nhBlJZZLC^i6ePCFm-9$mH^vHGK(OIIv$_fp)$0=uIu}m|D z#kIzDf|`cKUdG8ZABhXo!X2t{tx%KeCo+;2=4giN3Dvl6P%~+%CmnwGC8bjZ)r<J< PBiY=IC4BdW(njAOrzM*a diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/outlierFilter.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/outlierFilter.o index 4027af9286a3fb491bb98c413a71727e14af63cd..58a074805d869daf741fabd5941f9158c42f13b1 100644 GIT binary patch delta 574 zcmYjOJxc>Y5S_iR<Z^pKV`72|NecD+LPP{X&<kiMA~t@2#uO1n3sJGMNRc0)zCsY} zZLDl9VyB>BqgY#53APpr?j{p)Vdu?z^LCcmt##Gfjstv}(hEtikUWZ=Oces6%0kU7 zzGQRev)*r_k`PhqYic>JU*8#yAq<qv6dtVPY23oM)q!^_fzWoaW;d|vYs_HRb~?@a zO*&Ydbt@EPl7(A4g?77tWUQ{(Tqk<{%Sibm|5ziP!HAPyE-R8yokFfh8LO<%Gnb5K ztgka~`fn6(C4*I>03tGo<wy}9k#V`PwR2G3n=K!fclNR5PKzWi++h_T>+z=^hhkb; zjg1NmC$Vh^?+7)|Le=Z?H~$)|1SO|U<RN6*xFmGQ9?^?}OuJ8PilQX52&FnIlg1O_ zTv<ZxcLUMzydp2NVgk2bCg3Nla7j<3rRHQA?mCBppEk(Aia(iJ=Sjc#kgH5Bxbg?w VCH|p%<m1`Xc*ebS8Vwe;@C)thTO9xZ literal 3648 zcmcJRO>7%g5P)aBPH>wDIi-ct7JEY-l2*jB14s@+bmKHhkqo7YDMcVT&SqU(wX@E8 z(;pR7M+B*d9$L`@;nE<eXnN`eQ45S(xD?b%<pAx0g9}Jhh(l43pb{a>?7o-0Z0r+a zqTQMKcHYdqx9_cUVjwZ-ktE<E!Kbj|aSEWe2)1pi&<ZUepH{m)<#@N$s#a%WN&vR0 z)v?&)0Xc-eFBDLaX};}&xZe{59|Zl%_CW2{xh+@Z)b~L}{%-Mjb$(HXGj}^Z1)r(} zC?CwkyFHk%iE_l+0}|%cC^wXc&-*$8l(!GL=9h!*tx_<ebOcTTB=2^{3ya6Ux<I)l zzY<WqYIUIn?k~vFMQr)(I?PXebiG<7f5#5yKj`=h`o!T;M>heS_Tn`M>irL~_B38) zfU2aZRZmE*_?7lRlNXXHfXP8G?0XS=XbwSzo`C}2rhG7|U76m}j?Z>^A=>xPQWD3X zk-TbU7s!V$dLVgKE)PpSsLUWgu@NTU_ClqG{5;mw-hAubg%<Tb&Fh1#_Bqw7y?SoT zbSqT(JX0aNc3b}MrR1HZrAKZoE+suawL(1=(2is6pJZvL2W$L-&!yKc3@bPf%8Pj_ z;+oO>_)#ivz<zeDyq_=T!Pg$3ceF4f%`eDs@ej;L>ohkzJ6xXs*p#3%Fxu>_$2-_N z_@OO02b0&)z9YlV(PpTOdDIHkO~J-PU*kH7WBI(!dZZT11C@o5zWK%DU)t{x*KuD^ zh3Gdpmm2o=8_ofm%ELVGujHfLxPJY4M<;fXet&k>*2ry*NF{DeS^1o9X2>QPo6-*H zR)py&(>+W-#q`sV*0h9v7(h48-88Ob8O4;4Y?@#lX|BTv{onk726Y?pa)Wpn>hFJ6 z=^A?J6(wmHc`cjHO(+?|RIIG7^mP|aBa_RcWop@+rEAudsVlwVp6;GVv^N~>QM%G* zp&P9T9ya9Rs6tPok)CH76?8a#gS_zjQoSg-?iUI`#=m+ZV<xw>*?_976&dj4yJVy7 zH{xsSI`M1k(q@%}et1L&<J{-EmvNt6pVq{YeT=udIJt72-R1PNcGsotJS+S*%je|b zRaf97nj3`me~vvm!??=)Q*3E3q3>r*RG&29pEclD8}M7m+l2Stg+9s8cu}7>Ss#3z z{$#wy_(v2>!p`zwE^p~(ScA|}2#wQmH_Y9+l9is&bSRqo;hZs5a)Mr%7}t*iZhsum zpEpYSZatqq)^AKrAfOM1UbKhdcSFxZDwQ`5mR3F)tLp7f=X2v}OHYm)>5*KanAcbL zv+B8}7fVnyj%1)TX<8Y`q{m7bNDU?S#`_Yfy@P`z1IbjfFP<1kvF_{+N~=>2>m}V< zjd+zr?qJr+;ym?{Bf4I+m*;|g2iS`1=IkX0TyDUxHQ+Y|zKPkS_`ak34-5PUW<P}7 z{?IeOCUAZx2+?~d>BacXj%nZTG5ay(VtfRBl1(nYrvX2}xI6z}jJx~iCy4&VS~+C^ zid_}I1&s4E!uKz6>Yw)-bH($ysRAd)_xZ~Lr@9LB4+xy%`Mb;toZ@*OMS)ZNHs+TF zPVo`upA<O7hnWAKz$re){5gTsTzUVO1WxfP^DhgWuMMGV0;l*r%!hF4Siwq<p|(s% zXSrqKc@10oQ47L&_|gy_E0rK@8st!TG#o>hg7D~umw)WTno%g|6Be)VpR|Ib@l~(d z8<bF`8_JBw(fsb`2Gd(n(>kck=c>!+STRbDvJNjY8D2gcPcZKO1-r)TcHwhT_;}8q zM1z=n{5>|_-LLr0C`S}8>Z^wwLHPLn0wa^xXVZcKWMsSR?_uCJ4HATp=SW4P-ujKw zf}xaIA#!P7@$sAKA<76|6vFpEF%pGM^mWHwzVp6C?Rv#_Y?+Ne$sVppx&beDed^0S gcS_)6|LASwg$Sa!T>R~<KfXo<QQmOW^4&fDUkW0_X8-^I diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ow_syslink.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/ow_syslink.o index 30460c75456711b5dce4abc6e960daac2c45e3e2..73b818d0bdaca516ceaa06e5ad0130ad64c72d49 100644 GIT binary patch literal 5616 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 literal 5944 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/param.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/param.o index 30cf4e65bb813b56e70a9cfd252cf9a569b13ed3..650a7c70d74bf3fc7b6da6ce0798dd53dfd01b25 100644 GIT binary patch delta 2990 zcmZ`)U2IfE6h3qBQnuT_?Xqx}pSru)n5C6;3tPw<Loby?9(-tFA5apz{Df3fu_bEC zkM1ru(Fi8H853Vfx-~wul?O>RvBU^8Xm}t-F&g57xnLiR7*P@1HNbk#otZFP?0q;h z^UXQm`OdlL?mB}L2Z{+Jkv!A3t7hQr<Xsa=Hsp8Q-fc`S2Pl4OK<S^OtaNK9oBU)i zl%}skX?~wMS$PyH0PtQkW`2Lo3{O!Eo%1zz8hmglyA(1}9}MSd^}}$i4l;#+ogTke z?J6JSzt>nf18x+m)l5Hny}JrBGY6sMm@B7<W!{7-+Rule^uA%8Aj~l>_fGkE&kJsh z@F^IP6FsOX4se3}*M=cY9M`1Jyve4XzYm0`;$YRqgV0<sl;guCu}U>V<>s*riv6Nm zwaUNRX{Q#t#zXeZDB|4!!wm*x$~C+((B9{R3}m5{1Go{#QccK*wxX=jMo90))xpNS z8G!V0%vuPE%wv+ZT=yXB`g>Kux`I0aKhM?%b5Sr|+Uppy)(0Wxw=4bB>mX$M>v3(u z6}ua2gv?sVUnygUNjSZ$Jf@`dbUuRd@td1B$B_e&qZ>K$7~72;4#svPhmC8Y(M~gf z^k3*d{vt$6*y1aWxxyu(4$Pgi4?oa>4SXRG%7v%&0(+&}F)WzWlIn6mD0Xm4NU?)w zSMh5?ab7C^Qe<8<@k@88Np=M*>04svcNiFF@|M6->{**fM=NsenR~G6m|s*)Q%hAl zHCS~>RDBBlZ|&SVd3$%y<ov#;@C&djcaMHGao+6zff}K@o0VFN=x?z5cr3?6+uy;9 z<61yj28<$J*kF%fix1<6LHh;VSKbi&&u~9;RK?21I5PHC#9a{*SDY^+?utNs8@=nS z6!8L)2JFL>>;Ub1M6!Lfud!z+Sr+#+@EBJFuxF^!>A{8~W3&8j<9BR!`rD?D82f;~ z-uyEj_JnTwjmtj1WA#tQHJIM8=8%yK0fS&265vxW78pZr!tp1;ebz|)w8U+R=OunY z;^!qEmiX5a$Dwhb2%hQrQR2`5PrJZL*8=<^FNzHU@Jal(#LE(QBoQ-&(0tSM@#q-i ziFj^$BA)QGA<o)5*j3(%_HVQn&$dOFkC)mkR`1$~Ym=_E$>w$~71>rJ`8t`Hmi-#u zuHnZt{4ot*&~TmSm|r*%e_ZoFDRBN)d-KX~7V$~(GwoLAK<)oCj4p!DQ51WUH$QH% zjB5v7JK@^%uDwb&rzT(-YLjGcs<3=>EgoD=2Km!VlCmKo{U7n*YGRbXDu0{s&%tsT zpe_a_5d|zkFd{F8Bu@T1u13#Wz(vhpFYJ!S?*sh#R~7i=N8qjCl*E-FCA93p2js<v z5?4Z%|AYs3{Zn}RvAm%1XjR_0#^lVa)+wP0eqp_p+b(Y@Dyc;cX;IWC^}OQ2mD~}D zd*vSU;L3kg;631#t3KUT9zmD1#OkvqQJ49jSVpo@2=sm%_^0MR-tpM3`L7c$t{u_v zxQ4&I2v1Sq&$(sjM4vAba8XO3`~RWgdSc)#X?6OWgcd4Kk6I&f?@-0~aEG<BRo;5v zNrI1eSe;3YQ=gZNhU-f9yGjPNTV2V7#MP9k-kqi>Hb*x1+aj?L6yDw{d>&lQj$h*5 zy6Qc+@(&9<^w6xO_#PCujd!AbhF?fVINNxxAuDNIQM|8Z8Fw~D0wYl&vNy<$)Fz`G z<bBIl@ZMB{wntK1XgP~ZqM84Ti`~qh=-OfgBm79$mcWqw`C0Js*{)5s11*B9iL*_c OYcF+()3bbQD*7K)cJi$N delta 3904 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pm_stm32f4.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pm_stm32f4.o new file mode 100644 index 0000000000000000000000000000000000000000..3251a86b6f6bb5c7290298cf6dcf6eb7b3092d49 GIT binary patch literal 5128 zcmbW5Uu+ab9LImhAyyz#p=blzZkrQ|p_gm<6V8~prLCn&+tju+CTiO4b=zLJy<2v- zNF~Z?8s!a|5aOF?jDo)Ofy9znLyR#z5`#YTWa1m7zVLwh`|bXI+%VlG=rrxjeCGT6 zGqZCu+dJDk@WzHz3Z$gqd#Lq<0@OWMYnx%ygsrfJS{G7a<}H9jEl?dn+x(66#P7{U z`ZxNealmn5++TgtKKXuq08W|!V`TH-%#T+eq+uyl2TQG~>aS~~sjE9MhQ9%pf}^l> zC*ANZ#<*ynzcONN@A?5?Z`0IfbJf}et2v{!$*41$VC9PsClA91gXq)R46Bk;&M=yK zk>MOx*G9XpJ~;E!70FZPqxS*ltg_Z<4KB0*EE!eEw=P27$iTz-O8&4BwykY}`;z<Q zCuY8iYq++>yf1MlKQ{9;7i*8XDje!sniAt(#&}<0y!}rQ@9UU&Uvj)`ay(wE>&;u? z<ee8j-=*fFJn!o`zc-sVqUO^_H4p7+>@oJu04Fy#cE7J{C?3EK({<1jmQzz!Aobul zfPFd`C&V?OuwcJ?-t(X^XL++WHSIDP`hgYLSffo~dkX{hDZ4}leo%2IFvv&Li79(y z7@-Xb{OJV#U-e0TG70{1AI6qyEJfJY-TkW3);DzA7^_rDxLn1uF;nr3V9qwW+Fh?Q zQ!HW2E6f!GyAaHKwvo?vws+<_^4X3~qs{W1c5LPL?IWJ;FleMB*Lf%@V8rn=hg;^} zKXIyb?1==B#-F&7Mo)TqHUt!9eM!Sp>tJ-;CGquf8_+{a$wxAX{7A1BW>2WEamlQm zxr|8t8uL1KA$*8=J@aR{euw!k?#n)-k4*~K$6zjT&oXb(_$B5U<`VZi=53mu4pZ{K zPvf_l?`JN4{$!rh_&w$anM<C3Ge4r~>rp^)X`QIZd^60=kkTHjl{9Rsb+{Ehul4+J z=%>c-Dwb)Gr&5C^>bGM?QX09@$K2rlR<4Jb%Q^_3Vs2{s1?IyV$ICd3JIQ>J>&wXN zxvf^;uwLdP>$AdKrXVx?g*mM^l^3H5{$QSCevEkvA4FW-9mr{Ys+ykz%qd?g;%A8Y zUFP(8qw+5EdaS9)I(y7>%te2e`LL!x&)j7$>j17Z;Rnuv&Y6SR0%T4@W?Jrw@k%MM zX6?aZ8H#>?xfo~zT6fSojm}0F{8F)eqQ5*-(Z|Q>(mHB|_f(HvI58YL?$z0-9o}v% z>~h>;+oM$2nwq+`!fMt82j@#c(Jd8ik5UV-!bdK`C?UES<;JWLvZv`w+N5Fz6BDJ% ztWWo+>x3)gI%BpUV6V@nDXQ8SMoSup)fGJMPSefp*iOM+pzQ6SJG|SYX}C@#kX~=u znkw1RV#<65ZOfncise}}kJ_4mUJ<Oag>xCPt!bH@>*&tHrF@*TnrXk!(;uk3hhh8u zC~2>|QZD0lYERc-lvuytQ}n~PmZ(2w`6r^S9{$~dpNEHg6^XQ;*SLHJb#AaP-A{(O zuFq+Di6`guOB`3Ysp!>Pvxhn9RX(if$%mXfV~Sqoi<+LhaE=>0wRO12d^hr!MU3^& z+@^I<^SQ}f&+~QyZ$Nu0`g%4p*YhzG^gRjsN#>OQD^aNM?_z?Va|wQy6ZF>-^tYJn zapgRg`O5zIi}kV}gv&Xt>l^so)%9|I>-vKUdO6p1{aAut_80vNT)W)?3|?E|qH9w) z?L+#dBJU%jua7X8ToWg)ypPE~7roqDZ)tk5pHn#HX>i|FIQf_NpQ^%1FYA9!;iQ+m zKT|mAg<n=U>34E}S>dEV#{CtAlV0N9R5<B}xqnOHq?dE#j>1Vl$$iNB3r=87VI6o; zJtr;CE?L<CZz#y(-C#j>%J(7bRj5Pqj_eWak_b=qEM898Ld9{S{{zMS|E&!)#7F$d z9wJ{R{lOCO{)>9+--&kP0L|YN0oN<xS1h=`d??ZTJ;kZx@kXxqFjvnm8oI`D$+uec zKE0QdPu+fn?R!*X)~cujJCs+a3b8Hra~hZY$%aZV{!&|yZ!ow^BBhAEAQKyL>j&E+ zg`9V^ezc#&Ue*u43ku`QevPc~Iq^chEr4suTdlQ694cM5U*>u<Qv7aXU3|(*pF24) dXaLJ4&AG&lMgi#mmN@(6`bZ()gNR<Y{}&~4UW5Pu literal 0 HcmV?d00001 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/position_controller_indi.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/position_controller_indi.o index de200ab3c098cfa81390ffeac62320e753cb653e..6e2ce2aa138d811106f568b9fe84bca319bd25ed 100644 GIT binary patch delta 2375 zcmZ{mO-NKx6vywI85<qOkDTPa89(NYnrTg=Mr29IAO<a36u6KOoeIRjGLS&rJcV%6 zKm%tp3l|a=4{BlPBBVt^gn<he8nX#(5x8)d3z=MW@4M&C93S2X-t*4ye?IQlQ<ul= zhq=zQ-Ni~z+IdT}8dl9%fYpBWkN=FD{yp*I^<8akOS2oSO02QSZ9UUi9r`YRjod^Y zK>Hqf5Bg!BeEEPpjlLWI9r=Caw`Bt#`vsf2uKk6Cp+}26=sfeY&zdaeCTsA3tCgGz zb=9NR!2(weRBexH!Y4!5I^c(quX-{)Gr?w_KA(V0v?=gxeEKoGi7xhLWH;8xQ+0e7 zW=g^5;ZaQ2vSRFAQpDH_zAmz&+X}Vds0Rx5NT?P+B<B&cH84^bu>s=ouA-fA8h=y4 zhZKBRa?5Ez3uQ>csqItnR|=jZoYr4H#Vxr?F@8KHl=&CJ>4bI(rwtAi{D|;U9jIum zwMrgudI4{=ci-JFAjYdi%adax7$4!>z2HI~Mc&}yQzX7w){%R#f<m(=VF&pw&Ra<1 zV?~1#5+5h=oqp+fCzSN#8HffZNf^ciu`+yh)DcpM@+>-H0hH&_5%m+K{*ucrF0>M1 z#T7VjBYd(#I^t+zgdY%2kMf9cdO_H^avi}-cQEV`+#XGY(*|h;zo+1%XLF0aAOfA~ zyn<&5rxVH(PV3l&)A(-==j-?0_FYB7KH;>%p@N?%xDhNL0skFXe%h%}#_T%bwDDa9 zA0eEsc=8PH^q(aHZID%PTfx@}r;WE2ybxq#&N{^r(8h;~gcAjy#lP|5GixV1cMQK1 z`n5nvBJuU(=jDK;f)9n(23y|-wHEl()vd*$;c~ZT!W}*);3Xeh;T<2_V2_U%q2kKF z>MT}r%JTmLB48$sP#%}G6@<a$4c|@(=8^-xTo^W_DRQ%41N~PAd>IqwxLK};4Q^I1 kL6Mu;2=u20stOS~{TwW$`l=>zW4mE9)#vN!f?}%UKaCirLI3~& delta 2882 zcma)-Ur1Y59LLYS$<ibyoi(vHG4?k9T5tZ<4x~$ANVI!!nSIduAgj!%oixyxkpxz# zc%As*pbv)Ahd%5f4q0R8pkoeXD7Zcp$9&k+@Sy`+#wg-LhX|Hd-0$9d;(ojC!Y<tW z?)iMr`Tl<Ao^x)hA5}h{mE=l{99=2(DMd~aCmDMEd2hg5EganWaRKlw+~orkDL=nD z)jOPdPzaC~F)%yXJNM^<0`YgOZnv6q_WBFrixyMv1JES6KkV>}yVtmdT@!g&B9pzu z8W8tf<kj94uAKJz#qF3~PHbN%tLaEo{GoxAqu!{Pf<ch%9+&c~&+-Hxkta-%phpq| zU=T{i#IO_;gUO&cB89|hDJFKp9q@$3PPorW0deRwml%QP5j#oz+v_BFy^Xx&|6}H4 zW)95^3L#d%IB6k0?q*VuCz`<27vZ5W6C~%70Vqf*4vK=CctTKINHj}+G1K5pbi(tn z#giybk#Z(PNZ&&~wYqkADC}PASlDx=UcG3!lG|>5KX-8FNp;OM_}h0ktBtl94kiNE zm$ZCZ@Xo<g1L4RlqYhpb$=8a?eWU!o^N97Sm^96-1@a5yj~IW?stM0k=Y43LA||rJ zoNJ>F=}(Z?0#s3#bgGm71!^Nx7j^0x8W05UIi}9*)EMm%?qB#cU(A-W`LV(5*o`dw zWJ`mi*;}Pg3Pn;H8XG0K!Tc~8$rndSF*`O&6CQy^Joz@L)}fV8T;R*5q>_5Zm8viw zr_VeBx32!W>6}-P*H}e9h)ryi5;hF@7UDkCf5(8oK^*&AwN<kaH8D;21R2}K*`n&p zN+OQ?cOj0`^dXM>XO44Ooy~0|V54covC(}4K5xL64EP$a<=5T^da)a5050ec1O5_m zTxe|{C~p*V2iqS$Stm5t1mHMv8{*ig%YgSGj(u+Gcu#H8C7n>?6~>#OAfW~!E;Fti zg4&T)<Q00VS&%o7s(f5)mzi}vqZ@UR@yo!^);dG%XIwc_ILiR)???S-G%geUfV*fw z01a4TTz{6A8P}iX9mbUjusN!3`^Y~?*sfBPH%JJf#OAlOhBD(Y;_DWzq3jqh;$0{H z;dnv&5I@=&O8(4$3BYd|@NvX(f{FoOG~g@1FDtd`zaqb)0Y{ZWzb(w^w`T<zr{Bk_ zV#_Wo`xDV;2^;V>1D-;hRi&+7_i;f@Jz&6ZBaSC9ZNTp#j$cRB%65<bo3V@r-~{Ui zd=qh;V8?)4ZQ83n_Dyov1lW=|aom6>5yy$U5yw6QI?kGeY*NlIr2Ff%x|EZ0o~^zT zZZNJtqIV7WeBJkH|5qnyv*e)rEn(UXQIf)R9AZDjMTj#HpF&)g!d#gCF12#!sWbAL z->IYa=q0;{m7TKEbo3H`(Ltx8?fgq8eXIpO*3PHuX(xpKAf19h-1ISoYJ~FfcH5>~ ptN%KE=5o=2c-WR~)JT<n5r5aV<<VMg^k-;EF|GBP+WTqT@i&?86{Y|H diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/position_controller_pid.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/position_controller_pid.o index 123e9a3fedd8f76f3176e589a24aa02fe0c26775..537a71ec57cf7a626a10a95faf651f54b2c29fb8 100644 GIT binary patch delta 1169 zcmaixJxE(o6vyvP45$cs=ELhV)g-SDK}2*i5%Il%gBFDd4&C%o2rcwO(IF|6Rtm+z zA#xU5Ty*N-RtgO`NbBGt>Y!$DaFpWU>el;ll*5D22k(FH`<-+C_uTWYr)$q@xhX5l z9v@HdJZ7;dV=XLt5MH=QXTs;|{onVF*E!dUP8GSv7?(cgdEg(AX9D~)@?qo&ZZ_Xw zvs2i+7%d?^!1bq!@;_RSl{%N0X@yPw4QBpD&LS`n`x<@mZl%mtUcD`|@*BTWhTpMS zu;VEhix1f)Q_1486kRl#hqbuyS23EB(G>30vfYFqHsLo-cn2&e#E6G&_XJK^LLTgG z6^aQleS}ffTQB;nr9pTf;dg}7d<G*)@o_L@Qk9z^Re8d@2`@F_i-c333gKzuQ!_lq z)WI~c2WJVv_f>Ot9{)^m5aY0!6#i?BDhHcbZxK#g*(01@$!amh>Nh+gK9jK4CH&_Y z4UYRI;dI;^gwt_v6HfCF^(j{*N~>-Or&S#h(`axq7V@OL3tm?zc0*AJp3$1qI;=IX zb?V2mIBDZEP|S|<EvRN)UW0np4SB8LN4mgra@>Q0<A!qW@ZOo=zo728yae}B8&G)a i@>8fv{SI}h4Y-$@heE&0KS8zMZClTncE133(*FP+YIiCC delta 1132 zcmZ{hF)RaN6vw}>h^t6kd)IzFitFjnnwXf}5rc}sh!|KJO++*nLlc{b7|QFw#voC# zNEZW1S&Z7f!wm*C84V=vyZgw?$=&e2?|%RH{`cO!^1PiZXA-tf{vOM{Swtp%<YGG# zR;ec)!efMKC(cWhP@)T37w08cY0ZrfZhUg%GmlzRRM{cV>rGU>a<%7OsEtloiJn1+ zve3PgCp(3$JS-?f@EuJ+Nl9wDS4$M9xI^6ek%n7^?ac}@;HU|tZU*p50KW_1tpF~2 zql}V%--j(v_}A_%6jio&DpcNXzp&=V72*Sk|Nduxej_0N3-KiKk-QDe5N<Sx1YNAg z&&LqQMsv_q8C~NsS3)^>m?OmTFp^lGf0MoN7-LY6Nz1$o9d)-MDmceoln}?$*n;z= zXvjx}+c;a#bb5%p;eIC($NjD%j`KGW$N3fhmD~+dan(KIxT+<%|F77t+Z(Df&_o{r z{4;<Pm}ZPhZcNlJ*h`oup_rPW8&FM|&O+NMGbBrJ+!Y7Q$WR#yh8g+{!?iI*51?(B oREO+{Nw1*b#B-=RaTnSy$)-)my5Ph`sHV;ElJ0f7597x04~UL%zW@LL diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/position_estimator_altitude.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/position_estimator_altitude.o index 661302b06c2fc3f14784ce209afc038df264a423..fd8753b5e4a7ef17eae2ccf494af1d6357687865 100644 GIT binary patch delta 432 zcmZ9Jze@sP7{{OI?$lRPF@+96?@nuIh@c^CaCkL`prz2kQU8Rf!EnfiX!Up-8f^)5 z3T!awg`_2@rJ=R?M!_7!4twvs8hYXR_2u*BdEo7&N2&Ju;V1-ukGdU&C`7<+@~$m| zX{lfnYG~s!cE4n)H<qC{Nx*a>V^82$=MsI80onk#ufM>NWnPrz1f801>9|VmS_*ir z2z*>FbnWJ|IZKy1A<CZsD!XCIrP!uc+*#EqF|-<>UI#F<3gwxY2$IzhU5$Uv=c;bV zAHUH*z?Omvd-v(d8*xS)5Mt<_57kA10n7Mr*{grs=Ll;I11fH?Es^sqLsZ;j^?;hJ zc=U>JD_-xEDl-Ln;^qb$ioWH#?j08nT>a5e*eF1j|GO=h{dOqUB6(E%oXn)4<zH;L k>kpT5h}UcyKEo<Ija(vS7|jI@4;Zq7m>S;S9E(Z+0UE?;q5uE@ delta 428 zcmew$vp{x&Myvui0~|PjSq=<*47?0~tM{z@%giwGg*3xo4hIFf&%ul<KQl9|a$su+ z`ohe#>T5L9%5Th!tAJXjd}U_P0?|!O4m+6{7$z_=FnRB1V#<CzvC@S(+G*v)1F}NW z4u2D581^POG3@;u?6~r8^^uA1Wf>1l=4BLTR$ySBtj;LAIe@W&g;8MgMOJy%$w2c2 zCMPlpGcKL{kyV^^50o!5S&^-e+1Ds!@;Wv%Lk*xP2uL$BFo;5!VA24}28oLyiCau& zWEY=oz|JxG2fF}c$YeuyamfUzyckd|3zFKD$%*XZj16G2W%5KIyJzx8cKOK`K%Gax zq9=fSamh0{^nU@#GI20Yw&Dn4l-S(M@tbLKKahW7^F(fQM#dA9Px90=c1-r<ZD)*_ be393j(}E3R($UF+eCC`hxFEb@AWt3uWiMaS diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pptraj.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pptraj.o index fd62e0b8bc789a00ca7335ad1004c35c4a7c3d17..470285b1f02f82a526ac15900537ecef129f6b07 100644 GIT binary patch delta 1861 zcmZ{kPe>F|9LL|xZ0WkY?LT*Cciq*^E{m<YhV+M0)<uG%!x|A0Rs<b1q!c?S1-o>K zC}{Ob?V*DQ53Lj^o{R{M4qXC^ERSP&kS;}b(8E^m&3s25Q}Yh<gU|Q-e!t)R-ppI+ zDjzDP<Z^hv<*~AmbmWwiuParBOsp$p_O7q^amz(^f`pVtWip{D!C6Aclr<6u@ou@Y zJJs87o-HX?J~t(mRXR{Rkp81cAGCYf%EptP3fV&{+VSk-*GIXEBP3O1k6a-gWRZC$ z_@;%lEAEg3ReIXnEIX_81`DK0C%tXbuZ3lAyA)-miNexYSB&oWtI-6*lAtDGi_t#6 zDmBwVe|xl*u>f-oONN+&=O~?L8FEmUpmst%OV^ot32H_$a1!bu^#{~bBT$P_(@@93 z=fKy%3*aS(0eZn7(2;;zn1rf9Ekm6KFJcJ&;4i>6aI^E5;K{v)(e%FuFM^x?F9t7= zB?x9)-?710V<f6K0{IP|v2Y(7As=)eJOcj#@L_OsOzq&)I%ie0ID>8oTCI^`2>d*F zzRuv=C~(u{F4|I`qL=Ge>9J6j-Va^%WMsn=WR@CQ4XIHyq2mY+D8^JTZ4Ijh4^r~* z4hPY|)Ud!K7&zymKW)RaHvHVbyiqT6O%TMwGju+zN^|=26@Nz8;N&l`PiQeudsMYh z!h!Ne+3&o&$~Ju3hR=cXDq@~b;C#54m0n}b;1@~AB4|PZ@x?X;-mu#yAwO)mn=VJx zf)AgEwMrb^dTtqk>-P#Ooe+3TsD4J^NrB%nc!BT&qHw`!xUBQ&2e&pl1a57#C~&dS zhXRigew$!T34-5*EIzg2GdBFW4Sy@}q?w=B-}s-v_*?v;{LRd3gYVn4;cgdKi9S)$ z-wV#aJdu;O(Q)dI&v-iB#zy_guF)V}iAU<#HKeb+gZ_*kmT$RfUp!2+iIhC%rq>hQ sJj}9CcGGW(?$9=pjNv-q=j)+ejR&2>J|j_yjx-)|=JCzuXh)*yFQMG66#xJL delta 3188 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pptraj_compressed.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pptraj_compressed.o index 5948fab43d8341736425fe9204614cf99909fcb5..731adc68d5c515104e6b3531cb0302f4527b5b2a 100644 GIT binary patch delta 654 zcmZ8fO=uHA6n?Xt&HkmBq=`w1Y&H?<Vh<JtAs}YjUWz{u{5dJOX@!dDRgfN<3f{Xs zLA+?tgUud9!5kD9T12THJoMnfQ_^|}=%H9^Sz%dclC6jjhVOgd`(<W2BWwGXto*bD ze~tDT1r1biwjNj8tw024`#foFi{SobXXld8+Sw$|uUX>s4#jS&)HEPT{h7nmTYNwH zX14(TuBf<80_~%?Di*4%VR+w8gI^b@*NnkSo>{WWMo-MT9Wmoxdq%yoWf?GG8snw1 z@i7Q5n3d9A9FN873wFQ8G&aL9$7{O`zq4&NMB)bXUJJIKuJcVbXq@{t1<oS^uNncg z?hJvyn4-Q2kl8p$Z=WK9-Vt^8F59Wg>g_OW1FWr6GHY~Fy&nYT9zwou0G%-!5_rM< z+vOGUiu9S^%adt|kbCIFi{v=Ii09-A6A4Hd#&h^7o*t<&Kh2aTLvBej!0R|6=Tf(r z!=uk5^#(qWi}*!0u&NZ$Q8Kuoj9ol4D1l*?B}beC@69dypZ;|qLxJguh;uj*P3i0S zPMyN6b{fYu32n_BIw1U$%C;NErj}2!*Xf%b1!er89T6@ISkm@mQn&VKP0!=9o)l~W wU+bf!f?Yi)Tov%Qeloifb*@G871m3~vxzY^8FgPmq8G85$g2?jyh*P70Y@vKXaE2J literal 3296 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pulse_processor_v1.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pulse_processor_v1.o index 08f84dcffeea7de3463a27b785e2ed1386208004..148b8a1f8f30a89ae8443c2814c013b519b010d8 100644 GIT binary patch delta 1883 zcmZuye{2(V6o22l_IlTjt#m&+wz1v~t)pU=;9zzptXBy9(GcBniAI*RTMekigqDB! zQM_)T3<}D5B$6zVDn=;51o21s8Wy_|CyOyr7K#74p+xy%f-uB|jry+L=9qkwci;DY z@7;T!_v5~IRQ#d#aHDqE0kbPm-~u234^z8nc8Uf4&IXdb!@{WwG2p+uk;&d=nN#<o zY<8t3K)n#~w>Sek#(7vlcyGE|1bryE+Yp^H9m<Jmu8d1x?jTFS0t-EL5Eq?<9^ydd zZ2@|7|NF|p{MT9{8YFrwXw?s7_qc|)_9(v}CweKs;q{PGB7u%`<fF3oHgQS(ngFV2 z(iVRl<u@5nBct#mhde>T94gu@5Vs1@%s_xzQFi5L>0GK5R0(-NU>d*;k$}n|@HOc3 z82WtmftFXp(@y_<kXJn-`;+Og4fxn~2dGgXx<=R=1NZYP!=x^mx=7HXW1)^j8Up?Z zz=~0}@|1ZVWh;DlHptn#8-v+<(bd_hUEiL}vEj=g%5-1NTQ2#<cN7^ii5vqV=l~Z3 zHb+<k5*y!ltS0}!79Yd?2t$0$7HHm7>P_di$}~ryIe<ZPTL~3$uP^~D=lmvb2FU~o zof~*2sHwlag;4Xo+xfiPtjOoM58T5<utG!FlHXzh`cx1sp&+6Og541YAvXMXUd^E) zEQ5A=>X<U-$s{}ovUf7Cb{SKwhYT8vEl+9!3#!%tel0<$wiBrb=>QUf8^-rd0K^6~ zf;OI7LOo9tnnC#$cKuQSrceQZ5{GAdNxb)VUi}3iK1hH{aHvK{yUokj`nNZLzL|$+ zPCTl7T%Ao=oxb|c``wBpoYWE*;E8$|?Nb014ai?V(XG6O<t4~>owe!$0su%|lCj_B zY^3a<f(7&-&Vt7Yf5~}lcMO4TL)wM32dSL%3+2$<xk{#yAg7PBf^Q;b$?p7Wzw%Pa zhl#6AFd-!?+Z&QvYhQ5kWkXJOha`(UV)nl?DAPrC;EKF!(~CxruxXVk)IlP8`c37+ ziA=)JrfQgz-AWe%zuFX-7+^?9>{vS@VMi!{ACkxWCSq%{Fu7?2_A<3hyvH@x^|m4z z)LNzien%cm?R89T^o`2)PJ}5VO!u>dlBCopAwn^k3NZjK(GD$SolL9N5o$&;BZ$yY z4=<4Zv9Z0bC0H($J4`vjUR7bwGS}TLRZWDlVM3WGq3zfg8Hb1CA<Z|*KKk9Q-6In4 z1!rwwk6j$kt0iHXUSn-OJ}OiGn`LR<!KW=ooO5ei04PCeDrNO_n|!#NnpP4|(q0Rf z?i5HG8pZk{;L{&4$nyxV`my@VPVafIvpBO}C(vGmF*n^RgzIkkf6BkIjBk*^tEmms zZX?>mc|S+`FQB7Gjet4VF4U0_z8IQUuZ^VtjHz2KQx<DhwR)a@1L^++^_|%1nJyPQ zY|A9fuXn&WWUE~eLG?`IbDw=-i!#g~R-?vVPdW_A?k3yJ=c4^MS1urM%Zd!Hy~Pbq z7i<QNPwj5|_b4-MQk-$g9yR=q_wc3zNKTuU6TqqeZ`I-1T(!8D6xqUa*&O+TIr1|& zJmy+F&(AAtQEvLd>w0z_WT6nh5MZuiCI=IcbJiT-pXuEEC|@{7J~=I)p8#-0qssY! zX620!XPlZ=%s83}-pd(13%+E|b4F|FN}<|bbo-34qqK#Y<czbWtMG<4ZWp)ZWvhgU ct!Q%5*iqIZGz!Jj4TIw8`RU(iE1o?60t&SJUH||9 literal 4120 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 JiprX9|6d@udlUcw diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pulse_processor_v2.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/pulse_processor_v2.o index 45338a2da47f3d15e423a4282b708fec56a7756d..53534f1b6192cbb308d7c9c4089fa87fdd3752be 100644 GIT binary patch delta 514 zcmbOs{Xk-ZhQb3*1~_m4vm6+>7&sXYFvnk$S75%n@x%c(MHZ+MA0REnz{nr~<*Ps? zA}3E|7iUZdlX)OgvI(lv0jlB(RL6XfEaz6Jtit3%j_ApEIl7q`TqZYiiq{{2Dida8 zU|@r?LDUf_TNF+F0+0^^(m<LA!UU6lki>bB#BG=$9FTfs@jVdndayx!NE*%{X+Rcl zfci@cXb?A&`Ug0~8CVe(!$J=%qE}p*TauW>pjTW{R5JM<*DOYj$(7vZoD(=88aO8J z<Thu_nEa939!MJUfXG4~d(IV51EVKTWD}lzhDU{y0~%l(CjaCy=iI>#(SI2%@58IY OIRhHgPGAup9v%QAzCN7* delta 722 zcmZ`#JuCxJ9RI&Nz23X?QG}Kz=PHt(#2}W7M7TBvLx(b0L{uaV5+6~6ASs)HgggVA zt*wbzHEBc41~DUs?p+v~c<=6&N8%0tkKb3`doQ80@UfK*>F|9VcXB`j47HtNp(ewL z6c{inQEA0;OaoaF1JhpB;j=2kB@CNJMC~;YK#^Kc5#`L7Y4p=x-+}JT%XTMsK9zdQ zZPaxVL?Z_3kGLUBP>IG@QVJBSy7O7vxyzU2x##PNl7bH?%T9vC{6RG7)@fF|W+~bR z2##GIps&FjmR-%3TeGf`aAk=rp19+RvG{?r7o^~y31pU5)3C6XNyGf+{OVAe$m(I& zAUA~Rdxc*Ehn%QElw>u#E@+zg%-X$xw+OgHv)E~;UGYY@j&r=@51y1f5xaw!v+Lnm zU_?L&x)lr}J|h1FwF>&gKREb2Q8&$R7WAoKc<_hW;{>}<J2}EPC{JRVjTf<}StR?K zEmeHv6?c+H&8m+9-9i;ItdB{SLbml$e8B(ZgOqg}@2Q^souEb=KWg3<CuObY3y;%e AeE<Le diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/sensfusion6.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/sensfusion6.o index 51584dcf1f92e6ed6a2cf0e47c15ebd691c1148c..50ca6a6655fd911341f2ef9bf002f884f11c6dd2 100644 GIT binary patch delta 305 zcmeyMe?WVJ29tx(MlCgFmIKW3*EWZ+%w^MLfB;2C1_mJpMg|3D2ww*(?gSMNVBYM- zt<N~QjVFAv2Cu;84?H`VBw>n$fr?n58bFlF<b(X;UK&uNK(bIKSd9ggBa0>;fTSK| z8V^`C149V&W+B1-%#6&FFNv6O&ESRzCooSI5;X@3dWqTt$u2N?3P`d{<`T1G`oTBZ zOU#~;b#fPw!y!2N6p+I<nM>TBgAJnpz~n%2b50E|2rqZ?L?G{kAcR*wIgm{r0QpHO AO#lD@ delta 838 zcmZ9IO=uHQ5XWctZPINM%9`C$P3_y=wlrHm8t`B%NV1JRcr&&+grYQSAXFs9FA(e@ z#IuK#ms7!mo|2rDTm%W`;?aW_k>aT!l%5JPU?`!^W;gWF2Q%~L_n(=^y!O@Oc*PQ* zYM-vmlM(@_<N<d3J74O30=u9r(!&@j9>t~NR?WWNSr_UZ0*${!Xgmqqt*#2aE)g4w zY0&Qh$jG)q-5HO-?m1{Vv=rE_JjPj!fVL{nP}Eu}d6r5F=pYMvzCv{Ktx(dzGAIC4 z%Z1un?xehCjMknDI22Y4x&SdMqnYvoH7{E9y$CoEsv_zR>NZ*mwG?V^d<`(~s&?-v zzFGw2hp{`w9BQ5Qm3n{YTdhqte}a;rfD6bEg9iO^dOF$6kaxkbfV1(K7!~$RQUliT zHnWJg2nb+EUd=Txz&)R*rDk+2E`*(z&i0K0I4>S=7uelUmi-B-&5xna;w1%t$vrA| z_(KM{#>(T9r3|M=2i$X6pWni+DULtjxchy>ljHdG5Mtco_+^e)Jzjz-d|;jv+J1w} zV;uj@alU@|G3VEt^LL#%x3=YTx1PZ5vlo_qVR|5(@if=qUc<hWk(vkNUx^^G50RT= zzkHmQ*g<3oVN^|`-x&Bk^Z~Z7CPeE3i)u+B$TqZuxU8~0Oh(wgmXt@lvB%7uSQ^cS SyzDh|F#D%^*(-KGp#KMbNP{Q< diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/sound_cf2.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/sound_cf2.o index 7adbba040211ff555d568e44530e7eb26f887fe3..de37641d302ba66b4683fcc78ac5e97a6cf2e19c 100644 GIT binary patch delta 1724 zcmZ8gO-NKx6h8Mo#U^YT8=r4RCuaPeNy(qARH|u`=*KphZ6Z;}KNKtnEl^s_1QrEB z#<4{Z5z(S(krqMjlr|MDYEjfG3m4fYH$_2F_uO}`yyn3D&N<&b_q+F<d*Ab;3vJV} zSf&)#ETN(VYy>YXnBDKf5%aAc*Agl05!Zzme~1o=ZAORXh57F%Tkrol_v{{(%hfXr zUVLOUZfQ-lfC)PmMdnySj${$c)2sn7og>F56RM{Gt_}2}*K884c))CXJZm-=q~)wK zOQHb+e4O{Qk1(I%ypw$u^GlrPv){`6D(70ifqA)wvSr8Nx58jvT*bNAo@3!nt5C!r z&skw1;`pYhTVjK48>@hAc31GHtQ3&5c1jk5zqn}Io;;b-YykHKqCrPB&)LU?emozj zld^LGTa@4n8CPRL&=!q^!97xAlT=w{=_y`$P}Lk!*rhN<n7+XE8QE$w-G{5pPiOJB zn7_@u?hlNQo;}^)-8Z<cwht;M;LPyI8HYPQd}?3}#)roSPDAfxDmgw5ql1HRYG7ov zf6|j0Nlwb?ihfKLKg4*+F2s_H9({{`Y!BJk9P)_(CPQHy3i;C8or8j3o+QdKxn_>7 zEIz|L)telX)19GuH-Cj|LRtK*!>1v8;wdjEmJ4b*Cij}-?E3f2XV)(=uMetQyZoO{ z2gn!V*cbNMLi+6zU&l4%@?}m&8)yy6eb^ATMGs-i4A+!M@BWxqF5a#An|VLBgrn&I zzY1DSe~h*e^R%;mVKf(U@f7NNk1<bo<L0-!c(=}Ohff1-yiM;a{eE6Re4~r+bn*H@ z(X{>zbc^(XrntUH>QL)6uYV7xULHyJb;iJ#k*c7+iU98|_=5mFrF8<ZMd7f*8wy`2 z{H1V98P%Lncv<1R!j-bR!%M8#EEUPLaz<qUN3(dQVI2olPc8IevfQ6bQ2-~)Yc^99 zk%KIu(9xz3E5t>vjp2v#8nvn(Jry5~y9R!(*tve9*jdqIVs+(CbJ+l#vn-sbjCoeM zgF|?~vS}^bg)5a!q8>}D_8Nx@u(v91yx)v>q?_G@pQSq#!Ln#v#4s7%YhCg?@`+r> hZ;-AQpG0ds&$+=5a3$L0Sy$@JPhfkYAAd*l{{cg@%0>VH delta 2359 zcmZ{mVN6?96vyv<k4-Sjpgj88(v`MU1Tn%G1BPVl78A!lRhf%ABa{`jNreK{pj%R0 zNF;u0JtP{VNioKZWty2KW*D=S=?6Y)Vl**J28P6a@PlMCei7q2_niyRX1htxIrn$| z_ug~wyYE5y<XWQ8=39t~ofcP7T<jCIqL|3$x6fT)-Zn*13Q>p%QM@xOmo1DJ4N+V- ztxF9U&tQzh7L7sS(K^bF)ruA368UH#{#MfC^fyfL*k}~{UZ+3mjj!YbPTXvXsmnr~ zLjB5};bZN~+vjdv#7Qg?MfT2l#Ch2y)}N>!#Q`YT$rrDEB13Rm4x_y!hZ{p;<*zfx zG5y`evN`fI)lm+C$2i!2A%0kx;?Sy`dp3^0WUI5Xfjg<fA5}MxJ01TNCX7CL0X{cQ z2D9nh+1GH6nOt%#ok_nvK8+o0)03IZ)jy2EdYOVHtNHzC6?|`5`4FZIAw^b+grFTz zYr!A!Fdh@NmmDYB(G#Cz{t)vn<^|?hpK3kKOUyT!lQYF$xMkI2DOc}WK`EP{-aCSJ z%4-|@B)sQ++5b1nq^J^gJWNmfFG$-?SK*|T^;KkRnFlMl%{<JUYZ4*mu?l@F^EQas zk7AjPLOj5dUDpjsyOWM{(YE9OEZd!O2)1lnKBw%6vS*dekoCWbvwE=Z0zOA-^Ntg9 zN;9wQ2g)v!9k|Z=u;~c(k*_iDs^GsckDKs~FXWk-d}AVYD*ZZMgjh=C(wQ9m?rVk` z|Cb?kSJEkUH_$m(hZG~POpi~&*Zx6&X7bgi$8)EX(?coY#6uG~ksO<WE&sdv+#7I3 z{bZ=dDkuhQSq-ZJ8w!DHSPRraIZ&M^T?g-$TpP!Y6?~RC>D>o@-lcbQeS%tF&ANsE z>!U&^3a$m*g)dU!`42hUgv)nxOs>SSUPf>KGv>4nDogV#%q!<9yZAwl$^GEOc|il* ziJL4UPA`;hcR2_kKcpdg3;Wb6d6+qEfG>^G#hB9uOp#Yina4R1tQe5E4}YF{<-*zf z=x6VxPvO#YoY0l(hcsU?k>(5cnh597pCc-$cXwanGSmlcc?FIIZ72nOLp}U1(h0jy zGUMXz@gFm%`g9F6eF>I=cK(`cRKIK0Z(XD4qJ%kDc5x0>W{o@aT-^L87kAHd)8Wnq zI?R)k+vEYXy#W{h$Hkv?as8>$+Y56p#<#}H+tyrvf*d`5p!Avam~dl%t6x6`{boqs zPzhwHQ<mU>vPor&%C0KArEH{`G|wpej<R1VyV2ZvKwp%8oRONISzmR1Q#H@Rv2eqF zI<zjO-+c(AAl?sC;f_5N#bGII`(vz2u-Cd1@FVLIAS1Vor%d=Q()*x~|LCk$K{VQH z&YJ?ZtVYO2+iD7Ydb6+;?c3>{fsJUN{1f~wM~!L^yx4NYSP#QT=&}v)E4oAr1Y$?z pZFnJewDAP~OGEAU9>+h7t{c9Hb<}hP9I^=;u|A_N27yOf{{!amE5ZN( diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/stabilizer.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/stabilizer.o index b801696e1ce13bd23385ee7ab54a8f47aaa8d113..a8ffbc684256fd5fd961b599349a2c64d590f739 100644 GIT binary patch literal 12984 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 literal 17912 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 JzDy2L{Wss+zzYBX diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/system.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/system.o index 280cc8eaad2b005f8d86bbf4c36a267b6e39d8d2..407d40b2d5c67f9aaa162e963369f4be6155618f 100644 GIT binary patch literal 11904 zcmd6tZ)_aJ6~M=K2qrN!Ax>*S+N|3^9ZC+{4J8htJty(Ma!HJRkfcC;>$`P)_1*1d zcQ4pUBwUoDNL7&oF7<~Xj6|gbp{i=B2vSQ7O)Dg*>Y~!3DwU!ZRgqe?X$ciU1oyq! z_wF9+8!DuJ=va62<~MKNynQn}yEEqpyAs{CH8qM;je1^HN=%iC-y~!$#??x-LM>Hl z>I(Qkn<>Ckzf|hj_u<nFA1EK&t|kZS)a2{6?UMsgZoGWx#gmuo)Umght4pgu->+52 zQng-(s#Ui_{q)EESYSU@+urf^^7y68hh9E0S2y&#wN~95{JDJSXD7ktl<sq|=Hxr8 z)TPxb-hutBTBEMT9DG=Yc_WpdtX2CJ$V-~y2Q$~j557IvdGcw<&t3WCb?>agetur= zN83JhT3?gCPPo<@_&~%ig&#G2`Or%zK(7&fLVws7yngft`)-EoQ2G<bAXSU))imcQ zf7EB~8s*horIM^ug7!EjI1cCPRzJfWuF;!p4E3;0YE?y!Ut5u_l@%F=S=&YZbJtYl zxvMMkY(qt!Twak=%PMl5{6jnOB^5pg^2RIFM)WrYe$(8cnCQ8s$7_z_gF1LUoTH3w z|5T@*LB{QoLrfpV{DXysPhqaF;ol4TdVT^d+9&HgrBpIn*9d(~!+d>mX}k6ZZNa=v zVyw$CeoxQyX>~aM7}}a#>UCHP3ma3QgZ7%k`vUw@)31|HIQEltZNCyeH3DP(9~t;b z1D`eU?-}?b2L3GrKWyN>fq%omZQvL?8JoSpD)(>o^<qw`TTv&j?=_qYUI$$BM!cus z{(IDicw@{l&U{~D8ShPAE1<3s`?Zwn;B^BStYh(x6xe5(>#E(qxPI|HTzWY1!bO;a zYFRi3zFWKc)zdFqe|-h!(u3eDt|M~&2p(>D0s5G(RtJ9RG`M##*|kF{$TwS^!)__C z0@w0N1uJm;z_+pm%b)NACm&14a1qmbA+hf5?(9q4kCb@YEsSLM4d>kS*oP{)-Va>Q z-si|VZ7=QS^AfT?a=Vamyh>%*e_#)1bJ>HULUZsqo428pJMA1aOxk{RKQhiD2SdAV zsgSAkRlcsg6Ll|)!vl7Z9?iJ>cDi2P&J6~(7ks!i$7Q6`_Z=_zZ+b<?@e*#@hD)=9 ztXmMqw10z6ZbXlZRkXoirg>TDN7(a->!qEH9wq9x+jAUi)Uk`3ts64d@B|ELI9f`< z5aQ)2+siu{$YE%TLkzL32OV<g5@$lc?ocV+NvD^`wwS0LOpvggE|w~s3t`p&)%Q0I z-YhZjNdq_8`MCNigMAY=*;hT=wr#drdUoDzC0#d{9<|{PhC#D}QOD}sQ1sl9Yz`zZ zJ(>-ibWrjft0UIFp}n=OBi7b#wZMef08;Dv^~hsw7S^=2w&QB`5ee6mCF-9G)l}-L zzVRtl2Y=O49ayTC>J+>QMp8JR7xSyN9<OqhMk_$91%Fzps)by*9(axLhg*jB7yHw! z^(%a`A?)K0;#_7s+lhaZ^q3D4e<;H5BYuQ<r6-IVycI`M=;va7NZYA!e2L~%r><nN zoQHN6^T$D>M(FpJTcAHziBc$rb{6xew4DlX6)o%3a#50Y7V{ryI~AT1E$dV``U0sJ zp>VC3hurV0z;RAQ(;oq#KI>&j;XLHk^e-AXc3Dk-nSrk|@U;ehi-F&6;N1qk)4=x{ zc*?-X415we#&ee9i1QoMw+;G_8~76je!{?i3|x;p<d|*_Gj-aa{|4}t>R$`>q{sQ6 z4f^jGcx|m=+zouCfv+|2n+*I`1HZ$-yA3>P;5h>?8Tcax{)B=5!oYuR;J-KUzZm%6 z4g3QGUk1;IYWMFd18+9)Rs-)f@VgBBUIR}X_#p#-%)n0=`11z-l7YW!;D0die;D|C z27U!R5UY(#yMf<h;EsW3f#bT7f*eyye=9X%(EkqU&yhYow$*Xs^TeCT&NIX>5FaIe z8p_qK>o*2YFY2+hT9;Al#;J%qA9}TS{lN(z-|XQP9Wm?`(qmgoBO{KdvVLD78${pn z%dhxBHa)g$Bw^$G|8Cmq3^=|M#BS?oYg19nXq^lX4dvW@x>q$cRJ1)i?+@W-pj@Es zMVKY*QXxI6#?inw&w>8HN$8v|M*CRuhjZD&Sm^JBpK$GrmNU+9X`hzTUQi4Lx8S=u zhh^T8>N4#>wfunVjX9nc?MzzdIVa;g`?Xli>uk7m5Vn~iiR{iaq`*RiRM<F)Vll6? zum>%McC;8a(R(&E)RWk?wKFlatGj!!D>;<x+?wbbQfa%Ot9O(FXIzcnRdPyBk5h2G zY<kcsWEAf^wFl5G=Yvk5vM{1|`%XHU&BF-$4#dLqx0ZaBZBJ*M16mdLzld;utwDLC ztxIqP(QS0OSy||Df&piLDeF0zF4l+LAaBg8=_T9;`U-*L!PIjKX=lLBWZfNZ#!)`* zyLAiLY3m$L5^xOrOR&MVJ>?X=Y#|r{hsy^HVJO1`1uf$>lm&fiKq~B#E>^iV%`qgQ zKKi01@I~hwZLxdTJiT~VuX%JAuc5v~7@sb<@zQw9?H__|{sD((%|NN3SpfdgR(rhP z^#X`8ZsL1k4?hU!9V(nr3D+&E19-b^cXIZGD(36}?%Mn|9iINt2|o*m2nl-vj&nL8 z;)R0kcY4mYoa;MfWpKtkAmARl(rv?LF{5_0C+S|?ZD)gU=7zI!(8=4yQP*>l_85$# zUS+^A91uXWu-FG(W9dL=v6utD@L;1alXH4qcPzZ;;Ubf;)NF&u2dZ!P_MV{uCkHpU z1~7?bioPGy@~M!sjQafEhFtCrd0j>hkNomJkk{PRk@q<`lhp~iw9o4}a%q2!(3kf4 zz4JQI{|xD1wuR)V|8e5ceiOv62RjzYnDvv4yjk$1;GY$IkKmsZoZrjQ&N{(ULjMNA zGlJhJI6u$O&gTWs3H=tqi-NBgJP`aQ!N&#vg5ZY*=a?gUnmEUq_vg<M|0MW{<IDUM zar8e%GG=omBfo`Y%w7?^Rq%Pi+XRPK3!TuPFACm7yaV!$f?LF~UwIVMLLBGSmxTTn z;!*qCiKCs{gnqx^n*_%nDKMcv{wTp|4{`K!GegMl6Z*Fco)Y>z=dn6t&>t0it+105 z9M4)f6$Sq?L&yWczasd!;BmnZ3*IUCq~KcxKO*=x!Qn>&oiJ|O1)mnYOYj-u7|(9O zj}ymn#C3+(wOQi4{xHXVFedD`ClvMfvx09B{FLCmf}at*Pw;uczbg1y!S59Oyx_cc zVf979cL;sGC_@?j-zj(lE~b!>?+Qiz-6S}#fmpFl@VkV5tKjg1XgO^W9M9x9C5UtU zIlleGqvM79W=uRTtiMOtm*bKW_Hq5;^T7;pUYD4U3Ont(r|_#NIIsCw6A(u~?-u&w zLjNAY4-5U>f=?Rsj|k4s6l`{sILGZx8t*A#U(R#*-BTxy8|%*q`!a6F1>YMs)!$DG z{x!j$75rYoPYKS?KCGT2&i?cIb%uC!++QKi{<HpT!oKu>UT`_z&JyQ-k5b&u5s&u! z7IE&E_0J3YvfsZ6`#9e?T@ZF8e^=O%>&6n;mt#VI?hi%%-9Q}gQ#r311^>FxUn962 zFFu!#UhmDM&+(a~_~7{pCXNI1jl#Z+!zRJyeH0g5J|7c;f9Uy0oc-BE{_G(h^*=?N z{bc=&urK}0MeJK-zi6;O9<k5*hYj|RMC{j-{i6o^QxW^D4?lwI6n*X-kJ!Hus;OCn zeLR1{#PMPMXASnBi`eJ)uu}&6a}oQjf5u?{wTS&6hVH3(gZ(!n_F4a|!Twtj`!i(! zyutp3h<(<-Xt4i&#Qr4N=gmxXe%8~?&+%vd2IA52Z6wa~f0XPu5s%upBKBE-ox%Ri z5&OMlztv!WQ^Y>&Z!y^Kjo5D``-zAh=KTgcIbnxHZK){iNPdJ07*DzGO%ca<%6-8M zag3+j7t9JfDe@h&pAyG?f!r_53HvlPbgMJO@qI(`d4v9M4f<z=K8pOi<~gA+`TG%l z?F@d=rW)rVspzVD;uyC~Sy`zj!R7NMF1RD~>q*9cO+=M<A;)CtZ}_c~xT5D@i{LUo z{48ModeV>D?<XF$zsI28WYD*WOMfsv{C*hqr<L^M!hh7~ap@Nv;}9o(74s+ZaGD2s z;Dz}pOCB6L#o%NzP_c|1*eW*c`zq$SSU~l**d`TAr}H63WjGB6d#HpZeIOje^I%yH zPm7=-oZ~rg5cI!E7MQ`IT^cbLr}7?}A6&hH1<LXN0x({2Ds$G`6iWTn;2J1mKRoVK zt!^YP=M1)-p?<NAOwlr)VW7=u`&nv#v_ZD6^v@K}9MGnG$H6*oZ}WH~gv9={A8}wP zNBgfQ#VM$hiQ6;7y<N5TGo;wdij+s&V|}&w&$NUMQq&IPe<gglJ;xv4^{e%Njucy| zJ!jmW%lHmkt^aqae{PTc<9{`9d+vV>ShfCF(7!;Wpk5|!&uj#QYW=s+AsNRX`(F+p zZqNNs0K@*-PY`t~QvY%<gcYcZN#>C$qU-0W{S@V&0Qzb8MEl3;=-fdA@PENNy@eMi X68Fn!B?#5ppIRSkJj9BWN8A4gAaX2Y literal 12128 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/usddeck.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/usddeck.o index 6b50c3cd43edd195c03648adf2a56c0401c2ff2c..d61346ea057789eeede12a04299f619e26d2fc3f 100644 GIT binary patch literal 11344 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 literal 13376 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/vl53l1_api.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/vl53l1_api.o index 3f910fdffa068840202ec4bfc562458c8970d8cd..e334a4d7d5067376b3434ecd4e5a3ad99c0c7af5 100644 GIT binary patch delta 4426 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 delta 4956 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 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/zranger.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/zranger.o index bd24ca0092ba73c6c374841bc6ae4214b3bb302b..526da1c9f94964adea3a848358d3c9cdb5783396 100644 GIT binary patch delta 895 zcmZ9JO=uHQ5Xa}e-6Wf)n~f%ElD6PR0u3s(3Qf(SVH-VI^k6>_!9cQ@pry7*BSq|? ztMpJkbs51RJ*X#h5ygvML~>G(LOti`xxLs!z}d~)P<G(GnfIUH%$wc!S8t{F^4n<z z24=XC0Wr|vyHx#iMwbq})!X{k?nz)DEwOeSV9(@6G0R~(L2-?P{gfNWXTe$o9c*gz z(xP(!tlw8@F=8b0Spb_~B8Kuhu~b(q9xctadt06N{tKNVoeHvG6it9>paO@1{soD5 zoM(t}EloQE8N6@NabBL`Zvmgln`|79<;jcZ2surVXR-(iLXU}aUHCH21yby`yVu<P zfwN~G3*Hi(F8q#@<*xw`gA=)x=KT7~Bd9kvp;~=tZkTJ$YQ1rH6`m}b>-QQP%Vu*G zqskS$rCg@@Y$dhe^%<cNz1f`BdC@;k`iO`fcR|ESA3r7ZBK}k+whiw@6us2IZivX~ z8XTwq%OZBVp42NsA0s_;g7^NGe`>4G;49_S?2h35lkN)LU%M~#QMzjk)yO1E;%p?v zMsb111B}!Nu0^gh`201ZG5!Yd*KlE|7U-AVXE>x5SeM`wPDwIW)LghLTITV&I>Wnw z9ks+`40*J~e+01{ElJlH;3qkWt!SRdLfE0qO#-wM&xf$AmBKB$*s(j9mEyRs<&yt| i@`d*^QE~}9(9VZHiWmIgvg5H_csJB%Ubsp{9sUnyJ%_yj literal 4200 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 G#QzH`)tLAI diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/zranger2.o b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/uart/build/zranger2.o index 78fad7ca3378b8c09a6d1e575e66c2ec07ea5443..f0d6f5bd68a43db2c0b148e8af634a1d5bb18866 100644 GIT binary patch delta 917 zcmZ9K&ubGw6vt;~H$OJrB<p6AF^#cl5Dlr2L?kqq5V4{M!IH+aNi`5uu-Ynx2Fy{= zL)X`X2SF<$jr5>Yq=zCw5WFfXUhQ9?^duPYO*0Ea12f<6e!g$s439i0{?4xESTXG8 zj~52ol^+us?Yp;zD<AqpjktSrv>zj6waIFg9wDdq=FaqoD<9ok>1K_QMvvA0Qj8}F zaS0)7!VBgjy|04JplZ0-sa{>=8Pcma8L7xN8{%5EhsUwj+3K=yKIjAw!z`{rzz^?( zd76Y@!Sn1DfxK~#reWPE&?)$0@X|D%u?Zy>s`%+6A?Hv9&&cnmQtLoN{Bb}BJ><{@ z@j<)$`@{Vm#Lk`(u+0KoHc#k{*5VCVG%t-U3wQQTyS3B?Es}*?Bu7ueWQ5-@%GL=S zgLl0^Gm^)UC#4s1LE#~VUzEOr_2UYkl|GJKt#6EYo}@5HDF>R;i$+Hjehm&qd8s3b zXy;ebo6?JJX@xJq?I=$!Ng{f3CGEm`l(!x!XOAlBn)C-p^HTDIFWit^j7+@E8|@~P zEFRvL>9}|ywCw_H+Gg0Rp-2<(hs9uE>omOe$-YY24*p}Da_F-$I%+Yv?v&|2a04mW zagL#T>u}h1EO>7CAriM4p^%MN*)oNBl$;M<p!^(zU6iH|vWY6om@tph!3<^Egk6+3 lnDJ`d@<ytSZj7QN;4YsES@I3<2)yQH<B2&c0O>{{cN*mP7ym literal 6152 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 M+tVMwQYz#B0m_&eRR910 diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/empty_math.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/empty_math.h new file mode 100644 index 000000000..0bc261b6e --- /dev/null +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/empty_math.h @@ -0,0 +1,24 @@ +#ifndef EMPTY_MATH_H +#define EMPTY_MATH_H + +float cosf(float x) +{ + return 0; +} + +float sinf(float x) +{ + return 0; +} + +float fmaxf(float a, float b) +{ + return 0; +} + +float sqrtf(float x) +{ + return 0; +} + +#endif \ No newline at end of file diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/eprintf.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/eprintf.c index c7ba68b0e..2a9d110b7 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/eprintf.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/eprintf.c @@ -28,7 +28,8 @@ #include <stdarg.h> #include <stdint.h> #include <stdbool.h> -#include <ctype.h> +//COMMENTED FIRMWARE +//#include <ctype.h> static const char digit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; @@ -154,153 +155,153 @@ static int itoa16(putc_t putcf, uint64_t num, int width, char padChar) static int handleLongLong(putc_t putcf, const char** fmt, unsigned long long int val, int width, char padChar) { int len = 0; - - switch(*((*fmt)++)) - { - case 'i': - case 'd': - len = itoa10(putcf, (long long int)val, 0); - break; - case 'u': - len = itoa10Unsigned(putcf, val); - break; - case 'x': - case 'X': - len = itoa16(putcf, val, width, padChar); - break; - default: - // Nothing here - break; - } - - return len; -} - -static int handleLong(putc_t putcf, const char** fmt, unsigned long int val, int width, char padChar) -{ - int len = 0; - - switch(*((*fmt)++)) - { - case 'i': - case 'd': - len = itoa10(putcf, (long int)val, 0); - break; - case 'u': - len = itoa10Unsigned(putcf, val); - break; - case 'x': - case 'X': - len = itoa16(putcf, val, width, padChar); - break; - default: - // Nothing here - break; - } - - return len; -} - -int evprintf(putc_t putcf, const char * fmt, va_list ap) -{ - int len=0; - float num; - char* str; - int precision; - int width; - char padChar; - - while (*fmt) - { - if (*fmt == '%') - { - precision = 6; - padChar = ' '; - width = 0; - - fmt++; - while ('0' == *fmt) - { - padChar = '0'; - fmt++; - } - - while(isdigit((unsigned)*fmt)) - { - width *= 10; - width += *fmt - '0'; - fmt++; - } - - while (!isalpha((unsigned) *fmt)) - { - if (*fmt == '.') - { - fmt++; - if (isdigit((unsigned)*fmt)) - { - precision = *fmt - '0'; - fmt++; - } - } - } - switch (*fmt++) - { - case 'i': - case 'd': - len += itoa10(putcf, va_arg(ap, int), 0); - break; - case 'u': - len += itoa10Unsigned(putcf, va_arg(ap, unsigned int)); - break; - case 'x': - case 'X': - len += itoa16(putcf, va_arg(ap, unsigned int), width, padChar); - break; - case 'l': - // Look ahead for ll - if (*fmt == 'l') { - fmt++; - len += handleLongLong(putcf, &fmt, va_arg(ap, unsigned long long int), width, padChar); - } else { - len += handleLong(putcf, &fmt, va_arg(ap, unsigned long int), width, padChar); - } - - break; - case 'f': - num = va_arg(ap, double); - if(num<0) - { - putcf('-'); - num = -num; - len++; - } - len += itoa10(putcf, (int)num, 0); - putcf('.'); len++; - len += itoa10(putcf, (num - (int)num) * power(10,precision), precision); - break; - case 's': - str = va_arg(ap, char* ); - while(*str) - { - putcf(*str++); - len++; - } - break; - case 'c': - putcf((char)va_arg(ap, int)); - len++; - break; - default: - break; - } - } - else - { - putcf(*fmt++); - len++; - } - } + //COMMENTED FIRMWARE +// switch(*((*fmt)++)) +// { +// case 'i': +// case 'd': +// len = itoa10(putcf, (long long int)val, 0); +// break; +// case 'u': +// len = itoa10Unsigned(putcf, val); +// break; +// case 'x': +// case 'X': +// len = itoa16(putcf, val, width, padChar); +// break; +// default: +// // Nothing here +// break; +// } + +// return len; +// } + +// static int handleLong(putc_t putcf, const char** fmt, unsigned long int val, int width, char padChar) +// { +// int len = 0; + +// switch(*((*fmt)++)) +// { +// case 'i': +// case 'd': +// len = itoa10(putcf, (long int)val, 0); +// break; +// case 'u': +// len = itoa10Unsigned(putcf, val); +// break; +// case 'x': +// case 'X': +// len = itoa16(putcf, val, width, padChar); +// break; +// default: +// // Nothing here +// break; +// } + +// return len; +// } + +// int evprintf(putc_t putcf, const char * fmt, va_list ap) +// { +// int len=0; +// float num; +// char* str; +// int precision; +// int width; +// char padChar; + +// while (*fmt) +// { +// if (*fmt == '%') +// { +// precision = 6; +// padChar = ' '; +// width = 0; + +// fmt++; +// while ('0' == *fmt) +// { +// padChar = '0'; +// fmt++; +// } + +// while(isdigit((unsigned)*fmt)) +// { +// width *= 10; +// width += *fmt - '0'; +// fmt++; +// } + +// while (!isalpha((unsigned) *fmt)) +// { +// if (*fmt == '.') +// { +// fmt++; +// if (isdigit((unsigned)*fmt)) +// { +// precision = *fmt - '0'; +// fmt++; +// } +// } +// } +// switch (*fmt++) +// { +// case 'i': +// case 'd': +// len += itoa10(putcf, va_arg(ap, int), 0); +// break; +// case 'u': +// len += itoa10Unsigned(putcf, va_arg(ap, unsigned int)); +// break; +// case 'x': +// case 'X': +// len += itoa16(putcf, va_arg(ap, unsigned int), width, padChar); +// break; +// case 'l': +// // Look ahead for ll +// if (*fmt == 'l') { +// fmt++; +// len += handleLongLong(putcf, &fmt, va_arg(ap, unsigned long long int), width, padChar); +// } else { +// len += handleLong(putcf, &fmt, va_arg(ap, unsigned long int), width, padChar); +// } + +// break; +// case 'f': +// num = va_arg(ap, double); +// if(num<0) +// { +// putcf('-'); +// num = -num; +// len++; +// } +// len += itoa10(putcf, (int)num, 0); +// putcf('.'); len++; +// len += itoa10(putcf, (num - (int)num) * power(10,precision), precision); +// break; +// case 's': +// str = va_arg(ap, char* ); +// while(*str) +// { +// putcf(*str++); +// len++; +// } +// break; +// case 'c': +// putcf((char)va_arg(ap, int)); +// len++; +// break; +// default: +// break; +// } +// } +// else +// { +// putcf(*fmt++); +// len++; +// } +// } return len; } @@ -309,10 +310,10 @@ int eprintf(putc_t putcf, const char * fmt, ...) { va_list ap; int len; - - va_start(ap, fmt); - len = evprintf(putcf, fmt, ap); - va_end(ap); + //COMMENTED FIRMWARE + // va_start(ap, fmt); + // len = evprintf(putcf, fmt, ap); + // va_end(ap); return len; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/filter.h b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/filter.h index fcb53b6e1..2e811c160 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/filter.h +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/filter.h @@ -101,13 +101,14 @@ struct SecondOrderLowPass { static inline void init_second_order_low_pass(struct SecondOrderLowPass *filter, float tau, float Q, float sample_time, float value) { - float K = tanf(sample_time / (2.0f * tau)); - float poly = K * K + K / Q + 1.0f; - filter->a[0] = 2.0f * (K * K - 1.0f) / poly; - filter->a[1] = (K * K - K / Q + 1.0f) / poly; - filter->b[0] = K * K / poly; - filter->b[1] = 2.0f * filter->b[0]; - filter->i[0] = filter->i[1] = filter->o[0] = filter->o[1] = value; + //COMMENTED FIRMWARE + // float K = tanf(sample_time / (2.0f * tau)); + // float poly = K * K + K / Q + 1.0f; + // filter->a[0] = 2.0f * (K * K - 1.0f) / poly; + // filter->a[1] = (K * K - K / Q + 1.0f) / poly; + // filter->b[0] = K * K / poly; + // filter->b[1] = 2.0f * filter->b[0]; + // filter->i[0] = filter->i[1] = filter->o[0] = filter->o[1] = value; } /** Update second order low pass filter state with a new value. diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/lighthouse_geometry.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/lighthouse_geometry.c index 86a6654af..4c7f38bcb 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/lighthouse_geometry.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/lighthouse_geometry.c @@ -57,47 +57,48 @@ static float vec_length(const vec3d vec) { float pow = vec_dot(vec, vec); float res; - arm_sqrt_f32(pow, &res); + //COMMENTED FIRMWARE + // arm_sqrt_f32(pow, &res); return res; } static bool intersect_lines(vec3d orig1, vec3d vec1, vec3d orig2, vec3d vec2, vec3d res, float *dist) { // Algoritm: http://geomalgorithms.com/a07-_distance.html#Distance-between-Lines - - vec3d w0 = {}; - arm_sub_f32(orig1, orig2, w0, vec3d_size); - - float a, b, c, d, e; - arm_dot_prod_f32(vec1, vec1, vec3d_size, &a); - arm_dot_prod_f32(vec1, vec2, vec3d_size, &b); - arm_dot_prod_f32(vec2, vec2, vec3d_size, &c); - arm_dot_prod_f32(vec1, w0, vec3d_size, &d); - arm_dot_prod_f32(vec2, w0, vec3d_size, &e); - - float denom = a * c - b * b; - if (fabsf(denom) < 1e-5f) - return false; - - // Closest point to 2nd line on 1st line - float t1 = (b * e - c * d) / denom; - vec3d pt1 = {}; - arm_scale_f32(vec1, t1, pt1, vec3d_size); - arm_add_f32(pt1, orig1, pt1, vec3d_size); - - // Closest point to 1st line on 2nd line - float t2 = (a * e - b * d) / denom; - vec3d pt2 = {}; - arm_scale_f32(vec2, t2, pt2, vec3d_size); - arm_add_f32(pt2, orig2, pt2, vec3d_size); - - // Result is in the middle - vec3d tmp = {}; - arm_add_f32(pt1, pt2, tmp, vec3d_size); - arm_scale_f32(tmp, 0.5f, res, vec3d_size); - - // Dist is distance between pt1 and pt2 - arm_sub_f32(pt1, pt2, tmp, vec3d_size); - *dist = vec_length(tmp); + //COMMENTED FIRMWARE + // vec3d w0 = {}; + // arm_sub_f32(orig1, orig2, w0, vec3d_size); + + // float a, b, c, d, e; + // arm_dot_prod_f32(vec1, vec1, vec3d_size, &a); + // arm_dot_prod_f32(vec1, vec2, vec3d_size, &b); + // arm_dot_prod_f32(vec2, vec2, vec3d_size, &c); + // arm_dot_prod_f32(vec1, w0, vec3d_size, &d); + // arm_dot_prod_f32(vec2, w0, vec3d_size, &e); + + // float denom = a * c - b * b; + // if (fabsf(denom) < 1e-5f) + // return false; + + // // Closest point to 2nd line on 1st line + // float t1 = (b * e - c * d) / denom; + // vec3d pt1 = {}; + // arm_scale_f32(vec1, t1, pt1, vec3d_size); + // arm_add_f32(pt1, orig1, pt1, vec3d_size); + + // // Closest point to 1st line on 2nd line + // float t2 = (a * e - b * d) / denom; + // vec3d pt2 = {}; + // arm_scale_f32(vec2, t2, pt2, vec3d_size); + // arm_add_f32(pt2, orig2, pt2, vec3d_size); + + // // Result is in the middle + // vec3d tmp = {}; + // arm_add_f32(pt1, pt2, tmp, vec3d_size); + // arm_scale_f32(tmp, 0.5f, res, vec3d_size); + + // // Dist is distance between pt1 and pt2 + // arm_sub_f32(pt1, pt2, tmp, vec3d_size); + // *dist = vec_length(tmp); return true; } @@ -116,14 +117,15 @@ bool lighthouseGeometryGetPositionFromRayIntersection(const baseStationGeometry_ } void lighthouseGeometryGetBaseStationPosition(const baseStationGeometry_t* bs, vec3d baseStationPos) { - // TODO: Make geometry adjustments within base station. - vec3d rotated_origin_delta = {}; - //vec3d base_origin_delta = {-0.025f, -0.025f, 0.f}; // Rotors are slightly off center in base station. - // arm_matrix_instance_f32 origin_vec = {3, 1, base_origin_delta}; - // arm_matrix_instance_f32 origin_rotated_vec = {3, 1, rotated_origin_delta}; - // mat_mult(&source_rotation_matrix, &origin_vec, &origin_rotated_vec); - baseStationGeometry_t* bs_unconst = (baseStationGeometry_t*)bs; - arm_add_f32(bs_unconst->origin, rotated_origin_delta, baseStationPos, vec3d_size); + //COMMENTED FIRMWARE + // // TODO: Make geometry adjustments within base station. + // vec3d rotated_origin_delta = {}; + // //vec3d base_origin_delta = {-0.025f, -0.025f, 0.f}; // Rotors are slightly off center in base station. + // // arm_matrix_instance_f32 origin_vec = {3, 1, base_origin_delta}; + // // arm_matrix_instance_f32 origin_rotated_vec = {3, 1, rotated_origin_delta}; + // // mat_mult(&source_rotation_matrix, &origin_vec, &origin_rotated_vec); + // baseStationGeometry_t* bs_unconst = (baseStationGeometry_t*)bs; + // arm_add_f32(bs_unconst->origin, rotated_origin_delta, baseStationPos, vec3d_size); } void lighthouseGeometryGetRay(const baseStationGeometry_t* baseStationGeometry, const float angleH, const float angleV, vec3d ray) { @@ -172,35 +174,36 @@ bool lighthouseGeometryIntersectionPlaneVector(const vec3d linePoint, const vec3 // } bool lighthouseGeometryYawDelta(const vec3d ipv, const vec3d spv, const vec3d n, float* yawDelta) { - float spvn = vec_length(spv); - float ipvn = vec_length(ipv); + //COMMENTED FIRMWARE + // float spvn = vec_length(spv); + // float ipvn = vec_length(ipv); - const float minIntersectionVectorLength = 0.0001f; - if (ipvn < minIntersectionVectorLength) { - return false; - } + // const float minIntersectionVectorLength = 0.0001f; + // if (ipvn < minIntersectionVectorLength) { + // return false; + // } - // Angle between vectors - float a = vec_dot(spv, ipv) / (spvn * ipvn); + // // Angle between vectors + // float a = vec_dot(spv, ipv) / (spvn * ipvn); - // Handle rouding errors - if (a > 1.0f) { - a = 1.0f; - } - if (a < -1.0f) { - a = -1.0f; - } + // // Handle rouding errors + // if (a > 1.0f) { + // a = 1.0f; + // } + // if (a < -1.0f) { + // a = -1.0f; + // } - float delta = acosf(a); + // float delta = acosf(a); - // Figure our the sign of the angle by looking at the cross product of the vectors in relation to the normal - float nt[3]; - vec_cross_product(spv, ipv, nt); + // // Figure our the sign of the angle by looking at the cross product of the vectors in relation to the normal + // float nt[3]; + // vec_cross_product(spv, ipv, nt); - if (vec_dot(n, nt) > 0.0f) { - delta = -delta; - } + // if (vec_dot(n, nt) > 0.0f) { + // delta = -delta; + // } - *yawDelta = delta; + // *yawDelta = delta; return true; } diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v1.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v1.c index 739f0715d..f1ca0320d 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v1.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v1.c @@ -445,47 +445,48 @@ TESTABLE_STATIC bool getSystemSyncTime(const uint32_t syncTimes[], size_t nSyncT // If the samples are wrapping, all samples bellow PULSE_PROCESSOR_TIMESTAMP_MAX/2 will // be pushed by (1<<TIMESTAMP_BITWIDTH) to correct the wrapping bool isWrapping = false; - int wref = syncTimes[0]; - for (size_t i=0; i<nSyncTimes; i++) { - if (abs(wref - (int)syncTimes[i]) > (PULSE_PROCESSOR_TIMESTAMP_MAX/2)) { - isWrapping = true; - } - } - - int32_t differenceSum = 0; - int32_t reference = syncTimes[0] % FRAME_LENGTH; - if (isWrapping && syncTimes[0] < (PULSE_PROCESSOR_TIMESTAMP_MAX/2)) { - reference = (syncTimes[0] + (1<<PULSE_PROCESSOR_TIMESTAMP_BITWIDTH)) % FRAME_LENGTH; - } - - int minDiff = INT32_MAX; - int maxDiff = INT32_MIN; - - for (size_t i=1; i<nSyncTimes; i++) { - int diff; - - if (isWrapping && (syncTimes[i] < (PULSE_PROCESSOR_TIMESTAMP_MAX/2))) { - diff = ((syncTimes[i] + (1<<PULSE_PROCESSOR_TIMESTAMP_BITWIDTH)) % FRAME_LENGTH) - reference; - } else { - diff = (syncTimes[i] % FRAME_LENGTH) - reference; - } - - - if (diff < minDiff) { - minDiff = diff; - } - if (diff > maxDiff) { - maxDiff = diff; - } - - differenceSum += diff; - } - - if ((maxDiff - minDiff) > MAX_FRAME_LENGTH_NOISE) { - return false; - } - - *syncTime = ((int)syncTimes[0] + ((int)differenceSum / (int)nSyncTimes)) & (PULSE_PROCESSOR_TIMESTAMP_MAX); + //COMMENTED FIRMWARE + // int wref = syncTimes[0]; + // for (size_t i=0; i<nSyncTimes; i++) { + // if (abs(wref - (int)syncTimes[i]) > (PULSE_PROCESSOR_TIMESTAMP_MAX/2)) { + // isWrapping = true; + // } + // } + + // int32_t differenceSum = 0; + // int32_t reference = syncTimes[0] % FRAME_LENGTH; + // if (isWrapping && syncTimes[0] < (PULSE_PROCESSOR_TIMESTAMP_MAX/2)) { + // reference = (syncTimes[0] + (1<<PULSE_PROCESSOR_TIMESTAMP_BITWIDTH)) % FRAME_LENGTH; + // } + + // int minDiff = INT32_MAX; + // int maxDiff = INT32_MIN; + + // for (size_t i=1; i<nSyncTimes; i++) { + // int diff; + + // if (isWrapping && (syncTimes[i] < (PULSE_PROCESSOR_TIMESTAMP_MAX/2))) { + // diff = ((syncTimes[i] + (1<<PULSE_PROCESSOR_TIMESTAMP_BITWIDTH)) % FRAME_LENGTH) - reference; + // } else { + // diff = (syncTimes[i] % FRAME_LENGTH) - reference; + // } + + + // if (diff < minDiff) { + // minDiff = diff; + // } + // if (diff > maxDiff) { + // maxDiff = diff; + // } + + // differenceSum += diff; + // } + + // if ((maxDiff - minDiff) > MAX_FRAME_LENGTH_NOISE) { + // return false; + // } + + // *syncTime = ((int)syncTimes[0] + ((int)differenceSum / (int)nSyncTimes)) & (PULSE_PROCESSOR_TIMESTAMP_MAX); return true; diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v2.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v2.c index f5b865ddb..a1e8fe960 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v2.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/lighthouse/pulse_processor_v2.c @@ -232,10 +232,11 @@ static bool processFrame(const pulseProcessorFrame_t* frameData, pulseProcessorV } void pulseProcessorV2ConvertToV1Angles(const float v2Angle1, const float v2Angle2, float* v1Angles) { - const float tant = 0.5773502691896258f; // tan(pi / 6) + //COMMENTED FIRMWARE + // const float tant = 0.5773502691896258f; // tan(pi / 6) - v1Angles[0] = (v2Angle1 + v2Angle2) / 2.0f; - v1Angles[1] = atan2f(sinf(v2Angle2 - v2Angle1), (tant * (cosf(v2Angle1) + cosf(v2Angle2)))); + // v1Angles[0] = (v2Angle1 + v2Angle2) / 2.0f; + // v1Angles[1] = atan2f(sinf(v2Angle2 - v2Angle1), (tant * (cosf(v2Angle1) + cosf(v2Angle2)))); } static void calculateAngles(const pulseProcessorV2SweepBlock_t* latestBlock, const pulseProcessorV2SweepBlock_t* previousBlock, pulseProcessorResult_t* angles) { diff --git a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/num.c b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/num.c index 0b20be6ab..e77a3fff3 100644 --- a/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/num.c +++ b/uboot-compiler/bm_crazyflie/FreeRTOS/Demo/CORTEX_A72_64-bit_Raspberrypi4/utils/src/num.c @@ -102,22 +102,24 @@ uint16_t limitUint16(int32_t value) float constrain(float value, const float minVal, const float maxVal) { - return fminf(maxVal, fmaxf(minVal,value)); + //COMMENTED FIRMWARE + return 0;//fminf(maxVal, fmaxf(minVal,value)); } float deadband(float value, const float threshold) { - if (fabsf(value) < threshold) - { - value = 0; - } - else if (value > 0) - { - value -= threshold; - } - else if (value < 0) - { - value += threshold; - } + //COMMENTED FIRMWARE + // if (fabsf(value) < threshold) + // { + // value = 0; + // } + // else if (value > 0) + // { + // value -= threshold; + // } + // else if (value < 0) + // { + // value += threshold; + // } return value; } -- GitLab