Skip to content

Renode 固件仿真 ​

QDebugTool 可以启动 Renode 运行固件 ELF,把虚拟 UART 桥接成普通 TCP 通道,再继续使用参数表、收发区、波形和 HMI。e2 studio 或 STM32CubeIDE 可同时连接虚拟目标,进行断点、单步、内存和寄存器调试。

功能仿真,非实时

当前平台面向通信、协议和应用逻辑验证。RA6T2 的 GPT1 周期溢出可以驱动固件的 100 µs MainTask,但这只证明功能路径;电机 FOC、ADC/PWM 时序、真实 100 µs 周期、函数执行时间、中断延迟和晶振起振过程不能据此代替真机结论。

1. 准备工作 ​

  • Windows 10/11 64 位,QDebugTool 带对应平台模板。
  • Renode 1.17.0 便携版。开发环境放在 artifacts/renode-r0/renode/renode_1.17.0-portable/renode.exe;发行版放在 QDebugTool.exe 旁的 renode/renode.exe。
  • 已在原 IDE 编译固件,得到带调试符号的 .elf,例如 E:/RA6T2_Project/trunk/RA6T2/Debug/RA6T2.elf。
  • 当前 RA6T2 平台的 UART 使用中断驱动模型。若其固件仍把对应 SCI 的收发挂在 DTC 上,请先在 FSP 配置中移除这些 DTC transfer 模块并重新生成、编译;否则可能能接收但无法发送。

只需修改代码时,仍在原 IDE 中开发、编译,再把新生成的 ELF 交给仿真,不需要在 QDebugTool 中维护另一份源码。

当前平台与支持等级 ​

平台内核状态当前桥接边界
RA6T2Cortex-M33已验证SCI0/1/3/9、GDB、GPT1 周期任务非完整电机外设或硬实时仿真
RA6M5Cortex-M33实验SCI0/1、GDB真实固件和其他外设待验证
RA8M1Cortex-M85实验SCI0/1、GDB安全区和其他外设待验证
RA4M1Cortex-M4F实验SCI0/1、GDB真实固件和其他外设待验证
STM32F103Cortex-M3实验USART1/2、GDB真实固件和其他外设待验证
STM32F412Cortex-M4F实验USART1/2、GDB不代表全部 F4 料号,其他外设待验证
STM32H743Cortex-M7实验USART1/2、GDB真实固件和其他外设待验证
SiFive FE310RV32IMAC实验UART0/1、GDB真实固件和其他外设待验证
Kendryte K210RV64IMACFD 双核实验UART、GDB独立核调试和其他外设待验证

“实验”表示平台包和通道已提供,但尚未完成该型号真实固件的完整回归;不能把 UART 桥接成功理解为所有外设均已验证。平台下拉还收录 Renode 1.17.0 官方顶层 platforms/cpus 的其他 110 个平台,同样标为实验;这些平台未适配 UART 和 QDebugTool 启动流程,只提供通用 ELF/GDB 模板,可能还需要时钟、启动和外设适配。可用“型号筛选”按型号或系列过滤完整列表。

乐鑫说明:Renode 1.17.0 没有官方 ESP32 平台。第三方 renode-espemu 目前仅覆盖 ESP32-C3,并需要专用 ROM、额外启动脚本和外设模型;其仓库未声明开源许可,因此暂不纳入平台下拉和发行包。ESP32/ESP32-S3 也暂不能按已支持型号使用。

2. 直接打开示例 ​

示例工程:examples/cxfiot-仿真.proj。它保留了 CXF 上位机 Lua 通道、流解析表、HMI 地址库、曲线和组态,默认不自动连接设备。

  1. 打开工程,在项目树「仿真管理 → RA6T2」右键选择「属性」。
  2. 把「固件 ELF」改成本机 RA6T2 工程的实际产物路径,保存。
  3. 菜单「视图 → 仿真日志区」,点击「启动」,等待状态由「启动中」变为「运行中」。首次启动通常需要 10~50 秒。
  4. 项目树「连接管理 → 上位机」右键选择「连接设备」。该连接已经配置为 127.0.0.1:3461、本地 CXF Lua 模式,不需要再改帧格式。
  5. 打开「上位机·流解析」查看调试数据,或通过 HMI 地址库和组态画面写参数。

示例中的 ELF 路径和导入组态的 qeoutRcc 图片资源路径属于本机配置;复制到其他电脑后需要一并调整。只需要通信和参数表功能时,不依赖组态图片资源。

3. 从零新建仿真 ​

3.1 新建配置 ​

通过工具栏「新建 → 新建仿真」、项目树底部「仿真」或「仿真管理」右键菜单进入:

  • 名称:任意便于识别的名称。
  • 平台:按实际芯片选择;下拉会显示支持等级,切换后通道和构建提示同步变化。
  • 固件 ELF:选择原 IDE 生成的 .elf。
  • 构建命令:暂时留空;需要「编译并重载」时按第 5 节填写。

仿真配置随 .proj 保存。打开工程只恢复配置,不会自动启动 Renode;多个配置共享一套端口,同时只运行一个。

3.2 创建通信通道 ​

再次打开仿真属性,在「通道配置」对应行点击「新建通道」。QDebugTool 会预填主机、端口和协议;保存后它就是项目树中的普通连接,参数表、曲线和组态仍按原方式绑定。

