AliOS-Things HAAS-Python ESP32-C3适配和编译

版本:v1.0 作者:乔楚、李志清 日期:2022-04-26

主要处理说明:

  1. 引用esp-idf v4.4
  2. 独立espressif_esp32_c3
  3. 处理对AliOS-Things的调用
  4. 编译参数适配:已适配4MB版本和2MB版本

一、ESP-IDF部分的处理:

1. 设置esp-idf 4.4环境

# 设置spressif_esp32_c3
mkdir hardware/chip/espressif_esp32_c3
cp hardware/chip/espressif_esp32/*.* hardware/chip/espressif_esp32_c3/
cp hardware/chip/espressif_esp32/SConscript hardware/chip/espressif_esp32_c3/# ~/esp/esp-idf已经切换到release/v4.4
rsync -avP ~/esp/esp-idf hardware/chip/espressif_esp32_c3/

2. 修改必要的文件

2.1 diskio.h -> ff.h

修改 hardware/chip/espressif_esp32_c3/esp-idf/components/fatfs/src/diskio.h,添加对AliOS-Things文件接口调用

 extern "C" {#endif+ // add for HaaSPython
+ #include "ff.h"/* Status of Disk Functions */typedef BYTE   DSTATUS;

2.2 esp_vfs.h --> statfs

修改 hardware/chip/espressif_esp32_c3/esp-idf/components/vfs/include/esp_vfs.h,添加statfs_p和statfs

     esp_err_t (*end_select)(void *end_select_args);#endif // CONFIG_VFS_SUPPORT_SELECT
+    // add for HaaSPython
+    union {+        int (*statfs_p)(void *ctx, const char *path, void* sb);
+        int (*statfs)(const char *path, void *sb);
+    };} esp_vfs_t;

二、AliOS-Things部分的处理:

1. 编译环境匹配

1.1 espressif_esp32_c3/package.yaml

修改hardware/chip/espressif_esp32_c3/package.yaml 设置为c3环境:

