cFlash一款图形化Flash分区配置与代码生成工具
2026/7/15 3:20:52 网站建设 项目流程

图形化 Flash 分区配置与代码生成工具。
不想再手算 offset?不想在 http://draw.io、Excel 和头文件之间来回同步?cFlash 把 Flash 分区变成“看得见、改得快、能生成、好分享”的配置文件。
flechazo.mba by flechazo一个有情怀的程序员
https://github.com/FlechazoCLF

仓库链接:https://gitee.com/carlchai/c-flash

cFlash

flechazo

cFlash 用于维护嵌入式项目的 Flash 地址规划,并自动生成可在工程中引用的分区常量。它把 Flash 分区配置、可视化查看、JSON 保存和代码生成放到同一个工具里,让分区调整从“手工改地址”变成“图形化配置后一键生成”。

🧭 为什么需要 cFlash

Boot 项目开发里,Flash 划分通常会同时存在于设计图和代码中:先用 http://draw.io 画出分区,再手工把地址、大小、偏移写进头文件。每次修改分区时,设计图和代码都要同步更新,重复、容易出错,也不够直观。

cFlash 希望把这件事收敛到一个工具里,少一点手工同步,多一点确定性:

过去现在
手工计算地址和偏移🖱️ 在图形界面里直接配置
设计图和代码分开维护📦 用 JSON 保存完整分区配置
手写一堆宏定义⚙️ 自动生成 flash_map.h 或 flash_map.py
分区改动靠口头同步🤝 把 JSON 发出去,对方打开就是同一份布局

✨ 核心优势

  • 🖱️配置方便:通过图形界面直接调整 Flash 基地址、总大小和各级分区,不需要反复手算偏移和地址。
  • ⚙️生成方便:配置完成后可以直接生成flash_map.hflash_map.py,减少手写宏定义带来的遗漏和错误。
  • 📦分享方便:分区信息统一保存在 JSON 文件中,把database/cFlash.json发给别人,就可以快速查看、复用或继续修改同一份 Flash 规划。

一句话流程:

打开工具 ->配置分区 ->保存 JSON ->生成代码 ->放进工程

cFlash

flechazo

🧰 功能特性

  • 🧱 图形化展示 Flash 分区布局。
  • 🧮 支持配置 Flash 基地址、总大小、编程页大小、擦除扇区大小和显示参数。
  • 📝 支持新增、编辑、删除、清空分区。
  • 🌳 支持父子分区关系,例如FLASH_ROOT -> BankA -> AppA -> AppInfo
  • 📄 使用database/cFlash.json保存配置。
  • 🧾 生成 C 头文件flash_map.h
  • 🐍 生成 Python 常量文件flash_map.py
  • 📍 生成内容包含分区偏移、大小、起始地址和结束地址。

📌 当前状态

当前项目已经具备基础图形化配置和代码生成功能,仍处于持续完善阶段。

项目状态
图形化 Flash 分区编辑✅ 已支持
JSON 配置保存✅ 已支持
C 头文件生成✅ 已支持
Python 常量文件生成✅ 已支持
C++ / Java 生成🧩 预留
安装包或发布包📝 待完善
开源许可证📝 待补充

🛠️ 环境要求

  • Qt 5 或 Qt 6,需包含 Widgets 模块。
  • Qt Creator,或支持 qmake 的命令行构建环境。
  • 支持 C++17 的编译器。

工程文件为:

🏗️ 构建方式

Qt Creator

  1. 使用 Qt Creator 打开cByte.pro
  2. 选择支持 Widgets 的 Qt Kit。
  3. 构建并运行工程。

命令行

在 Windows MinGW 环境下,执行qmake后使用对应的mingw32-make命令。

