扩充内置功能块为 8 个:TON/TOF/TP/CTU/CTD/CTUD/R_TRIG/F_TRIG。

- isa:CAL_* 操作码连续占 24..31(CALL/RET 后移为 32/33,kOpCount=34);disasm 支持 5 个新操作码
- 词法/语法/链接:新 8 个关键字与冻结布局(TP=in/pt/q/et、CTD=cd/ld/pv/q/cv、
  CTUD=cu/cd/r/lu/pv/qu/qd/cv、R_TRIG/F_TRIG=clk/q)
- VM:do_cal 全 8 个语义(TP 脉冲、CTD 递减、CTUD 双向+装载、R_TRIG 上升沿、F_TRIG 下降沿);
  edge_prev_ 每槽 2 字节存边沿上次输入;exec_one 分发补 5 个新操作码
- 验证:TP 30ms 脉冲 2 周期、CTD 装载+递减到 q=1、CTUD cu/cd 双向、R/F_TRIG 交替;
  ctest 11/11 全绿
- 文档:指令与映像/词法/初步计划/符号表与链接/指令执行/扫描周期/使用说明 同步
This commit is contained in:
2026-08-21 20:38:27 +08:00
parent 66d9c6c548
commit 26256a36b9
18 changed files with 249 additions and 64 deletions
+8 -3
View File
@@ -12,7 +12,7 @@ compiler 模块的符号收集与链接。输入:`Project`toml+ 各 `.st
- `FUNCTION` 标无状态;`FUNCTION_BLOCK` 必须先有实例才能调用
- `CALL` 目标解析成 `fn_id`(立即数),无函数指针
- 校验:同名全局、未声明 `io.var`、重复 POU 名、未声明 FB 实例、函数循环调用 → 失败
- FB 实例布局:按类型算字段清单(输入/输出/内部/内建 TON/TOF/CTU 固定字段
- FB 实例布局:按类型算字段清单(输入/输出/内部/内建 8 个 FB 固定字段(12.11 扩充)
**不做(第一版)**
@@ -70,15 +70,20 @@ struct Symbol {
## FB 实例布局
- 用户 FB:字段 = 全部 `VAR_INPUT` + `VAR_OUTPUT` + `VAR`(内部),按声明段序排
- 内建(冻结,isa 规格):
- 内建(冻结,isa 规格12.11 扩为 8 个):
| FB | 字段(名 → 类型) |
|---|---|
| TON | in BOOL, pt TIME, q BOOL, et TIME |
| TOF | in BOOL, pt TIME, q BOOL, et TIME |
| TP | in BOOL, pt TIME, q BOOL, et TIME |
| CTU | cu BOOL, r BOOL, pv INT, q BOOL, cv INT |
| CTD | cd BOOL, ld BOOL, pv INT, q BOOL, cv INT |
| CTUD | cu BOOL, cd BOOL, r BOOL, lu BOOL, pv INT, qu BOOL, qd BOOL, cv INT |
| R_TRIG | clk BOOL, q BOOL |
| F_TRIG | clk BOOL, q BOOL |
- 实例布局 = 类型字段表的一份拷贝;字段偏移 12.8 按对齐规则算
- 实例布局 = 类型字段表的一份拷贝;字段偏移 = 字段序号 × 88 字节定宽槽)
## 错误