## 第一部分: 基础信息
name: espressif_esp32_c3                            # <必选项> 包名称 (符合C语言变量命名规则),长度少于等于64字节
version: dev_aos                                    # <必选项> 组件版本号
description: esp-idf for esp32-c3             # <必选项> 建议至少20字以上
type: chip                                          # <必选项> 组件类型,为:solution, chip, board, common, sdktag: 核心模块                                        # <可选项> 组件分类,缺省值: ''
keywords:                                           # <可选项> 标签,会影响到组件被搜索的效果,合理的标签很重要- base
license: Apache license v2.0                        # <可选项> 源代码的许可证,要确保所有代码、文件的许可证不冲突。如:MIT,Apache license v2.0,BSD#           指定该组件依赖的组件及版本,版本支持条件比较,支持:>=v1.0, >v1.0, ==v1.0, <=v1.0, <v1.0, v1.0
#           未指定条件时,默认为 ==,如 v1.0 与 ==v1.0
# depends:                                 # <可选项> 该组件依赖其他的组件,合理的依赖才能保证组件能编译、使用# - libc_stub: dev_aos
#   - aos: >=v7.2.0## 第四部分:编译连接信息
# build_config:                            # <可选项> 编译配置项
#   include:                               # <可选项> 编译时,影响编译器的-I 参数 ,全局有效
#     - src                                #        include 只能是该软件包下的目录,不能使用外部目录
#   internal_include:                      # <可选项> 编译时,影响编译器的-I 参数 ,组件内有效
#     - include
#   cflag: ''                              # <可选项> C 编译器所需要要的编译参数
#   cxxflag: ''                            # <可选项> CXX 编译器所需要要的编译参数
#   asmflag: ''                            # <可选项> 汇编器所需要要参数
#   define:                                # <可选项> 宏定义, 增加编译器的-D 选项,如:
#     XXX: 1                               #   -DXXX=1
#     AAA: 1                               #   -DAAA
#     STR: "abc"                           #   -DSTR="abc"
#   libs:                                  # 该组件中支持的二进制静态库,如:libxxx.a, libyyy.a
#     - xxx                                #   -lxxx
#     - yyy                                #   -lyyy
#   libpath:                               # 指定静态库所在的路径(相对于该组件路径)
#     - libs                               #   -Llibs
build_config:cflag: >-march=rv32imc -ffunction-sections -fdata-sections -Wall -Wextra -Wno-unused-parameter-Wno-sign-compare -ggdb -nostartfiles -Wno-format -O2 -fstrict-volatile-bitfields-fno-jump-tables -fno-tree-switch-conversion -std=gnu99 -Wno-old-style-declaration-Wno-clobbered -Wno-deprecated-declarations -Wno-missing-field-initializers -DKERNEL=FREERTOScxxflag: >-march=rv32imc -ffunction-sections -fdata-sections -Wall -Wextra -Wno-unused-parameter-Wno-sign-compare -ggdb -nostartfiles -Wno-format -O2 -fstrict-volatile-bitfields-fno-jump-tables -fno-tree-switch-conversion -std=gnu99 -Wno-old-style-declaration-Wno-clobbered -Wno-deprecated-declarations -Wno-missing-field-initializers-std=gnu++11 -fno-exceptions -fno-rtti -fpermissive -DKERNEL=FREERTOSldflag: >-march=rv32imc -nostartfiles --specs=nosys.specs -Wl,--cref -Wl,--Map="aos.map" -Wl,--gc-sections-fno-rtti -fno-lto -Wl,--wrap=vPortCleanUpTCB-uesp_app_desc -upthread_include_pthread_impl -upthread_include_pthread_cond_impl -u__ubsan_include-upthread_include_pthread_local_storage_impl -upthread_include_pthread_rwlock_impl-u__cxx_fatal_exception -uvfs_include_syscalls_impl -uapp_main -unewlib_include_heap_impl-unewlib_include_syscalls_impl -unewlib_include_pthread_impl  -unewlib_include_assert_impl-u__cxa_guard_dummy -Tmemory.ld -Tsections.ld -Tesp32c3.rom.ld -Tesp32c3.rom.api.ld-Tesp32c3.rom.libgcc.ld -Tesp32c3.rom.newlib.ld -Tesp32c3.rom.version.ld -Tesp32c3.rom.eco3.ld-Tesp32c3.peripherals.ld  -Wl,--undefined=uxTopUsedPriority-Wl,--wrap=_Unwind_SetEnableExceptionFdeSorting  -Wl,--wrap=__register_frame_info_bases-Wl,--wrap=__register_frame_info  -Wl,--wrap=__register_frame-Wl,--wrap=__register_frame_info_table_bases -Wl,--wrap=__register_frame_info_table-Wl,--wrap=__register_frame_table -Wl,--wrap=__deregister_frame_info_bases-Wl,--wrap=__deregister_frame_info  -Wl,--wrap=_Unwind_Find_FDE  -Wl,--wrap=_Unwind_GetGR-Wl,--wrap=_Unwind_GetCFA -Wl,--wrap=_Unwind_GetIP  -Wl,--wrap=_Unwind_GetIPInfo-Wl,--wrap=_Unwind_GetRegionStart -Wl,--wrap=_Unwind_GetDataRelBase-Wl,--wrap=_Unwind_GetTextRelBase -Wl,--wrap=_Unwind_SetIP  -Wl,--wrap=_Unwind_SetGR-Wl,--wrap=_Unwind_GetLanguageSpecificData -Wl,--wrap=_Unwind_FindEnclosingFunction-Wl,--wrap=_Unwind_Resume -Wl,--wrap=_Unwind_RaiseException-Wl,--wrap=_Unwind_DeleteException -Wl,--wrap=_Unwind_ForcedUnwind-Wl,--wrap=_Unwind_Resume_or_Rethrow -Wl,--wrap=_Unwind_Backtrace-Wl,--wrap=__cxa_call_unexpected -Wl,--wrap=__gxx_personality_v0-lstdc++ -lgcc -lgcov -lc -lm -z muldefsinclude:- esp-idf/components/newlib/platform_include- esp-idf/components/freertos/include- esp-idf/components/freertos/include/esp_additions/freertos- esp-idf/components/freertos/port/riscv/include- esp-idf/components/freertos/include/esp_additions- esp-idf/components/esp_hw_support/include- esp-idf/components/esp_hw_support/include/soc- esp-idf/components/esp_hw_support/include/soc/esp32c3- esp-idf/components/esp_hw_support/port/esp32c3- esp-idf/components/esp_hw_support/port/esp32c3/private_include- esp-idf/components/heap/include- esp-idf/components/log/include- esp-idf/components/lwip/include/apps- esp-idf/components/lwip/include/apps/sntp- esp-idf/components/lwip/lwip/src/include- esp-idf/components/lwip/port/esp32/include- esp-idf/components/lwip/port/esp32/include/arch- esp-idf/components/soc/include- esp-idf/components/soc/esp32c3- esp-idf/components/soc/esp32c3/include- esp-idf/components/hal/esp32c3/include- esp-idf/components/hal/include- esp-idf/components/hal/platform_port/include- esp-idf/components/esp_rom/include- esp-idf/components/esp_rom/include/esp32c3- esp-idf/components/esp_rom/esp32c3- esp-idf/components/esp_common/include- esp-idf/components/esp_system/include- esp-idf/components/esp_system/port/soc- esp-idf/components/esp_system/port/include/riscv- esp-idf/components/esp_system/port/public_compat- esp-idf/components/riscv/include- esp-idf/components/driver/include- esp-idf/components/driver/esp32c3/include- esp-idf/components/esp_pm/include- esp-idf/components/esp_ringbuf/include- esp-idf/components/efuse/include- esp-idf/components/efuse/esp32c3/include- esp-idf/components/vfs/include- esp-idf/components/esp_wifi/include- esp-idf/components/esp_event/include- esp-idf/components/esp_netif/include- esp-idf/components/esp_eth/include- esp-idf/components/tcpip_adapter/include- esp-idf/components/esp_phy/include- esp-idf/components/esp_phy/esp32c3/include- esp-idf/components/esp_ipc/include- esp-idf/components/app_trace/include- esp-idf/components/esp_timer/include- esp-idf/components/app_update/include- esp-idf/components/spi_flash/include- esp-idf/components/bootloader_support/include- esp-idf/components/bt/common/osi/include- esp-idf/components/bt/include/esp32c3/include- esp-idf/components/bt/common/api/include/api- esp-idf/components/bt/common/btc/profile/esp/blufi/include- esp-idf/components/bt/common/btc/profile/esp/include- esp-idf/components/bt/host/nimble/nimble/porting/nimble/include- esp-idf/components/bt/host/nimble/port/include- esp-idf/components/bt/host/nimble/nimble/nimble/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/ans/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/bas/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/dis/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/gap/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/gatt/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/ias/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/ipss/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/lls/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/services/tps/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/util/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/store/ram/include- esp-idf/components/bt/host/nimble/nimble/nimble/host/store/config/include- esp-idf/components/bt/host/nimble/nimble/porting/npl/freertos/include- esp-idf/components/bt/host/nimble/esp-hci/include- esp-idf/components/nvs_flash/include- esp-idf/components/mbedtls/port/include- esp-idf/components/mbedtls/mbedtls/include- esp-idf/components/mbedtls/esp_crt_bundle/include- esp-idf/components/mdns/include- esp-idf/components/console- esp-idf/components/sdmmc/include- esp-idf/components/fatfs/vfs- esp-idf/components/fatfs/src- esp-idf/components/wear_levelling/include- esp-idf/components/json/cJSON- esp-idf/components/soc/esp32s3/includelibs:- esp_ringbuf- efuse- esp_ipc- driver- esp_pm- mbedtls- mbedcrypto- mbedx509- coexist- core- espnow- mesh- net80211- pp- smartconfig- wapi- app_update- bootloader_support- spi_flash- nvs_flash- pthread- esp_gdbstub- espcoredump- esp_phy- esp_system- esp_rom- hal- vfs- esp_eth- tcpip_adapter- esp_netif- esp_event- wpa_supplicant- esp_wifi- console- lwip- log- heap- soc- esp_hw_support- riscv- esp_common- esp_timer- freertos- newlib- cxx- app_trace- asio- bt- cbor- unity- cmock- coap- nghttp- esp-tls- esp_adc_cal- esp_hid- tcp_transport- esp_http_client- esp_http_server- esp_https_ota- esp_lcd- protobuf-c- protocomm- mdns- esp_local_ctrl- sdmmc- esp_serial_slave_link- esp_websocket_client- expat- wear_levelling- fatfs- freemodbus- jsmn- json- liblibsodium- mqtt- openssl- spiffs- wifi_provisioning- main- btdm_app- btbb- phylibpath:- esp-idf/components/bt/controller/lib_esp32c3_family/esp32c3- esp-idf/components/esp_phy/lib/esp32c3- esp-idf/components/esp_wifi/lib/esp32c3- esp-idf/components/soc/esp32c3/ld- esp-idf/components/esp_rom/esp32c3/ld## 第五部分:配置信息
def_config:                              # 组件的可配置项IDF_VER: "8153bfe4"ESP_PLATFORM: 1OS_FREERTOS: 1MBEDTLS_CONFIG_FILE: "mbedtls/esp_config.h"CONFIG_ESP_DISPATCHER_DELEGATE_TASK_CORE: 0CONFIG_ESP_DISPATCHER_DELEGATE_TASK_PRIO: 10CONFIG_ESP_DISPATCHER_DELEGATE_STACK_SIZE: 4096hw_info:arch_name: riscvcpu_name: ESP32-C3toolchain_prefix: riscv32-esp-elfvendor_name: espressifld_script: espressif_idf.lds## 第六部分:安装信息
# install:
#   - dest: include/                       # 安装的目的路径 dest是相当路径,通常是相对于YoC SDK 安装目录
#     source:                              # 安装源列表
#      - src/*.h                           # 支持通配符,相对路径
# install:
#   - dest: "include"
#     source:
#       - hal/2ndboot/*.h
#       - aos/*.h
#       - aos/arch/*.h
#       - drivers/platform/hal/*.h
#       - drivers/platform/cmsis/inc/*.h
#       - drivers/rtos/rhino/cmsis/*.h
#       - drivers/utils/hwtimer_list/*.h
#       - drivers/platform/hal/haas1000/*.h
#       - drivers/services/wifi_app/alsa_adapter/*.h
#   - dest: "lib"
#     source:
#       - drivers/libmcuhaas1000.a ? <!CONFIG_A7_DSP_ENABLE>
#       - drivers/libmcuhaas1000_a7.a ? <CONFIG_A7_DSP_ENABLE>## 第七部分:导出部分
# export:
#   - dest: "<SOLUTION_PATH>/generated/data" # 安装的目的路径 dest是相当路径
#     source:                                # 安装源列表
#       - "bootimgs/boot"
#       - "bootimgs/tee"
#       - "bootimgs/mtb"
#       - "configs/config.yaml"

