From 38202fd21ed51e0229f432d4d42ebf9dda96d246 Mon Sep 17 00:00:00 2001 From: chentianya Date: Wed, 26 Aug 2026 11:34:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B6=E6=AE=B55-4=EF=BC=9Aexecutor=20--side?= =?UTF-8?q?car=20=E6=98=BE=E5=BC=8F=E6=8C=87=E5=AE=9A=20I/O=20=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E6=96=87=E4=BB=B6=EF=BC=88=E7=BC=BA=E7=9C=81=E5=90=8C?= =?UTF-8?q?=E5=90=8D=E6=8E=A8=E5=AF=BC=E4=B8=8D=E5=8F=98=EF=BC=8C=E5=90=91?= =?UTF-8?q?=E5=90=8E=E5=85=BC=E5=AE=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doc/executor/执行器入口.md | 4 ++-- executor/src/main.cpp | 29 +++++++++++++++++++---------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Doc/executor/执行器入口.md b/Doc/executor/执行器入口.md index c0c2701..02b9de4 100644 --- a/Doc/executor/执行器入口.md +++ b/Doc/executor/执行器入口.md @@ -7,7 +7,7 @@ BytecodeExecutor 模块:可执行入口。CMake 目标:`BytecodeExecutor`( ## 用法 ```text -BytecodeExecutor .stb [--cycles N] [--replay ] [--step] +BytecodeExecutor .stb [--cycles N] [--replay ] [--step] [--sidecar ] ``` - `--cycles N`:跑 N 个周期(缺省 10) @@ -18,7 +18,7 @@ BytecodeExecutor .stb [--cycles N] [--replay ] [--step] ### sidecar 定位(当前 + 计划) - **当前(已实现)**:sidecar 路径按「同名替换扩展名」推导——`.stb` → `.runtime.toml`。依据:sidecar 是编译产物的配对文件,同名约束由 STCompiler 写侧强制,约定即可。 -- **计划(未实现)**:加可选参数 `--sidecar ` 显式指定 I/O 绑定文件。适用场景:同一程序多套接线配置并存(厂内/现场不同 sidecar)、接线文件与 `.stb` 不同目录。缺省行为**不变**(未指定时回退到同名推导),向后兼容。 +- **已实现**:`--sidecar ` 显式指定 I/O 绑定文件。适用场景:同一程序多套接线配置并存(厂内/现场不同 sidecar)、接线文件与 `.stb` 不同目录。缺省行为**不变**(未指定时回退到同名推导),向后兼容。 ## 职责 diff --git a/executor/src/main.cpp b/executor/src/main.cpp index d3c901f..777ca92 100644 --- a/executor/src/main.cpp +++ b/executor/src/main.cpp @@ -5,7 +5,7 @@ * @date 2026-08-21 * * @details 12.10:加载 .stb + sidecar,按扫描周期执行。 - * - `BytecodeExecutor .stb [--cycles N] [--replay ] [--step]` + * - `BytecodeExecutor .stb [--cycles N] [--replay ] [--step] [--sidecar ]` * - 只链 vm + isa,不链 compiler;dt_ms / cycle_limit 从映像头取 * - I 采样 / Q 写回按 sidecar(var → 槽号 → channel/bit),不创造变量 * - --replay:读录制文本(每行空格分隔的 0/1,按 io.input 绑定顺序), @@ -28,11 +28,12 @@ namespace { /// 打印命令行用法。 void usage() { - std::printf("usage: BytecodeExecutor .stb [--cycles N] [--replay ] [--step]\n" - " 加载 .stb + .runtime.toml,按扫描周期执行\n" + std::printf("usage: BytecodeExecutor .stb [--cycles N] [--replay ] [--step] [--sidecar ]\n" + " 加载 .stb + sidecar(缺省 .runtime.toml),按扫描周期执行\n" " --cycles N 跑 N 个周期(缺省 10)\n" " --replay 读录制的 I 序列(每行按 io.input 顺序的 0/1)\n" " --step 单步:逐指令打印 pc/fn/反汇编/寄存器(跑 1 个周期)\n" + " --sidecar 显式指定 I/O 绑定文件(缺省同名推导)\n" " --help 打印本帮助\n"); } @@ -234,10 +235,12 @@ int main(int argc, char** argv) { } const std::string stb_path = argv[1]; - // 参数:--cycles N / --replay / --step(缺省 cycles=10、无回放、非单步) + // 参数:--cycles N / --replay / --step / --sidecar + //(缺省 cycles=10、无回放、非单步、sidecar 同名推导) uint32_t cycles = 10; bool step_mode = false; std::string replay; + std::string sidecar_override; for (int i = 2; i < argc; ++i) { if (std::strcmp(argv[i], "--cycles") == 0 && i + 1 < argc) { cycles = static_cast(std::stoul(argv[i + 1])); @@ -245,6 +248,8 @@ int main(int argc, char** argv) { replay = argv[i + 1]; } else if (std::strcmp(argv[i], "--step") == 0) { step_mode = true; + } else if (std::strcmp(argv[i], "--sidecar") == 0 && i + 1 < argc) { + sidecar_override = argv[i + 1]; } } @@ -266,13 +271,17 @@ int main(int argc, char** argv) { return 1; } - // sidecar 路径推导:.stb → .runtime.toml - std::string sidecar_path = stb_path; - const size_t dot = sidecar_path.find_last_of('.'); - if (dot != std::string::npos) { - sidecar_path = sidecar_path.substr(0, dot); + // sidecar 路径:--sidecar 显式指定,否则同名推导 .stb → .runtime.toml + std::string sidecar_path = sidecar_override.empty() + ? stb_path + : sidecar_override; + if (sidecar_override.empty()) { + const size_t dot = sidecar_path.find_last_of('.'); + if (dot != std::string::npos) { + sidecar_path = sidecar_path.substr(0, dot); + } + sidecar_path += ".runtime.toml"; } - sidecar_path += ".runtime.toml"; std::vector bindings; if (!parse_sidecar(sidecar_path, &bindings, &err)) { std::fprintf(stderr, "error: %s\n", err.c_str());