跳转至

CatST Software:编译器、仿真器与上位机工具链

本文档定义实现 CatST 所需的上位机工具链。整机上位机可以包含更多设备管理功能,但 CatST 独立集合至少需要本文定义的编辑、检查、仿真、生成、构建、下载和监控能力。现场工作流不使用 J-Link,所有维护动作通过串口维护协议完成。


1. 工具链目标

CatST 工具链负责:

工程管理
CatST 编辑
语法高亮和补全
词法/语法/语义检查
安全检查
资源预算
AST 仿真
C 代码生成
ARM GCC 编译
app.bin 打包和 CRC
下载
在线变量监控
诊断展示

推荐技术栈:

C#
.NET 8
WPF
AvalonEdit 或 Monaco Editor
SerialPort 或第三方串口库
ARM GCC 工具链

2. 工程结构

推荐工程目录:

ProjectName/
 ├── project.json
 ├── logic.catst
 ├── target.profile.json
 ├── generated/
 │   ├── UserLogic.c
 │   ├── UserLogic.h
 │   └── UserConfig.h
 ├── build/
 │   ├── app.elf
 │   ├── app.bin
 │   ├── app.map
 │   └── app.crc
 └── logs/

project.json 至少保存:

项目名称
目标 Profile:F103_LITE / F407_STANDARD / EXT_COMM
设备站号
串口参数
CatST 文件路径
编译工具链路径
用户程序版本
下载目标和分区策略

target.profile.json 保存剪裁后的资源范围,编译器和补全都必须使用该文件。


3. 编译流程

CatST 文本
Lexer
Parser
AST
语义检查
安全检查
资源预算检查
AST 仿真,可选
C 代码生成
ARM GCC 编译
app.bin + CRC

每一步都必须产生结构化诊断,UI 只负责展示,不应在 UI 中重复实现规则。


4. 编辑器与语言服务

编辑器应支持:

  1. 文本编辑。
  2. 语法高亮。
  3. 行号。
  4. 关键字补全。
  5. 变量和别名补全。
  6. 内置函数和功能块补全。
  7. 错误波浪线。
  8. 错误列表跳转。
  9. 悬停说明。
  10. 快速修复建议。

补全来源:

CatST.md
MemoryMap.md
target.profile.json
通信映像配置

禁止在 UI 中硬编码变量区上限。


5. 诊断模型

诊断字段:

Severity:Error / Warning / Info
Code
File
Line
Column
Length
Message
Suggestion

示例:

E2004 logic.catst:3:5 赋值应使用 :=,不能使用 =
E3002 logic.catst:8:1 Y12 不存在,当前 Profile 仅支持 Y0~Y7
E4001 logic.catst:10:1 不支持 WHILE,无界循环会导致扫描周期不可控
W5003 logic.catst:20:1 资源预算接近 F103_LITE 上限

6. 仿真器

第一版采用 AST 解释仿真:

CatST → AST → PC Runtime 仿真

仿真器必须支持:

  1. 设置 X/M/D 初值。
  2. 设置扫描周期和模拟时间。
  3. 单步扫描。
  4. 连续扫描。
  5. 查看 Y/R/M/D/T/C/S/E。
  6. 查看定时器 ET 和计数器 CV。
  7. 导出扫描轨迹。
  8. 与生成 C 的 PC 版 Runtime 结果对比。

仿真器的 TON/TOF/TP、CTU/CTD、R_TRIG/F_TRIG 语义必须与固件 Runtime 共用测试用例。


7. C 代码生成

生成规则:

  1. 只生成 UserLogic_Init()UserLogic_Scan() 相关文件。
  2. 不生成任意 include。
  3. 不生成用户 C 片段。
  4. 不生成直接 HAL/GPIO/UART/Flash 访问。
  5. 不生成动态内存。
  6. 整数运算使用安全 helper。
  7. 输出文件头部包含来源、版本、Profile 和自动生成警告。

建议头部:

/* Auto generated by CatST toolchain. Do not edit manually. */
/* Source: logic.catst */
/* Profile: F407_STANDARD */

8. ARM GCC 构建

构建流程:

生成 UserLogic.c
复制到固件工程 User 区
调用构建脚本
生成 app.elf
生成 app.bin
解析 app.map
检查 Flash/RAM
计算 CRC32
生成下载包

必须展示:

编译成功/失败
错误文件和行号
Flash/RAM 使用量
UserLogic 代码大小
资源预算结果
App CRC32
用户程序版本

9. 下载与在线监控

下载器流程:

连接设备
读取设备信息
匹配硬件 Profile
发送 STOP
确认输出关闭
进入 DOWNLOAD
分包下载 app.bin
校验 CRC
设备复位进入 STOP

下载器必须明确区分:

阶段 工具
空白芯片 Bootloader 固化 生产烧录工具、SWD 或 STM32 ROM Bootloader
现场 CatST 程序迭代 CatST Studio 串口下载
Bootloader 恢复下载 CatST Studio 或维护工具串口连接

现场界面不暴露 J-Link/SWD 作为常规操作。

在线监控内容:

X/Y/R/M/D
T/C 状态
S/E 状态
运行模式
扫描周期
通信状态
App 版本和 CRC

在线写变量必须遵守 MemoryMap.md 权限规则。


10. Profile 与剪裁

工具链必须允许不同目标配置声明:

可用 IO 点位
M/D/T/C 数量
支持的语言等级
是否启用受限 FOR
是否启用索引访问
是否启用通信映像
最大程序大小
最大资源预算
下载分区策略

剪裁后:

  1. 编辑器补全只显示可用资源。
  2. 编译器对不可用资源报错。
  3. 仿真器按同一 Profile 初始化。
  4. 构建器按同一 Profile 检查 Flash/RAM。