1.2 espressif_idf.lds设置

# 重命名.lds文件,该文件内容为空
mv hardware/chip/espressif_esp32_c3/_esp32_alios.lds hardware/chip/espressif_esp32_c3/espressif_idf.lds

2. board配置:

2.1 生成nodemcu32_c3/package.yaml

cp -a hardware/board/nodemcu32s hardware/board/nodemcu32s_c3

修改hardware/board/nodemcu32_c3/package.yaml

## 第一部分: 基础信息
name: nodemcu32s_c3                                      # <必选项> 包名称 (符合C语言变量命名规则),长度少于等于64字节
version: dev_aos                                   # <必选项> 组件版本号
description: NodeMCU-32SC3 board configure.             # <必选项> 建议至少20字以上
type: board                                        # <必选项> 组件类型,为:solution, chip, board, commontag: 核心模块                                      # <可选项> 组件分类,缺省值: ''## 第二部分:依赖信息
#           指定该组件依赖的组件及版本,版本支持条件比较,支持:>=v1.0, >v1.0, ==v1.0, <=v1.0, <v1.0, v1.0
#           未指定条件时,默认为 ==,如 v1.0 与 ==v1.0
# depends:                                 # <可选项> 该组件依赖其他的组件,合理的依赖才能保证组件能编译、使用
#   - minilibc: v7.2.0
#   - aos: >=v7.2.0
depends:- espressif_esp32_c3: masterboard:chip_name: espressif_esp32_c3def_config:BOARD_NODEMCU32C3: 1SYSINFO_MCU: "ESP32"SYSINFO_BOARD: "NODEMCU32C3"# littlefs configCONFIG_LITTLEFS_CNT: 1 # lfs supports up to 2 partitions, please choose 1 or 2 hereCONFIG_LFS_MOUNTPOINT: "" # the mount path of the lfs partitionCONFIG_MAX_FILES: 10 # concurrently opened files numCONFIG_LFS_PROG_SIZE: 256CONFIG_LFS_PAGE_NUM_PER_BLOCK: 16LFS_CONFIG_DEBUG: 0LFS_CONFIG_TRACE: 0
# CONFIG_LFS_PROG_SIZE: 1024 # the mininal programable size, usually page size for nand and any size for nor
#  CONFIG_LFS_PAGE_NUM_PER_BLOCK: 4 # choose the right value for nand, and usually any value for nor
#  CONFIG_LFS_BLOCK_NUMS: 1198 # the total block count for lfs parition