虚拟外设TCP 地址建议用途
SCI9127.0.0.1:3456自由收发
SCI0127.0.0.1:3460自由收发
SCI1127.0.0.1:3461自由收发;CXF 示例使用此通道
SCI3127.0.0.1:3462Modbus RTU 从站

RA6T2 的 SCI3 通道使用 TCP 客户端 + Modbus RTU 裸帧。其他平台目前将 SCI0/USART1 映射到 3460、SCI1/USART2 映射到 3461,供自由收发或按固件协议使用。这里虽然走 TCP,但传输的是 UART 字节流,不是 Modbus TCP 的 MBAP 报文;Modbus 固件必须选择 RTU 帧格式。

3.3 启动并连接 ​

  1. 打开「视图 → 仿真日志区」。
  2. 右键仿真节点选择「启动仿真」,或点击日志区「启动」。
  3. 看到 Machine started 且状态变为「运行中」后,再连接对应设备。
  4. 参数表开始刷新后,即可读写参数、查看原始帧或打开曲线和组态。

先启动仿真再连接设备,可避免设备在 Renode 尚未监听端口时反复重连。

4. IDE 源码级调试 ​

Renode 在 127.0.0.1:3333 提供 GDB Server,IDE 直接连接它,不需要真实调试器,也不需要再启动第二个 Renode。以下以 e2 studio 为例:

  1. 先在 QDebugTool 中启动仿真并确认「运行中」。
  2. e2 studio 打开同一工程,进入 Run → Debug Configurations…。
  3. 新建 Renesas GDB Hardware Debugging 配置,选择当前工程和同一个 Debug/RA6T2.elf。
  4. 在调试器/GDB Server 设置中选择 Other remote target,主机填 127.0.0.1,端口填 3333。GDB 命令使用 RA 工具链的 arm-none-eabi-gdb。
  5. 点击 Apply → Debug。连接后可暂停、设置断点、单步、查看调用栈、变量、内存和寄存器。

STM32CubeIDE 使用对应的 GDB Hardware Debugging/远程目标配置,同样连接 127.0.0.1:3333,GDB 使用 arm-none-eabi-gdb。

修改源码后的推荐顺序:结束 IDE 调试会话 → 重新编译 → 在 QDebugTool 中热重载或重启仿真 → 重新连接调试。ELF 必须带符号;只有 HEX 时没有源码级调试信息。

5. 编译并重载 ​

在仿真属性的「构建命令」中填写 e2 studio 无头构建命令,例如:

bat
"C:/Renesas/e2studio/e2studio.exe" -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "E:/RA6T2_Project/workspace" -build RA6T2/Debug

把 e2studio.exe 和 -data 后的工作区路径换成本机实际值,-build 使用 工程名/构建配置。

  • 构建前会检查命令中的程序是否存在;构建输出显示在仿真日志区。
  • 构建成功且仿真正在运行时,自动执行暂停、重新加载 ELF、复位并继续。
  • 构建失败不会重载,正在运行的旧固件保持原状。
  • 在 e2 studio 外部重新编译后,仿真日志区会出现「检测到 ELF 已更新」;确认后点击「重载新 ELF」即可,不会在编译过程中自动复位。
  • 热重载失败时,可点击「重新启动」完整重启当前仿真。

6. 仿真日志区 ​

  • 「启动/停止」:控制当前活动仿真;「重新启动」用于完整重启。
  • 「编译并重载」:执行上述构建命令。
  • 「仿真配置…」:编辑活动配置;下方显示当前 ELF、构建命令是否配置和 GDB 地址。
  • 「清空」:只清空界面日志,不删除 Renode 落盘日志。
  • 日志支持鼠标选择单行或连续多行,Ctrl+C 复制,Ctrl+A 全选。

7. 常见问题 ​

现象检查与处理
提示找不到 renode.exe检查便携版是否在第 1 节规定的目录;不要只配置 renode.exe 所在的任意 PATH
端口 1234、3333、3456、3460~3462 被占用先停止其他仿真或占用程序。QDebugTool 会自动清理与当前配置匹配的旧实例,但不会强杀其他 Renode 工程或未知程序
强关 QDebugTool 后再次启动直接重新启动当前仿真;匹配的旧 Renode 会先被清理,日志显示其 PID
一直停在「启动中」等待至多 90 秒;检查 ELF 是否有效、平台模板是否完整,以及仿真日志尾部错误
能启动但设备连接失败确认已进入「运行中」,主机是 127.0.0.1,端口号与 SCI 通道一致
SCI3 有数据但 Modbus 不响应帧格式选择 RTU 而非 TCP;同时检查站号以及固件是否仍在使用 DTC
能收打印但没有回帧核对固件实际使用的 SCI 与端口映射;检查 TX 是否改为中断驱动,并用 e2 studio 断点确认发送函数是否执行
e2 studio 连不上 3333先确认仿真运行中;不要重复启动 Renode,检查其他 GDB 会话是否已占用目标
修改代码后行为没有变化确认编译的是同一构建配置和同一 ELF,然后执行热重载或重启仿真
界面日志突然很多使用「清空」整理视图;平台已做日志限流,完整细节仍可查 Renode 输出文件