工程路径如下:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2025-6-6 23:59 build
-a---- 2023-12-30 1:51 224 CMakeLists.txt
-a---- 2023-11-9 22:45 336 flash_prog_cfg.ini
-a---- 2023-12-30 2:20 4928 main.c
-a---- 2025-6-6 23:58 258 Makefile
-a---- 2023-12-30 2:33 46076 OLED.c
-a---- 2023-12-30 2:14 2704 OLED.h
-a---- 2023-10-31 14:19 16114 OLED_Data.c
-a---- 2023-10-31 14:19 796 OLED_Data.h
-a---- 2023-11-9 22:45 18 proj.conf
以下是这些文件和目录的详细说明,按功能分类整理:
1. 核心代码文件
文件名 |
作用 |
main.c |
程序主入口文件,包含 main() 函数,初始化硬件并控制主流程。 |
OLED.c |
OLED 屏幕的驱动实现,包含初始化、绘图、显示等底层函数。 |
OLED.h |
OLED 驱动的头文件,声明函数、宏和数据结构。 |
OLED_Data.c |
存储 OLED 显示所需的静态数据(如字体、图标等二进制数据)。 |
OLED_Data.h |
声明 OLED_Data.c 中的常量或变量,供其他文件调用。 |
2. 构建系统文件
文件名 |
作用 |
CMakeLists.txt |
CMake 构建脚本,定义项目名称、源文件、依赖库等(你之前分析的配置文件)。 |
Makefile |
传统 Make 构建脚本(可能与 CMake 共存,用于兼容性或简化命令)。 |
build/ 目录 |
CMake/Make 生成的临时文件(如编译中间文件、可执行文件)的存放目录。 |
3. 烧录与配置
文件名 |
作用 |
flash_prog_cfg.ini |
烧录器配置文件,定义芯片型号、Flash 地址、波特率等(用于 blflash 等工具)。 |
proj.conf |
项目配置文件,可能包含 Wi-Fi 密码、硬件引脚定义等(被 CMakeLists.txt 引用)。 |
文件关系图
main.c
├─ 调用 OLED.h 中的函数
└─ 使用 OLED_Data.h 中的数据
OLED.c ── 实现 OLED.h 的功能
OLED_Data.c ── 提供数据给 OLED.c 使用
进阶实现 架构合理化
新的目录
---- ------------- ------ ----
d----- 2025-6-7 0:28 build
d----- 2025-6-7 0:09 inc
d----- 2025-6-7 0:17 src
-a---- 2025-6-7 0:28 1030 CMakeLists.txt
-a---- 2023-11-9 22:45 336 flash_prog_cfg.ini
-a---- 2025-6-7 0:20 256 Makefile
-a---- 2023-11-9 22:45 18 proj.conf
标准目录结构说明
项目根目录/
│
├── inc/ # 头文件目录
│ ├── oled.h # OLED 驱动头文件
│ └── oled_data.h # 显示数据头文件
│
├── src/ # 源文件目录
│ ├── oled.c # OLED 驱动实现
│ └── OLED_Data.c # 显示数据实现
│
├── build/ # 构建输出目录(自动生成)
├── main.c # 主程序入口
├── CMakeLists.txt # 构建配置文件
├── Makefile # 辅助 Makefile
├── proj.conf # 项目配置
└── flash_prog_cfg.ini # 烧录配置
关键调整说明
- 源文件组织:
- 所有实现文件(.c)集中在 src 目录
- 头文件(.h)集中在 inc 目录
这样的结构清晰分离了头文件和实现,便于维护和扩展,也符合大多数嵌入式项目的标准实践。
CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
# 包含项目配置文件 proj.conf(可能包含项目特定的设置或变量)
include(proj.conf)
# 查找并加载 Bouffalo Lab SDK(必须存在,否则构建失败)
# 搜索路径参考环境变量 BL_SDK_BASE 指定的目录
find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})
# 向名为 "app" 的目标添加私有源文件:
# - src/oled.c OLED 驱动实现文件
# - src/OLED_Data.c OLED 显示数据文件
target_sources(app PRIVATE
src/oled.c
src/OLED_Data.c
)
# 添加头文件搜索路径:
# - ./inc 目录(存放 OLED 相关的头文件,如 oled.h)
sdk_add_include_directories(./inc)
# 指定主程序入口文件为 main.c(包含 main() 函数)
sdk_set_main_file(src/main.c)
# 定义项目名称为 "i2c_oled"(基于 I2C 的 OLED 显示项目)
project(i2c_oled)
# 设置 VS Code 的c_cpp_properties.json 配置文件自动生成
sdk_set_vscode_dir(.)
还需要修改的地方
[cfg]
# 0: no erase, 1:programmed section erase, 2: chip erase
erase = 1
# skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated
skip_mode = 0x0, 0x0
# 0: not use isp mode, #1: isp mode
boot2_isp_mode = 0
[FW]
filedir = ./build/build_out/i2c*_$(CHIPNAME).bin
address = 0x000000
filedir需要和CMakeLists.txt的项目名称一致
- 例如 filedir = ./build/build_out/i2c_oled*_$(CHIPNAME).bin
- 这样 一个项目的 配置就搞好了。