3. 工程配置:

3.1 package.yaml(无需修改)

文件:solutions/py_engine_esp32_demo/package.yaml 文件根据工程选择,自动修改

3.2 makeimg.sh

文件:solutions/py_engine_esp32_demo/makeimg.sh

修改 espressif_esp32 为 espressif_esp32_c3
修改 --chip esp32 为 --chip esp32c3

3.3 makeimg.py

文件:olutions/py_engine_esp32_demo/makeimg.py

可根据需要,注释如下data部分:

files_in = [("bootloader", offset_bootloader, max_size_bootloader, arg_bootloader_bin),("partitions", offset_partitions, max_size_partitions, arg_partitions_bin),("application", offset_application, max_size_application, arg_application_bin),//("data", offset_data, max_size_data, arg_data_bin),
]

4. 组件配置

4.1 设置编译配置参数:GENERIC_C3/sdkconfig.board

修改文件文件components/py_engine/adapter/esp32/boards/GENERIC_C3/sdkconfig.board,添加如下信息:

CONFIG_ESP32C3_REV_MIN_3=y
CONFIG_ESP32C3_REV_MIN=3
CONFIG_ESP32C3_BROWNOUT_DET=y
CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_7=
CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_4=y
CONFIG_ESP32C3_BROWNOUT_DET_LVL=4
CONFIG_ESP_CONSOLE_UART_DEFAULT=y
CONFIG_ESP_CONSOLE_USB_CDC=
CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG=CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096
4.1.1 2MB规格开发板特殊处理
4.1.1.1 启用2MB配置

