diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d7fc5d..6adab49 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,10 +5,37 @@ stages: variables: BATCH_BUILD: "1" V: "0" - MAKEFLAGS: "-j5 --no-keep-going" - IDF_PATH: "$CI_PROJECT_DIR/esp-idf" IDF_CI_BUILD: "1" +before_script: + # add gitlab ssh key + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64 + - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config + - git --version + - git submodule update --init --recursive --force + +.build_examples_template: &build_examples_template + stage: build + image: espressif/idf:release-v4.4 + tags: + - build + +build_demo_cmake: + <<: *build_examples_template + script: + - idf.py fullclean + - idf.py build + - idf.py fullclean + - idf.py set-target esp32s2 + - idf.py build + - idf.py fullclean + - idf.py set-target esp32s3 + - idf.py build + build_docs: stage: build image: $CI_SPHINX_DOCKER:latest diff --git a/CMakeLists.txt b/CMakeLists.txt index fbd5208..d1d6dc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,8 +4,7 @@ cmake_minimum_required(VERSION 3.5) set(__PROJECT_GROUP_LINK_COMPONENTS ON) -set(PLANE_COMPONENT_DIRS ${PLANE_COMPONENT_DIRS} - "./components/core" +set(PLANE_COMPONENT_DIRS "./components/core" "./components/drivers" "./components/drivers/general" "./components/drivers/i2c_devices" diff --git a/README.md b/README.md index 5b08948..7240b45 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ ### Introduction -**ESP-Drone** is an open source solution based on Espressif ESP32/ESP32-S2 Wi-Fi chip, which can be controlled by a mobile APP or gamepad over **Wi-Fi** connection. ESP-Drone comes with **simple hardware**, **clear and extensible code architecture**, and therefore this project can be used in **STEAM education** and other fields. The main code is ported from **Crazyflie** open source project with **GPL3.0** protocol. +**ESP-Drone** is an open source solution based on Espressif ESP32/ESP32-S2/S3 Wi-Fi chip, which can be controlled by a mobile APP or gamepad over **Wi-Fi** connection. ESP-Drone comes with **simple hardware**, **clear and extensible code architecture**, and therefore this project can be used in **STEAM education** and other fields. The main code is ported from **Crazyflie** open source project with **GPL3.0** protocol. + +> Currently support ESP32、ESP32S2、ESP32S3, please using ESP-IDF [release/v4.4](https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32s2/get-started/index.html) branch as your develop environment ![ESP-Drone](./docs/_static/espdrone_s2_v1_2_2.png) diff --git a/README_cn.md b/README_cn.md index 5eceaae..b0817c8 100644 --- a/README_cn.md +++ b/README_cn.md @@ -5,7 +5,9 @@ ### 简介 -ESP-Drone 是基于乐鑫 ESP32-S2/ESP32 开发的小型无人机解决方案,可使用手机 APP 或游戏手柄通过 Wi-Fi 网络进行连接和控制。目前已支持自稳定飞行、定高飞行、定点飞行等多种模式。该方案硬件结构简单,代码架构清晰完善,方便功能扩展,可用于 STEAM 教育等领域。控制系统代码来自 Crazyflie 开源工程,使用 GPL3.0 开源协议。 +ESP-Drone 是基于乐鑫 ESP32/ESP32-S2/S3 开发的小型无人机解决方案,可使用手机 APP 或游戏手柄通过 Wi-Fi 网络进行连接和控制。目前已支持自稳定飞行、定高飞行、定点飞行等多种模式。该方案硬件结构简单,代码架构清晰完善,方便功能扩展,可用于 STEAM 教育等领域。控制系统代码来自 Crazyflie 开源工程,使用 GPL3.0 开源协议。 + +> 目前已支持 ESP32、ESP32S2、ESP32S3, 请使用 ESP-IDF [release/v4.4](https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32s2/get-started/index.html) 分支 ![ESP-Drone](./docs/_static/espdrone_s2_v1_2_2.png) diff --git a/components/config/component.mk b/components/config/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/config/include/config.h b/components/config/include/config.h index 8c76698..9ef178d 100644 --- a/components/config/include/config.h +++ b/components/config/include/config.h @@ -47,11 +47,17 @@ #define QUAD_FORMATION_X #ifdef CONFIG_TARGET_ESPLANE_V2_S2 - #define TARGET_MCU_ESP32S2 +#ifndef CONFIG_IDF_TARGET_ESP32S2 +#error "ESPLANE_V2 hardware with ESP32S2 onboard" +#endif #elif defined(CONFIG_TARGET_ESPLANE_V1) - #define TARGET_MCU_ESP32 +#ifndef CONFIG_IDF_TARGET_ESP32 +#error "ESPLANE_V1 hardware with ESP32 onboard" +#endif #elif defined(CONFIG_TARGET_ESP32_S2_DRONE_V1_2) - #define TARGET_MCU_ESP32S2 +#ifdef CONFIG_IDF_TARGET_ESP32 +#error "ESP32_S2_DRONE_V1_2 hardware with ESP32S2/S3 onboard" +#endif #endif #ifdef STM32F4XX @@ -147,10 +153,10 @@ #define ESKYLINK_TASK_NAME "ESKYLINK" #define SYSLINK_TASK_NAME "SYSLINK" #define USBLINK_TASK_NAME "USBLINK" -#define WIFILINK_TASK_NAME "WIFILINK" -#define UDP_TX_TASK_NAME "UDP_TX" -#define UDP_RX_TASK_NAME "UDP_RX" -#define UDP_RX2_TASK_NAME "UDP_RX2" +#define WIFILINK_TASK_NAME "WIFILINK" +#define UDP_TX_TASK_NAME "UDP_TX" +#define UDP_RX_TASK_NAME "UDP_RX" +#define UDP_RX2_TASK_NAME "UDP_RX2" #define PROXIMITY_TASK_NAME "PROXIMITY" #define EXTRX_TASK_NAME "EXTRX" #define UART_RX_TASK_NAME "UART" @@ -194,7 +200,7 @@ #define ESKYLINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE) #define SYSLINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE) #define USBLINK_TASK_STACKSIZE (1 * configBASE_STACK_SIZE) -#define WIFILINK_TASK_STACKSIZE (5 * configBASE_STACK_SIZE) +#define WIFILINK_TASK_STACKSIZE (6 * configBASE_STACK_SIZE) #define UDP_TX_TASK_STACKSIZE (2 * configBASE_STACK_SIZE) #define UDP_RX_TASK_STACKSIZE (4 * configBASE_STACK_SIZE) #define UDP_RX2_TASK_STACKSIZE (1 * configBASE_STACK_SIZE) diff --git a/components/core/crazyflie/CMakeLists.txt b/components/core/crazyflie/CMakeLists.txt index fd004fe..8625c59 100644 --- a/components/core/crazyflie/CMakeLists.txt +++ b/components/core/crazyflie/CMakeLists.txt @@ -68,9 +68,14 @@ idf_component_register(SRCS "./hal/src/buzzer.c" "./utils/src/version.c" "./utils/src/rateSupervisor.c" INCLUDE_DIRS "./hal/interface" "./modules/interface" "./utils/interface" - REQUIRES i2c_bus deck mpu6050 ms5611 hmc5883l pmw3901 vl53l1 vl53l0 platform config led eeprom dsp_lib motors wifi adc) + REQUIRES i2c_bus deck mpu6050 ms5611 hmc5883l pmw3901 vl53l1 vl53l0 platform config led eeprom dsp_lib motors wifi adc esp_timer) idf_component_get_property( FREERTOS_ORIG_INCLUDE_PATH freertos ORIG_INCLUDE_PATH) target_include_directories(${COMPONENT_TARGET} PUBLIC "${FREERTOS_ORIG_INCLUDE_PATH}" ) +target_compile_options(${COMPONENT_LIB} PRIVATE "-fno-strict-aliasing" + "-Wno-error=stringop-truncation" + "-Wno-absolute-value" + "-Wno-address-of-packed-member" + "-Wno-stringop-truncation") \ No newline at end of file diff --git a/components/core/crazyflie/hal/interface/pm_esplane.h b/components/core/crazyflie/hal/interface/pm_esplane.h index 33c78e6..f000d00 100644 --- a/components/core/crazyflie/hal/interface/pm_esplane.h +++ b/components/core/crazyflie/hal/interface/pm_esplane.h @@ -28,8 +28,9 @@ #ifndef PM_H_ #define PM_H_ -#include "driver/adc.h" +#include "esp_idf_version.h" #include "syslink.h" +#include "driver/adc.h" //#include "deck.h" #ifndef CRITICAL_LOW_VOLTAGE diff --git a/components/core/crazyflie/hal/src/sensors_mpu6050_hm5883L_ms5611.c b/components/core/crazyflie/hal/src/sensors_mpu6050_hm5883L_ms5611.c index f3d068a..ff9258b 100644 --- a/components/core/crazyflie/hal/src/sensors_mpu6050_hm5883L_ms5611.c +++ b/components/core/crazyflie/hal/src/sensors_mpu6050_hm5883L_ms5611.c @@ -140,9 +140,7 @@ static xQueueHandle barometerDataQueue; STATIC_MEM_QUEUE_ALLOC(barometerDataQueue, 1, sizeof(baro_t)); static xSemaphoreHandle sensorsDataReady; -static StaticSemaphore_t sensorsDataReadyBuffer; static xSemaphoreHandle dataReady; -static StaticSemaphore_t dataReadyBuffer; static bool isInit = false; static sensorData_t sensorData; @@ -168,15 +166,22 @@ static void applyAxis3fLpf(lpf2pData *data, Axis3f *in); static bool isBarometerPresent = false; static bool isMagnetometerPresent = false; +#ifdef SENSORS_ENABLE_RANGE_VL53L1X static bool isVl53l1xPresent = false; +#endif +#ifdef SENSORS_ENABLE_RANGE_VL53L0X static bool isVl53l0xPresent = false; +#endif +#ifdef SENSORS_ENABLE_FLOW_PMW3901 static bool isPmw3901Present = false; - +#endif static bool isMpu6050TestPassed = false; +#ifdef SENSORS_ENABLE_MAG_HM5883L static bool isHmc5883lTestPassed = false; +#endif +#ifdef SENSORS_ENABLE_PRESSURE_MS5611 static bool isMs5611TestPassed = false; -static bool isVl53l1xTestPassed = false; -static bool isPmw3901TestPassed = false; +#endif // Pre-calculated values for accelerometer alignment float cosPitch; @@ -409,7 +414,9 @@ static void sensorsDeviceInit(void) if (mpu6050TestConnection() == true) { DEBUG_PRINTI("MPU6050 I2C connection [OK].\n"); } else { - DEBUG_PRINTW("MPU6050 I2C connection [FAIL].\n"); + DEBUG_PRINTE("MPU6050 I2C connection [FAIL].\n"); + // Please check your hardware ! + assert(0); } mpu6050Reset(); @@ -514,7 +521,6 @@ static void sensorsDeviceInit(void) #endif #ifdef SENSORS_ENABLE_FLOW_PMW3901 - flowdeck2Init(); if (flowdeck2Test() == true) { @@ -525,9 +531,6 @@ static void sensorsDeviceInit(void) //TODO: Should sensor test fail hard if no connection DEBUG_PRINTW("PMW3901 SPI connection [FAIL].\n"); } - - - #endif DEBUG_PRINTI("sensors init done"); @@ -635,17 +638,22 @@ static void sensorsInterruptInit(void) { DEBUG_PRINTD("sensorsInterruptInit \n"); - gpio_config_t io_conf; - //interrupt of rising edge - io_conf.intr_type = GPIO_PIN_INTR_POSEDGE; - //bit mask of the pins - io_conf.pin_bit_mask = (1ULL << GPIO_INTA_MPU6050_IO); - //set as input mode - io_conf.mode = GPIO_MODE_INPUT; - //disable pull-down mode - io_conf.pull_down_en = 0; - //enable pull-up mode - io_conf.pull_up_en = 1; + gpio_config_t io_conf = { + //interrupt of rising edge +#if ESP_IDF_VERSION_MAJOR > 4 + .intr_type = GPIO_INTR_POSEDGE, +#else + .intr_type = GPIO_PIN_INTR_POSEDGE, +#endif + //bit mask of the pins + .pin_bit_mask = (1ULL << GPIO_INTA_MPU6050_IO), + //set as input mode + .mode = GPIO_MODE_INPUT, + //disable pull-down mode + .pull_down_en = 0, + //enable pull-up mode + .pull_up_en = 1, + }; sensorsDataReady = xSemaphoreCreateBinary(); dataReady = xSemaphoreCreateBinary(); gpio_config(&io_conf); @@ -1047,5 +1055,6 @@ PARAM_GROUP_STOP(imu_sensors) PARAM_GROUP_START(imu_tests) PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, mpu6050, &isMpu6050TestPassed) PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, HMC5883L, &isMagnetometerPresent) +PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, pmw3901, &isPmw3901Present) PARAM_ADD(PARAM_UINT8 | PARAM_RONLY, MS5611, &isBarometerPresent) // TODO: Rename MS5611 to LPS25H. Client needs to be updated at the same time. PARAM_GROUP_STOP(imu_tests) diff --git a/components/core/crazyflie/hal/src/wifilink.c b/components/core/crazyflie/hal/src/wifilink.c index 8472616..a03747d 100644 --- a/components/core/crazyflie/hal/src/wifilink.c +++ b/components/core/crazyflie/hal/src/wifilink.c @@ -63,9 +63,6 @@ static int wifilinkReceiveCRTPPacket(CRTPPacket *p); STATIC_MEM_TASK_ALLOC(wifilinkTask, USBLINK_TASK_STACKSIZE); -static float rch, pch, ych; -static uint16_t tch; - static bool wifilinkIsConnected(void) { return (xTaskGetTickCount() - lastPacketTick) < M2T(WIFI_ACTIVITY_TIMEOUT_MS); @@ -78,6 +75,7 @@ static struct crtpLinkOperations wifilinkOp = { .isConnected = wifilinkIsConnected, }; +#ifdef CONFIG_ENABLE_LEGACY_APP static bool detectOldVersionApp(UDPPacket *in) { @@ -89,6 +87,7 @@ static bool detectOldVersionApp(UDPPacket *in) return false; } +#endif static void wifilinkTask(void *param) { @@ -97,7 +96,8 @@ static void wifilinkTask(void *param) wifiGetDataBlocking(&wifiIn); lastPacketTick = xTaskGetTickCount(); #ifdef CONFIG_ENABLE_LEGACY_APP - + float rch, pch, ych; + uint16_t tch; if (detectOldVersionApp(&wifiIn)) { rch = (1.0) * (float)(((((uint16_t)wifiIn.data[1] << 8) + (uint16_t)wifiIn.data[2]) - 296) * 15.0 / 150.0); //-15~+15 pch = (-1.0) * (float)(((((uint16_t)wifiIn.data[3] << 8) + (uint16_t)wifiIn.data[4]) - 296) * 15.0 / 150.0); //-15~+15 diff --git a/components/core/crazyflie/modules/src/crtp_commander_high_level.c b/components/core/crazyflie/modules/src/crtp_commander_high_level.c index 3bdf7b5..18e1a8e 100644 --- a/components/core/crazyflie/modules/src/crtp_commander_high_level.c +++ b/components/core/crazyflie/modules/src/crtp_commander_high_level.c @@ -109,10 +109,11 @@ static StaticSemaphore_t lockTrajBuffer; static float defaultTakeoffVelocity = 0.5f; static float defaultLandingVelocity = 0.5f; +// TODO // Trajectory memory handling from the memory module -static uint32_t handleMemGetSize(void) { return crtpCommanderHighLevelTrajectoryMemSize(); } -static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer); -static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer); +// static uint32_t handleMemGetSize(void) { return crtpCommanderHighLevelTrajectoryMemSize(); } +// static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer); +// static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer); // static const MemoryHandlerDef_t memDef = { // .type = MEM_TYPE_TRAJ, // .getSize = handleMemGetSize, @@ -628,13 +629,13 @@ int define_trajectory(const struct data_define_trajectory* data) return 0; } -static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer) { - return crtpCommanderHighLevelReadTrajectory(memAddr, readLen, buffer); -} +// static bool handleMemRead(const uint32_t memAddr, const uint8_t readLen, uint8_t* buffer) { +// return crtpCommanderHighLevelReadTrajectory(memAddr, readLen, buffer); +// } -static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer) { - return crtpCommanderHighLevelWriteTrajectory(memAddr, writeLen, buffer); -} +// static bool handleMemWrite(const uint32_t memAddr, const uint8_t writeLen, const uint8_t* buffer) { +// return crtpCommanderHighLevelWriteTrajectory(memAddr, writeLen, buffer); +// } uint8_t* initCrtpPacket(CRTPPacket* packet, const enum TrajectoryCommand_e command) { diff --git a/components/core/crazyflie/modules/src/crtp_commander_rpyt.c b/components/core/crazyflie/modules/src/crtp_commander_rpyt.c index 977a116..17c9e60 100644 --- a/components/core/crazyflie/modules/src/crtp_commander_rpyt.c +++ b/components/core/crazyflie/modules/src/crtp_commander_rpyt.c @@ -116,7 +116,7 @@ void setCommandermode(FlightMode mode){ registerRequiredEstimator(complementaryEstimator); break; } - DEBUG_PRINTI("FlightMode = %u",mode); + DEBUG_PRINTI("FlightMode = %d",mode); #else DEBUG_PRINTI("set FlightMode disable"); #endif diff --git a/components/core/crazyflie/modules/src/estimator_kalman.c b/components/core/crazyflie/modules/src/estimator_kalman.c index cddfb47..9abf5ce 100644 --- a/components/core/crazyflie/modules/src/estimator_kalman.c +++ b/components/core/crazyflie/modules/src/estimator_kalman.c @@ -55,7 +55,7 @@ * 2019.04.12, Kristoffer Richardsson: Refactored, separated kalman implementation from OS related functionality * */ - +#include #include "kalman_core.h" #include "estimator_kalman.h" #include "kalman_supervisor.h" @@ -332,7 +332,7 @@ static void kalmanTask(void* parameters) { nextPrediction = osTick + S2T(1.0f / PREDICT_RATE); if (!rateSupervisorValidate(&rateSupervisorContext, T2M(osTick))) { - DEBUG_PRINT("WARNING: Kalman prediction rate low (%u)\n", rateSupervisorLatestCount(&rateSupervisorContext)); + DEBUG_PRINT("WARNING: Kalman prediction rate low (%"PRIu32")\n", rateSupervisorLatestCount(&rateSupervisorContext)); } } diff --git a/components/core/crazyflie/modules/src/log.c b/components/core/crazyflie/modules/src/log.c index 073c4ec..cf6b258 100644 --- a/components/core/crazyflie/modules/src/log.c +++ b/components/core/crazyflie/modules/src/log.c @@ -146,7 +146,7 @@ void logBlockTimed(xTimerHandle timer); //These are set by the Linker extern struct log_s _log_start; -extern struct log_s _log_stop; +extern struct log_s _log_end; //Pointer to the logeters list and length of it static struct log_s * logs; @@ -181,7 +181,7 @@ void logInit(void) return; logs = &_log_start; - logsLen = &_log_stop - &_log_start; + logsLen = &_log_end - &_log_start; // Calculate a hash of the toc by chaining description of each elements // Using the CRTP packet as temporary buffer diff --git a/components/core/crazyflie/modules/src/mem.c b/components/core/crazyflie/modules/src/mem.c index 1a435a1..79f0be0 100644 --- a/components/core/crazyflie/modules/src/mem.c +++ b/components/core/crazyflie/modules/src/mem.c @@ -28,7 +28,7 @@ #include #include #include - +#include /* FreeRtos includes */ #include "FreeRTOS.h" #include "task.h" @@ -341,7 +341,7 @@ static bool handleMemTesterWrite(const uint32_t memAddr, const uint8_t writeLen, if (actualData != expectedData) { // Log first error if (memTesterWriteErrorCount == 0) { - DEBUG_PRINT("Verification failed: expected: %d, actual: %d, addr: %u\n", expectedData, actualData, addr); + DEBUG_PRINT("Verification failed: expected: %d, actual: %d, addr: %"PRIu32"\n", expectedData, actualData, addr); } memTesterWriteErrorCount++; diff --git a/components/core/crazyflie/modules/src/param.c b/components/core/crazyflie/modules/src/param.c index b4b18ec..7a784fe 100644 --- a/components/core/crazyflie/modules/src/param.c +++ b/components/core/crazyflie/modules/src/param.c @@ -82,7 +82,7 @@ void paramTOCProcess(int command); //These are set by the Linker extern struct param_s _param_start; -extern struct param_s _param_stop; +extern struct param_s _param_end; //The following two function SHALL NOT be called outside paramTask! static void paramWriteProcess(); @@ -115,7 +115,7 @@ void paramInit(void) return; params = &_param_start; - paramsLen = &_param_stop - &_param_start; + paramsLen = &_param_end - &_param_start; // Calculate a hash of the toc by chaining description of each elements // Using the CRTP packet as temporary buffer diff --git a/components/core/crazyflie/modules/src/stabilizer.c b/components/core/crazyflie/modules/src/stabilizer.c index de1e7db..fe67fa3 100644 --- a/components/core/crazyflie/modules/src/stabilizer.c +++ b/components/core/crazyflie/modules/src/stabilizer.c @@ -25,6 +25,7 @@ */ #include +#include #include "FreeRTOS.h" #include "task.h" @@ -322,7 +323,7 @@ static void stabilizerTask(void* param) if (!rateSupervisorValidate(&rateSupervisorContext, xTaskGetTickCount())) { if (!rateWarningDisplayed) { - DEBUG_PRINT("WARNING: stabilizer loop rate is off (%u)\n", rateSupervisorLatestCount(&rateSupervisorContext)); + DEBUG_PRINT("WARNING: stabilizer loop rate is off (%"PRIu32")\n", rateSupervisorLatestCount(&rateSupervisorContext)); rateWarningDisplayed = true; } } diff --git a/components/core/crazyflie/modules/src/sysload.c b/components/core/crazyflie/modules/src/sysload.c index c75b3e1..bc6d23d 100644 --- a/components/core/crazyflie/modules/src/sysload.c +++ b/components/core/crazyflie/modules/src/sysload.c @@ -28,6 +28,7 @@ #include +#include #include "FreeRTOS.h" #include "timers.h" #include "cfassert.h" @@ -101,20 +102,20 @@ static void timerHandler(xTimerHandle timer) { // CPU usage is since last dump in % compared to total time spent in tasks. Note that time spent in interrupts will be included in measured time. // Stack usage is displayed as nr of unused bytes at peak stack usage. - DEBUG_PRINTI("Task dump\n"); - DEBUG_PRINTI("Load\tStack left\tName\tPRI\n"); + DEBUG_PRINTI("Task dump"); + DEBUG_PRINTI("Load\tStack left\tName\tPRI"); for (uint32_t i = 0; i < taskCount; i++) { TaskStatus_t* stats = &taskStats[i]; taskData_t* previousTaskData = getPreviousTaskData(stats->xTaskNumber); uint32_t taskRunTime = stats->ulRunTimeCounter; float load = f * (taskRunTime - previousTaskData->ulRunTimeCounter); - DEBUG_PRINTI("%.2f \t%u \t%s \t%u\n", (double)load, stats->usStackHighWaterMark, stats->pcTaskName,stats->uxBasePriority); + DEBUG_PRINTI("%.2f \t%"PRIu32" \t%s \t%d", (double)load, stats->usStackHighWaterMark, stats->pcTaskName,stats->uxBasePriority); previousTaskData->ulRunTimeCounter = taskRunTime; } - DEBUG_PRINTI("Free heap: %d bytes\n", xPortGetFreeHeapSize()); + DEBUG_PRINTI("Free heap: %"PRIu32" bytes", xPortGetFreeHeapSize()); previousTotalRunTime = totalRunTime; triggerDump = 0; diff --git a/components/core/crazyflie/modules/src/system.c b/components/core/crazyflie/modules/src/system.c index 51cd206..e9874a3 100644 --- a/components/core/crazyflie/modules/src/system.c +++ b/components/core/crazyflie/modules/src/system.c @@ -26,7 +26,7 @@ */ #include - +#include /* FreeRtos includes */ #include "FreeRTOS.h" #include "task.h" @@ -264,7 +264,7 @@ void systemTask(void *arg) ledSet(SYS_LED, true); } } - DEBUG_PRINT("Free heap: %d bytes\n", xPortGetFreeHeapSize()); + DEBUG_PRINT("Free heap: %"PRIu32" bytes\n", xPortGetFreeHeapSize()); workerLoop(); diff --git a/components/drivers/deck/component.mk b/components/drivers/deck/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/deck/deck_digital.c b/components/drivers/deck/deck_digital.c index cc81621..3624063 100644 --- a/components/drivers/deck/deck_digital.c +++ b/components/drivers/deck/deck_digital.c @@ -26,25 +26,19 @@ void pinMode(uint32_t pin, uint32_t mode) { -#ifdef TARGET_MCU_ESP32 - if (pin > 35) { -#elif defined(TARGET_MCU_ESP32S2) - if (pin > 43) { -#endif + if (!GPIO_IS_VALID_GPIO((int)pin)) { return; } - gpio_config_t io_conf; - //disable interrupt - io_conf.intr_type = GPIO_PIN_INTR_DISABLE; - //bit mask of the pins that you want to set,e.g.GPIO18/19 - io_conf.pin_bit_mask = (1ULL << pin); - //disable pull-down mode - io_conf.pull_down_en = 0; - //disable pull-up mode - io_conf.pull_up_en = 0; - //configure GPIO with the given settings - + gpio_config_t io_conf = { + //bit mask of the pins that you want to set,e.g.GPIO18/19 + .pin_bit_mask = (1ULL << pin), + //disable pull-down mode + .pull_down_en = 0, + //disable pull-up mode + .pull_up_en = 0, + //configure GPIO with the given settings + }; //set as output mode if (mode == OUTPUT) { io_conf.mode = GPIO_MODE_OUTPUT; @@ -65,11 +59,7 @@ void pinMode(uint32_t pin, uint32_t mode) void digitalWrite(uint32_t pin, uint32_t val) { -#ifdef TARGET_MCU_ESP32 - if (pin > 35) { -#elif defined(TARGET_MCU_ESP32S2) - if (pin > 43) { -#endif + if (!GPIO_IS_VALID_GPIO((int)pin)) { return; } @@ -82,12 +72,8 @@ void digitalWrite(uint32_t pin, uint32_t val) int digitalRead(uint32_t pin) { -#ifdef TARGET_MCU_ESP32 - if (pin > 35) { -#elif defined(TARGET_MCU_ESP32S2) - if (pin > 43) { -#endif - return 0; + if (!GPIO_IS_VALID_GPIO((int)pin)) { + return -1; } int val = gpio_get_level(pin); diff --git a/components/drivers/deck/deck_spi.c b/components/drivers/deck/deck_spi.c index 4210e91..f1e3a61 100644 --- a/components/drivers/deck/deck_spi.c +++ b/components/drivers/deck/deck_spi.c @@ -74,20 +74,21 @@ void spiBegin(void) /*.pre_cb = lcd_spi_pre_transfer_callback, //Specify pre-transfer callback to handle D/C line*/ }; //Initialize the SPI bus -#ifdef TARGET_MCU_ESP32 - ret = spi_bus_initialize(HSPI_HOST, &buscfg, 1); -#elif defined(TARGET_MCU_ESP32S2) - ret = spi_bus_initialize(HSPI_HOST, &buscfg, 2); + spi_host_device_t host_id = SPI2_HOST; +#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 3, 0)) + ret = spi_bus_initialize(host_id, &buscfg, SPI_DMA_CH_AUTO); +#else + int dma_chan = host_id; //set dma channel equals to host_id by default + ret = spi_bus_initialize(host_id, &buscfg, dma_chan); #endif ESP_ERROR_CHECK(ret); //Attach the pmw3901 to the SPI bus - ret = spi_bus_add_device(HSPI_HOST, &devcfg, &spi); + ret = spi_bus_add_device(host_id, &devcfg, &spi); ESP_ERROR_CHECK(ret); isInit = true; } - static void spiConfigureWithSpeed(uint32_t baudRatePrescaler) { //TODO: @@ -105,7 +106,7 @@ bool spiExchange(size_t length, bool is_tx, const uint8_t *data_tx, uint8_t *dat } if (length == 0) { - return; //no need to send anything + return true; //no need to send anything } esp_err_t ret; diff --git a/components/drivers/general/adc/CMakeLists.txt b/components/drivers/general/adc/CMakeLists.txt index 6d9fd07..e2662f1 100644 --- a/components/drivers/general/adc/CMakeLists.txt +++ b/components/drivers/general/adc/CMakeLists.txt @@ -1,3 +1,9 @@ +if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER_EQUAL "5.0") idf_component_register(SRCS "adc_esp32.c" INCLUDE_DIRS "." "include" - REQUIRES crazyflie config esp_adc_cal) \ No newline at end of file + REQUIRES crazyflie config esp_adc) +else() +idf_component_register(SRCS "adc_esp32.c" + INCLUDE_DIRS "." "include" + REQUIRES crazyflie config esp_adc_cal) +endif() diff --git a/components/drivers/general/adc/adc_esp32.c b/components/drivers/general/adc/adc_esp32.c index 08adeb1..57d14f9 100644 --- a/components/drivers/general/adc/adc_esp32.c +++ b/components/drivers/general/adc/adc_esp32.c @@ -21,9 +21,9 @@ * */ +#include "esp_idf_version.h" #include "driver/adc.h" #include "esp_adc_cal.h" - #include "adc_esp32.h" #include "config.h" #include "pm_esplane.h" @@ -34,43 +34,18 @@ static bool isInit; static esp_adc_cal_characteristics_t *adc_chars; -#ifdef TARGET_MCU_ESP32 +#ifdef CONFIG_IDF_TARGET_ESP32 static const adc_channel_t channel = ADC_CHANNEL_7; //GPIO35 if ADC1 -static const adc_bits_width_t width = ADC_WIDTH_BIT_12; -#elif defined(TARGET_MCU_ESP32S2) +#elif defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) static const adc_channel_t channel = ADC_CHANNEL_1; // GPIO2 if ADC1 -static const adc_bits_width_t width = ADC_WIDTH_BIT_13; #endif +static const adc_bits_width_t width = ADC_WIDTH_MAX-1; static const adc_atten_t atten = ADC_ATTEN_DB_11; //11dB attenuation (ADC_ATTEN_DB_11) gives full-scale voltage 3.9V static const adc_unit_t unit = ADC_UNIT_1; #define DEFAULT_VREF 1100 //Use adc2_vref_to_gpio() to obtain a better estimate #define NO_OF_SAMPLES 30 //Multisampling -static void checkEfuse(void) -{ -#ifdef TARGET_MCU_ESP32 - //Check if TP is burned into eFuse - if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_TP) == ESP_OK) { - printf("eFuse Two Point: Supported\n"); - } else { - printf("eFuse Two Point: NOT supported\n"); - } - //Check Vref is burned into eFuse - if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_VREF) == ESP_OK) { - printf("eFuse Vref: Supported\n"); - } else { - printf("eFuse Vref: NOT supported\n"); - } -#elif defined(TARGET_MCU_ESP32S2) - if (esp_adc_cal_check_efuse(ESP_ADC_CAL_VAL_EFUSE_TP) == ESP_OK) { - printf("eFuse Two Point: Supported\n"); - } else { - printf("Cannot retrieve eFuse Two Point calibration values. Default calibration values will be used.\n"); - } -#endif -} - static void print_char_val_type(esp_adc_cal_value_t val_type) { if (val_type == ESP_ADC_CAL_VAL_EFUSE_TP) { @@ -106,8 +81,6 @@ void adcInit(void) return; } - checkEfuse(); - //Configure ADC if (unit == ADC_UNIT_1) { adc1_config_width(width); adc1_config_channel_atten(channel, atten); diff --git a/components/drivers/general/adc/component.mk b/components/drivers/general/adc/component.mk deleted file mode 100644 index 8b13789..0000000 --- a/components/drivers/general/adc/component.mk +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/drivers/general/buzzer/component.mk b/components/drivers/general/buzzer/component.mk deleted file mode 100644 index 8b13789..0000000 --- a/components/drivers/general/buzzer/component.mk +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/drivers/general/led/component.mk b/components/drivers/general/led/component.mk deleted file mode 100644 index 8b13789..0000000 --- a/components/drivers/general/led/component.mk +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/drivers/general/led/led_esp32.c b/components/drivers/general/led/led_esp32.c index bbdb26c..3eea3f4 100644 --- a/components/drivers/general/led/led_esp32.c +++ b/components/drivers/general/led/led_esp32.c @@ -51,17 +51,16 @@ void ledInit() } for (i = 0; i < LED_NUM; i++) { - gpio_config_t io_conf; - //disable interrupt - io_conf.intr_type = GPIO_PIN_INTR_DISABLE; - //bit mask of the pins that you want to set,e.g.GPIO18/19 - io_conf.pin_bit_mask = (1ULL << led_pin[i]); - //disable pull-down mode - io_conf.pull_down_en = 0; - //disable pull-up mode - io_conf.pull_up_en = 0; - //set as output mode - io_conf.mode = GPIO_MODE_OUTPUT; + gpio_config_t io_conf = { + //bit mask of the pins that you want to set,e.g.GPIO18/19 + .pin_bit_mask = (1ULL << led_pin[i]), + //disable pull-down mode + .pull_down_en = 0, + //disable pull-up mode + .pull_up_en = 0, + //set as output mode + .mode = GPIO_MODE_OUTPUT, + }; //configure GPIO with the given settings gpio_config(&io_conf); ledSet(i, 0); diff --git a/components/drivers/general/motors/component.mk b/components/drivers/general/motors/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/general/wifi/CMakeLists.txt b/components/drivers/general/wifi/CMakeLists.txt index a0b7619..1971523 100644 --- a/components/drivers/general/wifi/CMakeLists.txt +++ b/components/drivers/general/wifi/CMakeLists.txt @@ -1,3 +1,3 @@ idf_component_register(SRCS "wifi_esp32.c" - INCLUDE_DIRS "." "include" - REQUIRES crazyflie platform config) \ No newline at end of file + INCLUDE_DIRS "." "include" + REQUIRES crazyflie platform config esp_wifi) \ No newline at end of file diff --git a/components/drivers/general/wifi/component.mk b/components/drivers/general/wifi/component.mk deleted file mode 100644 index 8b13789..0000000 --- a/components/drivers/general/wifi/component.mk +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/drivers/general/wifi/wifi_esp32.c b/components/drivers/general/wifi/wifi_esp32.c index 0f22e3e..c4cd7d6 100644 --- a/components/drivers/general/wifi/wifi_esp32.c +++ b/components/drivers/general/wifi/wifi_esp32.c @@ -27,7 +27,13 @@ static struct sockaddr_in6 source_addr; // Large enough for both IPv4 or IPv6 //#define WIFI_SSID "Udp Server" static char WIFI_SSID[32] = "ESP-DRONE"; static char WIFI_PWD[64] = "12345678" ; -#define MAX_STA_CONN (1) +static uint8_t WIFI_CH = 1; +#define MAX_STA_CONN (3) + +#ifndef MAC2STR +#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] +#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" +#endif static char rx_buffer[UDP_SERVER_BUFSIZE]; static char tx_buffer[UDP_SERVER_BUFSIZE]; @@ -65,18 +71,14 @@ static void wifi_event_handler(void *arg, esp_event_base_t event_base, { if (event_id == WIFI_EVENT_AP_STACONNECTED) { wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *) event_data; - DEBUG_PRINT_LOCAL("station "MACSTR" join, AID=%d", - MAC2STR(event->mac), event->aid); + DEBUG_PRINT_LOCAL("station" MACSTR "join, AID=%d", MAC2STR(event->mac), event->aid); } else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) { wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *) event_data; - DEBUG_PRINT_LOCAL("station "MACSTR" leave, AID=%d", - MAC2STR(event->mac), event->aid); + DEBUG_PRINT_LOCAL("station" MACSTR "leave, AID=%d", MAC2STR(event->mac), event->aid); } } - - bool wifiTest(void) { return isInit; @@ -224,13 +226,17 @@ void wifiInit(void) ESP_ERROR_CHECK(esp_wifi_get_mac(ESP_IF_WIFI_AP, mac)); sprintf(WIFI_SSID, "ESP-DRONE_%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - wifi_config_t wifi_config; + wifi_config_t wifi_config = { + .ap = { + .channel = WIFI_CH, + .max_connection = MAX_STA_CONN, + .authmode = WIFI_AUTH_WPA_WPA2_PSK, + }, + }; + memcpy(wifi_config.ap.ssid, WIFI_SSID, strlen(WIFI_SSID) + 1) ; wifi_config.ap.ssid_len = strlen(WIFI_SSID); memcpy(wifi_config.ap.password, WIFI_PWD, strlen(WIFI_PWD) + 1) ; - wifi_config.ap.max_connection = MAX_STA_CONN; - wifi_config.ap.authmode = WIFI_AUTH_WPA_WPA2_PSK; - wifi_config.ap.channel = 13; if (strlen(WIFI_PWD) == 0) { wifi_config.ap.authmode = WIFI_AUTH_OPEN; diff --git a/components/drivers/i2c_bus/CMakeLists.txt b/components/drivers/i2c_bus/CMakeLists.txt index 6b9ad72..c69254b 100644 --- a/components/drivers/i2c_bus/CMakeLists.txt +++ b/components/drivers/i2c_bus/CMakeLists.txt @@ -1,4 +1,4 @@ idf_component_register(SRCS "i2c_drv.c" "i2cdev_esp32.c" INCLUDE_DIRS "include" - REQUIRES crazyflie platform + REQUIRES crazyflie platform driver PRIV_REQUIRES config) \ No newline at end of file diff --git a/components/drivers/i2c_bus/component.mk b/components/drivers/i2c_bus/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/i2c_bus/i2c_drv.c b/components/drivers/i2c_bus/i2c_drv.c index 9a8fb8c..ad49b00 100644 --- a/components/drivers/i2c_bus/i2c_drv.c +++ b/components/drivers/i2c_bus/i2c_drv.c @@ -109,14 +109,8 @@ void i2cdrvInit(I2cDrv *i2c) i2cdrvInitBus(i2c); } -static void i2cdrvTryToRestartBus(I2cDrv *i2c) +void i2cdrvTryToRestartBus(I2cDrv *i2c) { i2cdrvInitBus(i2c); } - - - - - - diff --git a/components/drivers/i2c_devices/eeprom/component.mk b/components/drivers/i2c_devices/eeprom/component.mk deleted file mode 100644 index 8b13789..0000000 --- a/components/drivers/i2c_devices/eeprom/component.mk +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/drivers/i2c_devices/eeprom/eeprom.c b/components/drivers/i2c_devices/eeprom/eeprom.c index b371658..b383f1d 100644 --- a/components/drivers/i2c_devices/eeprom/eeprom.c +++ b/components/drivers/i2c_devices/eeprom/eeprom.c @@ -25,21 +25,17 @@ #include #include "esp_err.h" -#include "esp_spi_flash.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" - #include "eeprom.h" #include "debug_cf.h" #include "eprintf.h" - #ifdef EEPROM_RUN_WRITE_READ_TEST +#include "esp_spi_flash.h" static bool eepromTestWriteRead(void); #endif -static uint8_t devAddr; -static I2C_Dev *I2Cx; static bool isInit; bool eepromInit(I2C_Dev *i2cPort) @@ -48,9 +44,7 @@ bool eepromInit(I2C_Dev *i2cPort) return true; } - // I2Cx = i2cPort; - // devAddr = EEPROM_I2C_ADDR; - spi_flash_init(); + //TODOspi_flash_init(); DEBUG_PRINTI("spi_flash_init ... !"); isInit = true; @@ -107,7 +101,7 @@ bool eepromTestConnection(void) bool eepromReadBuffer(uint8_t *buffer, size_t readAddr, size_t len) { bool status = false; - esp_err_t err = spi_flash_read(readAddr, buffer, len); + esp_err_t err = ESP_OK; //TODO spi_flash_read(readAddr, buffer, len); if (err == ESP_OK) { @@ -126,7 +120,8 @@ bool eepromWriteBuffer(uint8_t *buffer, size_t writeAddr, size_t len) bool status = false; writeAddr += EEPROM_IN_FLASH_ADDR; - if (spi_flash_write(writeAddr, buffer, len) == ESP_OK) { + //TODO if (spi_flash_write(writeAddr, buffer, len) == ESP_OK) { + if (1) { status = true; diff --git a/components/drivers/i2c_devices/hmc5883l/component.mk b/components/drivers/i2c_devices/hmc5883l/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/i2c_devices/mpu6050/component.mk b/components/drivers/i2c_devices/mpu6050/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/i2c_devices/ms5611/component.mk b/components/drivers/i2c_devices/ms5611/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/i2c_devices/vl53l0/component.mk b/components/drivers/i2c_devices/vl53l0/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/i2c_devices/vl53l0/vl53l0x.c b/components/drivers/i2c_devices/vl53l0/vl53l0x.c index 0b66686..165fc2f 100644 --- a/components/drivers/i2c_devices/vl53l0/vl53l0x.c +++ b/components/drivers/i2c_devices/vl53l0/vl53l0x.c @@ -91,7 +91,7 @@ uint16_t vl53l0xReadReg16Bit(VL53L0xDev *dev, uint8_t reg); static bool vl53l0xWriteReg16Bit(VL53L0xDev *dev, uint8_t reg, uint16_t val); static bool vl53l0xWriteReg32Bit(VL53L0xDev *dev, uint8_t reg, uint32_t val); -static int nextI2CAddress = VL53L0X_DEFAULT_ADDRESS + 1; +//static int nextI2CAddress = VL53L0X_DEFAULT_ADDRESS + 1; /** Default constructor, uses default I2C address. * @see VL53L0X_DEFAULT_ADDRESS diff --git a/components/drivers/i2c_devices/vl53l1/component.mk b/components/drivers/i2c_devices/vl53l1/component.mk deleted file mode 100644 index 25c70db..0000000 --- a/components/drivers/i2c_devices/vl53l1/component.mk +++ /dev/null @@ -1,2 +0,0 @@ -COMPONENT_ADD_INCLUDEDIRS := . include core/inc -COMPONENT_SRCDIRS := . core/src diff --git a/components/drivers/spi_devices/pmw3901/component.mk b/components/drivers/spi_devices/pmw3901/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/components/drivers/spi_devices/pmw3901/flowdeck_v1v2.c b/components/drivers/spi_devices/pmw3901/flowdeck_v1v2.c index e852776..c54fc4b 100755 --- a/components/drivers/spi_devices/pmw3901/flowdeck_v1v2.c +++ b/components/drivers/spi_devices/pmw3901/flowdeck_v1v2.c @@ -86,10 +86,10 @@ static void flowdeckTask(void *param) while (1) { // if task watchdog triggered,flow frequency should set lower -#ifdef TARGET_MCU_ESP32S2 - vTaskDelay(10); -#elif defined(TARGET_MCU_ESP32) +#ifdef CONFIG_IDF_TARGET_ESP32S2 vTaskDelay(10); +#elif defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32) + vTaskDelay(5); #endif pmw3901ReadMotion(NCS_PIN, ¤tMotion); @@ -122,10 +122,10 @@ static void flowdeckTask(void *param) flowData.stdDevY = stdFlow; // [pixels] should perhaps be made larger? // if task watchdog triggered,flow frequency should set lower -#ifdef TARGET_MCU_ESP32S2 - flowData.dt = 0.01; -#elif defined(TARGET_MCU_ESP32) +#ifdef CONFIG_IDF_TARGET_ESP32S2 flowData.dt = 0.01; +#elif defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32) + flowData.dt = 0.005; #endif #if defined(USE_MA_SMOOTHING) diff --git a/components/lib/dsp_lib/CMakeLists.txt b/components/lib/dsp_lib/CMakeLists.txt index 6ab3f8a..039cf86 100644 --- a/components/lib/dsp_lib/CMakeLists.txt +++ b/components/lib/dsp_lib/CMakeLists.txt @@ -1,10 +1,13 @@ idf_component_register(SRC_DIRS "BasicMathFunctions" - "CommonTables" - "ComplexMathFunctions" - "ControllerFunctions" - "FastMathFunctions" - "FilteringFunctions" - "MatrixFunctions" - "StatisticsFunctions" - "TransformFunctions" - INCLUDE_DIRS "include") \ No newline at end of file + "CommonTables" + "ComplexMathFunctions" + "ControllerFunctions" + "FastMathFunctions" + "FilteringFunctions" + "MatrixFunctions" + "StatisticsFunctions" + "TransformFunctions" + INCLUDE_DIRS "include" + ) + +target_compile_options(${COMPONENT_LIB} PUBLIC "-fno-strict-aliasing") \ No newline at end of file diff --git a/components/lib/dsp_lib/component.mk b/components/lib/dsp_lib/component.mk deleted file mode 100644 index 78b8b17..0000000 --- a/components/lib/dsp_lib/component.mk +++ /dev/null @@ -1,4 +0,0 @@ -COMPONENT_SRCDIRS:=BasicMathFunctions CommonTables ComplexMathFunctions ControllerFunctions \ - FastMathFunctions FilteringFunctions MatrixFunctions StatisticsFunctions\ - TransformFunctions -CFLAGS += -D ARM_MATH_CM4 \ No newline at end of file diff --git a/components/platform/component.mk b/components/platform/component.mk deleted file mode 100644 index 8b13789..0000000 --- a/components/platform/component.mk +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/platform/platform_esp32.c b/components/platform/platform_esp32.c index c7cc767..f0829a2 100644 --- a/components/platform/platform_esp32.c +++ b/components/platform/platform_esp32.c @@ -31,24 +31,19 @@ #error #endif - #define DEFAULT_PLATFORM_STRING "0;EP20" - -#ifndef UNIT_TEST_MODE -static char *getAddressOfOtpMemoryBlock(int blockNr) -{ - //TODO: - //return block adress - return (char *)(0x1fff7800 + blockNr * 0x20); -} -#else -// This function is replaced by a mock in unit tests -char *getAddressOfOtpMemoryBlock(const int blockNr); -#endif - - - +// //TODO: +// #ifndef UNIT_TEST_MODE +// static char *getAddressOfOtpMemoryBlock(int blockNr) +// { +// //return block adress +// return (char *)(0x1fff7800 + blockNr * 0x20); +// } +// #else +// // This function is replaced by a mock in unit tests +// char *getAddressOfOtpMemoryBlock(const int blockNr); +// #endif void platformGetDeviceTypeString(char *deviceTypeString) { diff --git a/docs/en/rst/getespidf.rst b/docs/en/rst/getespidf.rst index 7167310..ab369a2 100644 --- a/docs/en/rst/getespidf.rst +++ b/docs/en/rst/getespidf.rst @@ -5,34 +5,14 @@ Set up Development Environment Set up ESP-IDF Environment --------------------------------- -Please refer to `ESP-IDF Programming Guide `__\ and set up ESP-IDF environmnet step by step. +Please refer to `ESP-IDF Programming Guide `__\ and set up ESP-IDF environmnet step by step. .. note:: -- ESP-IDF branch ``release /v4.2`` is suggested. +- ESP-IDF branch ``release /v4.4`` is suggested. - Please follow and complete all setup steps. - Build a example of ESP-IDF to make sure the setup is successful. -Modify ESP32/ESP32-S2 Link Script --------------------------------------- - -Open the link script template for ESP32/ESP32-S2 ``${IDF_PATH}/components/esp32/ld/esp32.project.ld.in`` and ``${IDF_PATH}/components/esp32s2/ld/esp32s2.project.ld.in``\. Put the following code at the end of ``.flash.rodata``. - -:: - - /* Parameters and log system data */ - _param_start = .; - KEEP(*(.param)) - KEEP(*(.param.*)) - _param_stop = .; - . = ALIGN(4); - _log_start = .; - KEEP(*(.log)) - KEEP(*(.log.*)) - _log_stop = .; - . = ALIGN(4); - -The above code can place variables with ``.param.*`` or ``.log.*`` segment attributes at continuous storage area so as to speed up variable traversal. Get Project Source Code --------------------------------------------------- diff --git a/docs/en/rst/gettingstarted.rst b/docs/en/rst/gettingstarted.rst index 1dd167f..3c5e4e0 100755 --- a/docs/en/rst/gettingstarted.rst +++ b/docs/en/rst/gettingstarted.rst @@ -87,7 +87,7 @@ ESP-IDF is the IoT Development Framework provided by Espressif for ESP32/ESP32-S For more information, please check `ESP-IDF -Programming Guide `__. +Programming Guide `__. Crazyflie Overview ======================= diff --git a/docs/en/rst/system.rst b/docs/en/rst/system.rst index 2fe8ec3..b823f42 100644 --- a/docs/en/rst/system.rst +++ b/docs/en/rst/system.rst @@ -124,7 +124,7 @@ The priority of system tasks can be configured in ``components/config/include/co #define UART1_TEST_TASK_PRI 1 #define UART2_TEST_TASK_PRI 1 //if task watchdog triggered, KALMAN_TASK_PRI should set lower or set lower flow frequency - #ifdef TARGET_MCU_ESP32 + #ifdef CONFIG_IDF_TARGET_ESP32 #define KALMAN_TASK_PRI 2 #define LOG_TASK_PRI 1 #define MEM_TASK_PRI 1 diff --git a/docs/zh_CN/md/getespidf.md b/docs/zh_CN/md/getespidf.md index cf3344c..0b28458 100644 --- a/docs/zh_CN/md/getespidf.md +++ b/docs/zh_CN/md/getespidf.md @@ -3,7 +3,7 @@ ## ESP-IDF 环境搭建 -请参照 [ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s2/get-started/index.html),按照步骤设置 ESP-IDF。 +请参照 [ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32s2/get-started/index.html),按照步骤设置 ESP-IDF。 注意事项: @@ -19,12 +19,12 @@ _param_start = .; KEEP(*(.param)) KEEP(*(.param.*)) - _param_stop = .; + _param_end = .; . = ALIGN(4); _log_start = .; KEEP(*(.log)) KEEP(*(.log.*)) - _log_stop = .; + _log_end = .; . = ALIGN(4); ``` diff --git a/docs/zh_CN/md/gettingstarted.md b/docs/zh_CN/md/gettingstarted.md index d3629a6..8ae9d63 100644 --- a/docs/zh_CN/md/gettingstarted.md +++ b/docs/zh_CN/md/gettingstarted.md @@ -35,7 +35,7 @@ ESP-IDF 是乐鑫为 ESP32/ESP32-S2 提供的物联网开发框架。 * ESP-IDF 包含一系列库及头文件,提供了基于 ESP32/ESP32-S2 构建软件项目所需的核心组件。 * ESP-IDF 还提供了开发和量产过程中最常用的工具及功能,例如:构建、烧录、调试和测量等。 -详情可查阅:[ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s2/get-started/index.html)。 +详情可查阅:[ESP-IDF 编程指南](https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32s2/get-started/index.html)。 ## Crazyflie 简介 diff --git a/docs/zh_CN/md/system.md b/docs/zh_CN/md/system.md index c4c16eb..c541672 100644 --- a/docs/zh_CN/md/system.md +++ b/docs/zh_CN/md/system.md @@ -111,7 +111,7 @@ TASK 具体描述如下: #define UART1_TEST_TASK_PRI 1 #define UART2_TEST_TASK_PRI 1 //if task watchdog triggered, KALMAN_TASK_PRI should set lower or set lower flow frequency -#ifdef TARGET_MCU_ESP32 +#ifdef CONFIG_IDF_TARGET_ESP32 #define KALMAN_TASK_PRI 2 #define LOG_TASK_PRI 1 #define MEM_TASK_PRI 1 diff --git a/docs/zh_CN/rst/getespidf.rst b/docs/zh_CN/rst/getespidf.rst index 948e3fd..d04a3b7 100644 --- a/docs/zh_CN/rst/getespidf.rst +++ b/docs/zh_CN/rst/getespidf.rst @@ -5,34 +5,14 @@ ESP-IDF 环境搭建 ---------------- -请参照 `ESP-IDF 编程指南 `__\ ,按照步骤设置 ESP-IDF。 +请参照 `ESP-IDF 编程指南 `__\ ,按照步骤设置 ESP-IDF。 注意事项: -- 推荐安装 ESP-IDF `release/v4.2` 分支; +- 推荐安装 ESP-IDF `release/v4.4` 分支; - 请完成 ESP-IDF 所有安装步骤; - 建议首先编译一个 ESP-IDF 示例程序,用以检查安装的完整性。 -ESP32/ESP32-S2 链接脚本修改 ---------------------------- - -打开 ESP32/ESP32-S2 的链接脚本模板 ``${IDF_PATH}/components/esp32/ld/esp32.project.ld.in`` 和 ``${IDF_PATH}/components/esp32s2/ld/esp32s2.project.ld.in``\ ,将以下代码添加到 ``.flash.rodata`` 段的末尾。 - -:: - - /* Parameters and log system data */ - _param_start = .; - KEEP(*(.param)) - KEEP(*(.param.*)) - _param_stop = .; - . = ALIGN(4); - _log_start = .; - KEEP(*(.log)) - KEEP(*(.log.*)) - _log_stop = .; - . = ALIGN(4); - -以上代码可以实现将具有 ``.param.*`` 或 ``.log.*`` 段属性的变量,放置在连续的存储区域,从而加快变量遍历速度。 获取项目源代码 -------------- diff --git a/docs/zh_CN/rst/gettingstarted.rst b/docs/zh_CN/rst/gettingstarted.rst index 8289991..64e1504 100644 --- a/docs/zh_CN/rst/gettingstarted.rst +++ b/docs/zh_CN/rst/gettingstarted.rst @@ -60,7 +60,7 @@ ESP-IDF 是乐鑫为 ESP32/ESP32-S2 提供的物联网开发框架。 - ESP-IDF 包含一系列库及头文件,提供了基于 ESP32/ESP32-S2 构建软件项目所需的核心组件。 - ESP-IDF 还提供了开发和量产过程中最常用的工具及功能,例如:构建、烧录、调试和测量等。 -详情可查阅:`ESP-IDF 编程指南 `__。 +详情可查阅:`ESP-IDF 编程指南 `__。 Crazyflie 简介 ================ diff --git a/docs/zh_CN/rst/system.rst b/docs/zh_CN/rst/system.rst index 1efeacd..4d4b912 100644 --- a/docs/zh_CN/rst/system.rst +++ b/docs/zh_CN/rst/system.rst @@ -135,7 +135,7 @@ TASK 具体描述如下: #define UART1_TEST_TASK_PRI 1 #define UART2_TEST_TASK_PRI 1 //if task watchdog triggered, KALMAN_TASK_PRI should set lower or set lower flow frequency - #ifdef TARGET_MCU_ESP32 + #ifdef CONFIG_IDF_TARGET_ESP32 #define KALMAN_TASK_PRI 2 #define LOG_TASK_PRI 1 #define MEM_TASK_PRI 1 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 36b8a93..d669ed4 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,2 +1,3 @@ idf_component_register(SRCS "main.c" - INCLUDE_DIRS "." ) \ No newline at end of file + INCLUDE_DIRS "." + LDFRAGMENTS linker_fragment.lf) \ No newline at end of file diff --git a/main/Kconfig.projbuild b/main/Kconfig.projbuild index 9f691d6..cac2d42 100644 --- a/main/Kconfig.projbuild +++ b/main/Kconfig.projbuild @@ -2,6 +2,7 @@ menu "ESPDrone Config" choice prompt "ESP_Drone hardware version" + default TARGET_ESP32_S2_DRONE_V1_2 if IDF_TARGET_ESP32S3 default TARGET_ESP32_S2_DRONE_V1_2 if IDF_TARGET_ESP32S2 default TARGET_ESPLANE_V1 if IDF_TARGET_ESP32 @@ -12,7 +13,7 @@ menu "ESPDrone Config" bool "esplane with esp32-s2 onboard" config TARGET_ESP32_S2_DRONE_V1_2 - bool "esp-drone with esp32-s2 onboard" + bool "esp-drone with esp32-s2/s3 onboard" endchoice @@ -70,9 +71,9 @@ menu "ESPDrone Config" config BASE_STACK_SIZE int "base stack size for system task" range 512 1024 - default 512 if TARGET_ESPLANE_V2_S2 - default 512 if TARGET_ESP32_S2_DRONE_V1_2 - default 1024 if TARGET_ESPLANE_V1 + default 1024 if IDF_TARGET_ESP32 + default 512 if IDF_TARGET_ESP32S2 + default 1024 if IDF_TARGET_ESP32S3 endmenu diff --git a/main/component.mk b/main/component.mk deleted file mode 100644 index e69de29..0000000 diff --git a/main/linker_fragment.lf b/main/linker_fragment.lf new file mode 100644 index 0000000..5753310 --- /dev/null +++ b/main/linker_fragment.lf @@ -0,0 +1,19 @@ +[sections:_param] +entries: + .param+ + +[sections:_log] +entries: + .log+ + +[scheme:_table] +entries: + _param -> flash_rodata + _log -> flash_rodata + +[mapping:my_project] +archive: * +entries: + * (_table); + _param -> flash_rodata KEEP() ALIGN(4, pre, post) SURROUND(param), + _log -> flash_rodata KEEP() ALIGN(4, pre, post) SURROUND(log) diff --git a/sdkconfig.defaults b/sdkconfig.defaults index f405d78..5282768 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -1,127 +1,26 @@ -# -# default value. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) Project Configuration -# -# -# Component config -# - -# -# ESP32S2-specific -# -# CONFIG_ESP32S2_DEFAULT_CPU_FREQ_80 is not set -# CONFIG_ESP32S2_DEFAULT_CPU_FREQ_160 is not set CONFIG_ESP32S2_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ=240 - -# -# ESP32-specific -CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y -CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 - -# -# PHY -# -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# end of PHY -# -# FreeRTOS -# -CONFIG_FREERTOS_UNICORE=y +CONFIG_FREERTOS_UNICORE=n CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_CORETIMER_0=y -# CONFIG_FREERTOS_CORETIMER_1 is not set CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y CONFIG_FREERTOS_HZ=1000 -CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION=y -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_ASSERT_FAIL_ABORT=y -# CONFIG_FREERTOS_ASSERT_FAIL_PRINT_CONTINUE is not set -# CONFIG_FREERTOS_ASSERT_DISABLE is not set -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -# CONFIG_FREERTOS_LEGACY_HOOKS is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=3072 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 CONFIG_FREERTOS_USE_TRACE_FACILITY=y CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y -CONFIG_FREERTOS_RUN_TIME_STATS_USING_ESP_TIMER=y -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -# end of FreeRTOS +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2048 +CONFIG_FREERTOS_ISR_STACKSIZE=2048 +CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY=y -# -# Serial flasher config -# -CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200 -CONFIG_ESPTOOLPY_FLASHMODE_QIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" -CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y -# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set -# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set -CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=115200 -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Compiler options -# -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set CONFIG_COMPILER_OPTIMIZATION_PERF=y -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set -# end of Compiler options + +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=3072 +CONFIG_ESPTOOLPY_FLASHMODE_QIO=y +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y + diff --git a/sdkconfig.defaults.esp32 b/sdkconfig.defaults.esp32 deleted file mode 100644 index dcaba56..0000000 --- a/sdkconfig.defaults.esp32 +++ /dev/null @@ -1,4 +0,0 @@ -# -# FreeRTOS -# -CONFIG_FREERTOS_UNICORE=n \ No newline at end of file diff --git a/sdkconfig.defaults.esp32s2 b/sdkconfig.defaults.esp32s2 new file mode 100644 index 0000000..737ec12 --- /dev/null +++ b/sdkconfig.defaults.esp32s2 @@ -0,0 +1,3 @@ +CONFIG_FREERTOS_UNICORE=y +CONFIG_ESP32S2_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ=240 \ No newline at end of file diff --git a/sdkconfig.defaults.esp32s3 b/sdkconfig.defaults.esp32s3 new file mode 100644 index 0000000..cc2c8cb --- /dev/null +++ b/sdkconfig.defaults.esp32s3 @@ -0,0 +1,3 @@ +CONFIG_FREERTOS_UNICORE=n +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 \ No newline at end of file