# EWorkbench **Repository Path**: End-ING/eworkbench ## Basic Information - **Project Name**: EWorkbench - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-13 - **Last Updated**: 2026-09-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EWorkbench > 一站式通用嵌入式调试工作台 — 基于 OpenOCD,支持 ARM Cortex-M + RISC-V [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE) [![Status](https://img.shields.io/badge/status-beta-orange)](docs/PRD.md) ## 简介 EWorkbench 是一款跨架构的嵌入式开发调试工作台,以 **OpenOCD** 作为硬件访问后端,提供 Zone 源码调试、外设寄存器浏览、Flash 烧录、交互式命令行、RTT 实时日志、变量波形监控、故障分析等全链路调试能力。 - **CPU 架构**:ARM Cortex-M/A/R + RISC-V(RV32/RV64,反汇编/寄存器/步进均自适应) - **调试探针**:DAPLink (CMSIS-DAP)、J-Link、ST-Link、WCH-Link 等(USB 即插即用 + 热插拔检测) - **目标芯片**:只要 OpenOCD 有对应 target cfg 即可支持(内置扫描 300+ 芯片配置,也支持自定义 .cfg 路径) 技术栈:Electron 33 + React 18 + TypeScript + Zustand 前端;Python FastAPI 后端(OpenOCD 子进程 + telnet/TCL 协议);REST API + WebSocket 实时事件。 --- ## 功能总览 ### 🔌 连接管理 - 探针 USB 扫描(VID:PID 识别 CMSIS-DAP / ST-Link / J-Link / WCH-Link),**热插拔实时检测** - 预置 target/interface 配置下拉 + 自定义 .cfg 绝对路径,支持**浏览文件夹**选择 - 速度预设 100kHz–20MHz,**状态栏运行中可下拉改速** - 4 种连接模式:Attach / Halt / Pre-Reset / Under Reset - 目标芯片信息识别;连接配置持久化;设备档案一键套用 ### ⚡ Zone 源码调试 - **运行控制**:Halt / Continue / Step Into / Step Over / Step Out / Run to Line / Reset - **断点系统**:地址 / 符号名 / `文件:行号`;条件断点 / 日志点 / 执行命令;启用禁用 / 命中计数 - **Monaco 源码视图**:PC 行高亮、hover 变量实时值、可编辑模式、F12 跳转定义 - 反汇编视图(ARM Thumb / RISC-V 自适应)、寄存器面板(双击编辑写回) - Watch 变量监视、调用栈回溯、Zone Console(OpenOCD TCL 终端) - **硬件 Watchpoint**(DWT 数据观察点,读/写/读写模式) - **zone.halted 事件推送**(WebSocket 实时通知) ### 📦 Peripherals 外设寄存器(SVD 驱动) - **独立三栏工作区**:左侧外设树 + 中间寄存器表 + 右侧详情面板 - SVD 手动加载,支持浏览文件夹选择 `.svd` 文件 - 外设树搜索过滤,寄存器列表支持勾选关注 - **批量读取**:读取全部 / 读取勾选项 - 寄存器详情:地址、偏移、位宽、访问权限、Reset 值 - **位域编辑**:枚举值解析、读改写、写入确认对话框 - Halt before read / Auto-read after write 可选开关 ### 💾 Flash 烧录 - 支持 **bin / hex / elf / axf** - Program / Verify / 整片擦除 / **扇区勾选擦除** / 地址范围擦除 / **回读** - **Check Blank**、**Compare**(文件 vs 设备逐字节比对) - **Fill**(Flash 区域走标准 `erase_address` + `fillw/h/b` 烧录算法,保持调用前目标状态) - 扇区越界保护、操作互斥锁、真实阶段进度条 ### ⌨️ Commander 命令行 - OpenOCD **TCL 命令全透传**,xterm 终端 - 快捷命令面板、命令参考、一键工作流 - Windows 路径转换 ### 📡 RTT Viewer - 控制块地址自动搜索、多通道、切页不断流 - Text/HEX 收发、协议校验、日志着色、录制保存 ### 📊 Monitor 变量监控 - ELF 符号自动提取、变量树分组 - SWD 非侵入采样 1–200Hz、uPlot 波形、触发、双游标测量 - 持久录制 + 回放 + CSV 导出 - Monitor 写值(统一走 OpenOCDBackend 内存写入) ### 🔧 工具集 - **Fault Analyzer**:CFSR/HFSR 位级解析、直读目标、Vector Catch - **Map Analyzer**:AC5/AC6/GCC 三种格式、ECharts 可视化 - **Number Converter**:10/16/2/8 联动、32 位位网格 - **File Checksum**:CRC32 / MD5 / SHA-1 / SHA-256 ### ⚙️ 设置 / 主题 - OpenOCD 路径配置(带浏览按钮)、脚本目录自动探测、默认连接参数 - **应用主题**(5 套:Industrial Dark / VS Code Dark / One Dark / Solarized Dark / GitHub Light)——控制整个软件的背景、面板、边框、文字和强调色 - **编辑器主题**(7 套,仅 Zone 源码视图) - **终端主题**(6 套,仅 Commander) - 设备档案管理、全局日志控制台、通知历史 --- ## 环境要求 - Node.js 20+、npm - Python 3.11+(含 venv) - OpenOCD 0.11+(需在设置中指定路径或加入 PATH) - 调试探针 + 目标板(Windows 10+) ## 快速开始 ```bash # 1. 安装前端依赖 npm install # 2. 创建 Python 虚拟环境并安装后端依赖 npm run backend:install # 3. 启动开发模式(自动拉起 Python 后端) npm run dev ``` 启动后:首次进入**连接页** → 选择探针 → 选择 target cfg → 选择速度 → 连接。连接成功后侧栏解锁全部功能页。 > 设置持久化在 `~/.eworkbench/settings.json`;Monitor 录制文件在 `~/.eworkbench/records/`。 ### 打包发布 ```bash npm run package # PyInstaller 打包后端 → 构建前端 → electron-builder 生成 NSIS 安装包 npm run package:clean # 清理后重新打包 ``` 产物在 `release/EWorkbench-0.1.0-x64-setup.exe`(约 116 MB)。打包后应用自带 Python 后端(免装 Python)。 > 打包脚本已内置国内镜像加速(`build.ps1`),避免 electron-builder 下载超时。 --- ## HIL 硬件在环测试 项目包含完整的独立模块化 HIL 测试体系,每个模块使用独立的后端/OpenOCD 生命周期,模块间不共享连接状态。 ### 测试脚本 | 脚本 | 测试范围 | |------|---------| | `tests/test_connection.py` | 探针扫描、连接、断开、目标识别 | | `tests/test_debug.py` | Halt/Resume/Step/寄存器/内存/反汇编 | | `tests/test_breakpoints.py` | 断点设置/禁用/删除/命中 | | `tests/test_watchpoint.py` | 硬件观察点 set/remove | | `tests/test_dwarf.py` | ELF 加载、变量树、源码解析、PC 映射 | | `tests/test_flash.py` | 扇区列表、Check Blank、Fill、Readback | | `tests/test_monitor.py` | 变量添加、采样、写值、录制 | | `tests/run_isolated.py` | 每模块独立后端生命周期运行全部测试 | ### 运行方式 ```bash # 启动后端 .venv/Scripts/python.exe backend/server.py --port 8765 # 单个模块 .venv/Scripts/python.exe tests/test_debug.py --port 8765 # 全部模块(每模块独立后端) .venv/Scripts/python.exe tests/run_isolated.py # 完整 HIL(含真实烧录和破坏性测试) .venv/Scripts/python.exe tests/hil_test.py --port 8765 ``` ### 最近验证结果 最新 HIL 验证报告:**53 项全部通过,0 失败**。 覆盖:探针扫描、目标连接、ELF 烧录、DWARF、运行控制、寄存器、内存、断点、单步、调用栈、Watchpoint、zone.halted 事件、Monitor 采样/录制/200Hz、设备档案、Flash 扇区/越界保护/Check Blank/Fill/恢复、Map 解析、reset/disconnect。 详见 `docs/HIL-Verification-Report.md`。 测试报告 JSON 输出到 `tests/reports/`。 --- ## 架构说明 ``` ┌─────────────────────────────────────────────┐ │ Electron 主进程 (electron/) │ │ ├─ python-bridge: 启动/监控后端进程、端口握手 │ │ └─ IPC: 文件对话框 / 拖拽路径 / 剪贴板 │ ├─────────────────────────────────────────────┤ │ 渲染进程 (src/) React + Zustand │ │ ├─ services/ REST(axios) + WS 客户端 │ │ ├─ stores/ probe / rtt / ui 状态 │ │ └─ components/ 各功能页 │ ├───────────── REST + WebSocket ──────────────┤ │ Python 后端 (backend/) FastAPI │ │ ├─ api/ 路由层(无业务逻辑) │ │ ├─ core/ 业务层 │ │ │ ├─ openocd_backend.py 硬件访问统一入口 │ │ │ ├─ tcl_client.py telnet 协议客户端 │ │ │ ├─ breakpoints.py 断点表+软断点 │ │ │ ├─ elf_backend.py DWARF/符号 │ │ │ └─ monitor/rtt/svd/map/firmware ... │ │ └─ server.py 端口协商(stdout 输出 JSON) │ ├─────────────────────────────────────────────┤ │ OpenOCD 子进程(每探针一个,telnet 协议) │ └─────────────────────────────────────────────┘ ``` - **后端启动握手**:`server.py` 在 stdout 打印 `{"port": N}` - **实时事件**:单一 `/ws` 通道广播 - **目录结构**:前端页面在 `src/components//`;后端路由在 `backend/api/`,业务在 `backend/core/` --- ## 开发指南 ### 后端加一个 API 1. 在 `backend/api/` 新建路由文件,业务逻辑放 `backend/core/` 2. 在 `backend/server.py` 注册 router 3. 长任务进度用 `core/events.py` 的事件总线推前端 ### 前端加一个页面 1. 组件放 `src/components//XxxPage.tsx` 2. 在 `src/layouts/MainLayout.tsx` 的 `NAV_ITEMS` / 页面 switch 中注册 3. 跨页面状态用 Zustand ### 测试与质量 ```bash npx tsc --noEmit -p tsconfig.json # 前端类型检查(提交前必跑) .venv/Scripts/python.exe -m compileall -q backend # 后端编译检查 .venv/Scripts/python.exe tests/run_isolated.py # 独立模块 HIL 测试 ``` ### 打包 `build.ps1`(编排)+ `backend/eworkbench-backend.spec`(PyInstaller)+ `package.json` 的 `build` 段(electron-builder)。 --- ## 常见问题 | 问题 | 处理 | |---|---| | 后端端口占用 | `Get-NetTCPConnection -LocalPort 8765` 找 PID 后 `Stop-Process` | | 烧录报 "external reset detected" | 检查复位线/供电;已默认禁用 SRST 干扰并自动重试 | | 断点设置失败 | Cortex-M 硬件断点资源有限(一般 6 个);清空后重试 | | 探针扫描不到 | 检查驱动;WCH-Link 需 CMSIS-DAP 模式 | | RTT 搜不到控制块 | 确认固件链接 SEGGER RTT;或手动填地址 | | Monitor 运行中读不到值 | SWD 非侵入读在总线繁忙时偶发失败;降低采样率 | | 打包超时 | 已内置国内镜像;检查网络或手动设置 `ELECTRON_MIRROR` | ## 文档 | 文档 | 说明 | |---|---| | [PRD](docs/PRD.md) | 产品需求文档 | | [功能规格](docs/Functional-Spec.md) | 详细功能规格说明 | | [架构设计](docs/Architecture.md) | 系统架构与技术方案 | | [HIL 测试指南](docs/HIL-Testing-Guide.md) | 模块化 HIL 测试规范 | | [HIL 验证报告](docs/HIL-Verification-Report.md) | 最新真机验证结果 | | [OpenOCD 集成](docs/OpenOCD-Integration.md) | OpenOCD 集成方案 | ## 许可证 MIT License