修改文件文件components/py_engine/adapter/esp32/boards/GENERIC_C3/sdkconfig.board,继续添加如下信息:

# 此处应修改该文件中已有的配置
CONFIG_PARTITION_TABLE_OFFSET=0x9000# 2M规格
CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-2MiB.csv"
4.1.1.2 配置对应分区表

修改文件文件components/py_engine/adapter/esp32/partitions-2MiB.csv:

# 注释原有的,添加下面的:
factory,    app,    factory,0x10000,    1900k,
nvs,        data,   nvs,    0x1eb000,    4K,
phy_init,   data,   phy,    0x1ec000,    4K,
vfs,        data,   fat,    0x1ed000,   72K,
kv,         data,   131,    0x1ff000,   4K,

说明:因为固件本身接近1.9M,故取消了OTA分区,其他分区也相应减小

4.2 修改源码:components/py_engine/

4.2.1 adapter/esp32/main.c

文件:components/py_engine/adapter/esp32/main.c,注释machine_i2s_init0调用;

或者修改adapter/esp32/mpconfigport.h设置MICROPY_PY_MACHINE_I2S定义为0

 #if MICROPY_PY_MACHINE_I2S
-    machine_i2s_init0();
+    // machine_i2s_init0();#endif
#ifndef MICROPY_PY_MACHINE_I2S
- #define MICROPY_PY_MACHINE_I2S              (1)
+ #define MICROPY_PY_MACHINE_I2S              (0)
#endif
4.2.2 adapter/esp32/uart.c