⚡ 快速开始

  1. 🚀 启动 cFlash。
  2. 📂 打开或编辑默认配置文件database/cFlash.json
  3. 🖱️ 在 Flash 分区视图中右键新增、编辑或删除分区。
  4. 🧱 双击根分区编辑 Flash 全局参数。
  5. 💾 保存 JSON 配置。
  6. ⚙️ 通过代码生成菜单导出flash_map.hflash_map.py
  7. 📦 将生成文件放入目标嵌入式工程中使用,或将 JSON 配置发给其他成员查看和协作修改。

📄 配置格式

默认配置文件为:

示例:

{"name":"cFlash","version":"1.0.0","flash":{"base_address":"0x0","total_size":"2097152","program_page_size":"256","erase_sector_size":"2048"},"blocks":[{"name":"FLASH_ROOT","parent":"","offset":"0","size":"2097152","info":"chip flash root"}]}

blocks中的每一项表示一个 Flash 分区:

字段说明
name分区名称,也是生成宏名的来源。
parent父分区名称,空字符串表示根分区。
offset相对父分区的偏移。
size分区大小,单位为字节。
info分区说明,会写入生成文件的注释中。
color图形界面中的显示颜色。
color_enable是否启用该分区的显示颜色。

绝对地址计算方式:

absolute_offset=parent offset chain + current offset address=FLASH_BASE_ADDRESS + absolute_offset

⚙️ 生成结果

🧾 C 头文件

cFlash 可以生成flash_map.h

示例:

#define FLASH_BASE_ADDRESS (0x0)#define FLASH_TOTAL_SIZE (0x200000)#define FLASH_PROGRAM_PAGE_SIZE (0x100)#define FLASH_ERASE_SECTOR_SIZE (0x800)#define APPA_OFFSET (0x60000)#define APPA_SIZE (0xA0000)#define APPA_ADDR (FLASH_BASE_ADDRESS + APPA_OFFSET)#define APPA_END_ADDR (APPA_ADDR + APPA_SIZE)

🐍 Python 常量文件

cFlash 也可以生成flash_map.py,用于让脚本或其他工具复用同一份 Flash 分区配置。

🗂️ 工程结构

cFlash/ ├── cByte.pro qmake 工程文件 ├── main.cpp 应用入口 ├── cbyte.cpp/.h 主窗口 ├── database/ │ └── cFlash.json 默认 Flash 分区配置 ├── display/ 图形显示、菜单、鼠标交互和分区编辑 ├── generator/ 代码生成逻辑 │ ├── generator_c/ C 生成器预留模块 │ ├── generator_cpp/ C++ 生成器预留模块 │ └── generator_python/ Python 生成器预留模块 └── kernel/ 基础类型、文件操作和 trace 支撑

🗺️ 后续计划

  • 完善同级分区重叠检查。
  • 恢复并完善显示颗粒度、编程页大小、擦除扇区大小等对齐检查。
  • 在生成输出文件前强制执行配置校验。
  • 将 C/Python 生成逻辑拆分到独立的生成器后端中。
  • 在 JSON 中增加schema_version,并支持后续配置迁移。
  • 增加工程级输出设置,例如默认输出目录、文件名、宏前缀和地址基准。
  • 增加输出预览或覆盖前 diff 确认。
  • 补充发布包和安装说明。
  • 补充开源许可证文件。

⚠️ 已知限制

  • 部分对齐检查逻辑已经存在,但当前仍处于禁用状态。
  • cc_display_protocol_validate()已经准备了children_map,但同级分区重叠检查还需要补齐。
  • 生成的 C 头文件 include guard 当前固定为_FLASH_MAP_H,多个工程或多份分区表并存时可能需要改成可配置。
  • cByte.pro.user是 Qt Creator 本地用户配置文件,不应提交到仓库。

🤝 参与贡献

欢迎大家通过 Issue 和 Pull Request 参与改进。

推荐优先完善的方向:

  • Flash 分区合法性校验。
  • 代码生成后端整理。
  • JSON schema 和版本迁移。
  • 发布包制作。
  • UI 易用性优化。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询