Files
ESPC3-wireless/README.md

4.2 KiB

项目说明

项目结构

.
├── app                 # 应用层代码。仅有一个入口 app_main.c/void work_app_main(void *arg)
│   ├── button          # 完整独立的按键检测模块代码(少量依赖底层抽象),上层使用接口文件: button.h
│   ├── config          # 配置文件
│   │   ├── app_config      # 应用层的配置,与具体硬件无关,只存放头文件,用以定义出厂默认配置,被上层 app_config.c 所包含,通过 idf.py menuconfig 配置
│   │   └── board_config    # 板载硬件的配置,仅与具体硬件相关,只存放头文件,用以适应不同的 PCB 布局,被上层 board_config.c 所包含,通过 idf.py menuconfig 配置
│   ├── drivers         # 拥有具体硬件的驱动代码,包括 MCU 外设
│   │   ├── data_port       # 数据端口,用于连接上层应用。由 sb_data_port.h 统一应用层的通讯接口,接口对象由具体硬件的驱动获得
│   │   └── ws2812_spi      # 使用 SPI 接口驱动 WS2812 灯珠的代码
│   ├── led_strip       # 灯带驱动,这里只提供一个 Kconfig 的示例
│   └── utils           # 工具函数,纯软件,与具体硬件无关
├── components          # 自定义组件。重点关注 system/include 目录,统一抽象实时内核和驱动接口
├── main                # 主函数。执行仅与具体平台相关的初始化,并调用 app_main.c/void work_app_main(void *arg) 开始运行应用
├── partitions.csv      # ESP32 的分区表。如无特殊需求不必修改
├── README.md           # 项目说明
├── release             # 发布文件。使用顶层目录的脚本自动生成,如 ./.release-sbdemo_s3.sh
├── sal                 # components 目录下抽象层的实现代码,实现实时内核和驱动接口的抽象
└── sdkconfig_defaults  # 默认配置文件,通过 idf.py menuconfig 配置

编译命令

$ get_idf  # 设置当前终端的编译环境变量,当打开一个新的终端时需要重新执行
$ ./.release-sbdemo_s3.sh # 仅需要切换项目时执行一次,需要新增项目时参考此文件添加一个配置
$ idf.py build size flash monitor # 编译、查看大小、烧录、打开串口

新增一个默认的配置

  • 当新增一个项目时,为方便设置不同项目间的配置差异,可以参考 sdkconfig_defaults 目录下的文件,生成一个默认的配置文件。具体操作方法:
  1. 使用 idf.py menuconfig 配置好一个项目。
  2. 使用 idf.py save-defconfig 保存配置。这将输出一个 sdkconfig.defaults 文件。
  3. 在 sdkconfig_defaults 目录下新增一个文件,文件名格式为: "sdkconfig.release_${FW_NAME}_${CHIP_NAME}${ADDITIONAL}.defaults" 。注意:文件名中的变量在第 6 步中定义。
  4. 把 sdkconfig.defaults 文件的内容复制到 "sdkconfig.release_${FW_NAME}_${CHIP_NAME}${ADDITIONAL}.defaults" 文件中。
  5. 以 .release-sbdemo_s3.sh 为例,复制一个新文件,命名规范为 .release-PRODUCT_ID_name.sh 。其中 PRODUCT_ID 在 app/config/version.h 中应与宏 PRODUCT_ID 所定义的值一致。注意 PRODUCT_ID 必须是6个字符。
  6. 根据实际项目修改 .release-PRODUCT_ID_name.sh 文件中变量的值。
  7. 使用 .release-PRODUCT_ID_name.sh 脚本生成固件。

其他功能概要

对设备调用的设计建议:

应用 <---> 设备抽象接口 <---> 设备驱动 <---> 硬件抽象接口 <---> 硬件驱动

实时内核: #include "os/os.h"

  • 请把所有与实时内核相关的代码通过此文件的接口调用。

命令行工具: #include "shell/sh.h"

  • 请参考 app/drivers/ws2812_spi/ws2812_spi_shell.c

调试日志: #include "sys_log.h"

  • 使用范例:
#define CONFIG_SYS_LOG_LEVEL SYS_LOG_LEVEL_DBG
#define SYS_LOG_DOMAIN "MAIN"
#include "sys_log.h"

int main(void)
{
    SYS_LOG_INF("Hello, World!");
    return 0;
}

内建隐藏的命令

  • 如果烧录是一个空片,终嵯不会出现程序运行日志,要打印日志,使内置的隐藏命令 'syslogON' 可打开日志。
  • 其他隐藏命令: 使用 which info 可打印隐藏命令的定义位置。