文件:components/py_engine/adapter/esp32/uart.c 大量修改


#include "uart.h"STATIC void uart_irq_handler(void *arg);void uart_init(void) {uart_config_t uartcfg = {.baud_rate = MICROPY_HW_UART_REPL_BAUD,.data_bits = UART_DATA_8_BITS,.parity = UART_PARITY_DISABLE,.stop_bits = UART_STOP_BITS_1,.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,.rx_flow_ctrl_thresh = 0};uart_param_config(MICROPY_HW_UART_REPL, &uartcfg);const uint32_t rxbuf = 129; // IDF requires > 128 minconst uint32_t txbuf = 0;uart_driver_install(MICROPY_HW_UART_REPL, rxbuf, txbuf, 0, NULL, 0);uart_isr_handle_t handle;uart_isr_free(MICROPY_HW_UART_REPL);uart_isr_register(MICROPY_HW_UART_REPL, uart_irq_handler, NULL, ESP_INTR_FLAG_LOWMED | ESP_INTR_FLAG_IRAM, &handle);uart_enable_rx_intr(MICROPY_HW_UART_REPL);
}int uart_stdout_tx_strn(const char *str, size_t len) {size_t remaining = len;// TODO add a timeoutfor (;;) {int ret = uart_tx_chars(MICROPY_HW_UART_REPL, str, remaining);if (ret == -1) {return -1;}remaining -= ret;if (remaining <= 0) {break;}str += ret;ulTaskNotifyTake(pdFALSE, 1);}return len - remaining;
}STATIC void IRAM_ATTR uart_irq_handler(void *arg) {volatile uart_dev_t *uart = &UART0;#if CONFIG_IDF_TARGET_ESP32S3uart->int_clr.rxfifo_full_int_clr = 1;uart->int_clr.rxfifo_tout_int_clr = 1;#elseuart->int_clr.rxfifo_full = 1;uart->int_clr.rxfifo_tout = 1;uart->int_clr.frm_err = 1;#endifwhile (uart->status.rxfifo_cnt) {#if CONFIG_IDF_TARGET_ESP32uint8_t c = uart->fifo.rw_byte;#elif CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3uint8_t c = READ_PERI_REG(UART_FIFO_AHB_REG(0)); // UART0#endifif (c == mp_interrupt_char) {mp_sched_keyboard_interrupt();} else {// this is an inline function so will be in IRAMringbuf_put(&stdin_ringbuf, c);}}
}
4.2.3 adapter/esp32/uart.h

文件:components/py_engine/adapter/esp32/uart.h

#ifndef MICROPY_INCLUDED_ESP32_UART_H
#define MICROPY_INCLUDED_ESP32_UART_H+ #ifndef MICROPY_HW_UART_REPL
+ #define MICROPY_HW_UART_REPL (UART_NUM_0)
+ #endif+ #ifndef MICROPY_HW_UART_REPL_BAUD
+ #define MICROPY_HW_UART_REPL_BAUD (115200)
+ #endifvoid uart_init(void);
+ int uart_stdout_tx_strn(const char *str, size_t len);#endif // MICROPY_INCLUDED_ESP32_UART_H

4.3 脚本:

4.3.1 build_cmake.sh(无需修改)

文件:components/py_engine/build_cmake.sh

无需修改,内置C3,只要前面board配置正确名称为NODEMCU32C3即可

三、编译

使用haas studio的编译按钮编译,或者使用如下指令:

# 在 AliOS-Things 根目录操作
aos make V=1 2>&1 | tee build.log

如编译错误,通过build.log查看错误信息,关键字:【error:】、【failed】、【raise】

四、烧录

# esptool.py 在macOS、Linux命令会自动查找可用串口
esptool.py --chip esp32c3 --baud 460800 write_flash -z 0x0 firmware.bin# 手动设置串口:  --port 串口名称# 如遇到问题,可以先清空flash: esptool.py --chip esp32c3 erase_flash

五、测试

# 使用串口工具或者终端连接,波特率115200
>>> help()
>>> import machine
>>> machine.reset()
>>> help('modules')

六、可能问题

1. sdkconfig.h

提示:fatal error: sdkconfig.h: No such file or directory
原因:查找该信息前面的错误信息,找到根源

2. genhdr/qstrdefs.generated.h

# components/py_engine/engine/py/qstr.h
问题:
components/py_engine/engine/py/qstr.h:44:14: fatal error: genhdr/qstrdefs.generated.h: No such file or directory检查:
vim components/py_engine/engine/py/qstr.h
#define QDEF0(id, str) id,
#define QDEF1(id, str)#include "genhdr/qstrdefs.generated.h"
#undef QDEF0
#undef QDEF1find . -name "qstrdefs.generated.h"
./adapter/esp32/build-GENERIC_C3/genhdr/qstrdefs.generated.h
./engine/mpy-cross/build/genhdr/qstrdefs.generated.h处理:
正确设置hardware/board/nodemcu32_c3/package.yaml中的BOARD_NODEMCU32C3,就不会出现该错误

3. esp32/machine_pin.c

# components/py_engine/adapter/esp32/machine_pin.c
问题:
components/py_engine/adapter/esp32/machine_pin.c:264:29: error: 'USB_DEVICE_CONF0_REG' undeclared (first use in this function); did you mean 'UART_SWFC_CONF0_REG'?处理:
考虑先注释掉? 注释后,micropython部分可以编译通过#if CONFIG_IDF_TARGET_ESP32C3if (self->id == 18 || self->id == 19) {// CLEAR_PERI_REG_MASK(USB_DEVICE_CONF0_REG, USB_DEVICE_USB_PAD_ENABLE);}

【HaaS Python适配】AliOS-Things HAAS-Python ESP32-C3开发板适配和编译相关推荐

  1. Arduino手动添加ESP32相关开发板(图文并茂)

    一.前述   使用Arduino开发ESP32,就绕不开添加ESP32开发板这一步,网上有很多相关教程,介绍的很详细,但是在实际操作过程中还是遇到一些问题,所以在这里记录一下,希望可以帮到别人.    ...

  2. 启扬i.MX8M Plus开发板适配LVDS屏幕的调试思路

    i.MX 8M Plus是NXP推出的一款具有高可靠性,适合用于机器学习和视觉.高级多媒体和工业物联网的处理器.为发挥其强大的多媒体性能,启扬在i.MX8M Plus配套底板上引出1 路 4 通道 M ...

  3. 【安信可ESP32语音开发板专题②】ESP32-Audio-Kit 开发板适配百度dueros例程实现在线语音功能,与开发板对话聊天。

    文章目录 前言 一.准备工作 1.硬件准备 2.软件准备 二.验证ESP-ADF是否正常 1. 代码简单修改 2.播放MP3测试 三.dueros 例程适配 1.替换连接文件 2.内存卡准备 3. 代 ...

  4. ESP32彩屏开发板(WT32-SC01),除了买买买,你还可以参与一起设计了

    基于ESP32彩屏的开发板已在Git Hub平台上开源给所有的开发者了! 硬件参数: 显示屏:3.5 英尺 LCD 屏幕 分辨率:320*480 SoC:ESP32-WROVER-B 模组 CPU:双 ...

  5. 【安信可ESP32语音开发板专题①】ESP32-A1S音频开发板之离线语音识别控制LED灯

    ---------- 本博客学习由 安信可开源团队 潜心编写,做ESP32-A1S离线语音初步入门技术交流分享.如有不完善之处,请留言,本团队及时更改. 文章目录 一.前言 二.离线语音框架 2.1 ...

  6. esp32录音功能开发_【安信可ESP32语音开发板专题①】ESP32-A1S音频开发板之离线语音识别控制LED灯...

    本博客学习由 一.前言 离线语音,顾名思义:在不连网络的状态下,产品能识别语音指令并执行相应的控制输出. 安信可基于乐鑫ESP32芯片开发的ESP32-A1S开发板智能语音助手,可支持唤醒词引擎(Wa ...

  7. 我用树莓派Pico学Python (5) - 按键检测 以及 新买的开发板底板

    因为觉得之前买的开发板底板的引出接口使用起来不方便(标识不清晰,以及3.3V和GND引出的插针太少),我又买了一个开发板底板,这个板子的引出插针很多,且每个引出的GPIO都"配备" ...

  8. M5stack StickCplus ESP32物联网开发板初体验

    一.外观 和arduino uno进行对比,大概只有uno的三分之一大小 资料链接 https://docs.m5stack.com/zh_CN/products https://docs.m5sta ...

  9. 海凌科7621开发板适配新版openwrt

    最近在海凌科买了一块7621的开发板,flash是32M的,ddram是256M的,性价比感觉不错,海凌科提供的openwrt是比较旧的版本,在openwrt最新的19.07版本里已有的硬件都有一定的 ...

最新文章

  1. Python基础07-数据类型:字典dict
  2. (020)java后台开发之JAVA集合中的List接口
  3. linux+不同分区mv,mv操作深入浅出
  4. sonar 设置模板(Template)
  5. 非常详细的Exchange 功能路线图
  6. html 垂直线代码,html – Bootstrap 3水平和垂直分隔线
  7. Dell Latitude D630 无法wubi安装Kubuntu
  8. 成都刘女士的第一场锤子科技发布会 | 现场特写
  9. 边缘保留滤波matlab,【DIP】各种边缘保留滤波器一览
  10. python 背单词_背单词方法大全
  11. JAVA 算法 回溯
  12. 汽车维修企业管理【14】
  13. TS实现Base64的加密解密
  14. 机房电脑怎么批量修改计算机名,批量设置IP地址和计算机名
  15. Debian启动自定义桌面
  16. Python写网络爬虫(三)
  17. android10和11,安卓10与安卓11究竟差异在哪里?我们拿这两台新机试了一下
  18. NGINX负载均衡与本地路径映射
  19. java B2B2C Springcloud电子商务平台源码------Hystrix的缓存使用
  20. awk中处理asc码

热门文章

  1. java 管理 程序设计_Java程序设计——学生基本信息管理系统
  2. 如何才能不崩溃 7: Dealing with Nothing
  3. 华为“三位一体”的人才管理之道
  4. 软件系统架构师复习大纲要点
  5. 有关jquery knob 插件应用- -|||
  6. Two Scoops Django 推荐的数据模型最佳实践
  7. node-sass模块报错安装不上?试试这个方法,亲测有效
  8. Vue:array的变化侦测
  9. 怎么按场景需求创建企微欢迎语?
  10. Python使用Opencv图像处理方法完成手势识别(一)