阶段5-2:文档收尾——vm 指令执行/扫描周期、compiler 寄存器码/符号表/STCompiler说明、executor 入口全部更新为 V2
This commit is contained in:
+25
-17
@@ -12,18 +12,19 @@ compiler 模块的符号收集与链接。输入:`Project`(toml)+ 各 `.st
|
||||
- `FUNCTION` 标无状态;`FUNCTION_BLOCK` 必须先有实例才能调用
|
||||
- `CALL` 目标解析成 `fn_id`(立即数),无函数指针
|
||||
- 校验:同名全局、未声明 `io.var`、重复 POU 名、未声明 FB 实例、函数循环调用 → 失败
|
||||
- FB 实例布局:按类型算字段清单(输入/输出/内部/内建 8 个 FB 固定字段(12.11 扩充))
|
||||
- FB 实例布局:按类型算字段清单(输入/输出/内部;内建 FB 15 条字段来自 machine.toml `[[fb]]` 表,编译期按 1/2/4/8 对齐计算偏移)
|
||||
|
||||
**不做(第一版)**
|
||||
|
||||
- 寄存器分配(12.8)、类型检查(12.7)
|
||||
- 多 GVL 文件、I/Q/M 与全局分槽(v1 **单一数据区**,见下)
|
||||
|
||||
## 数据区定址(v1 定案)
|
||||
## 数据区定址(V2 定案)
|
||||
|
||||
- **单一数据区**:全部全局(含 I/Q/M)按 `globals.st` 声明顺序编槽号 0..n-1
|
||||
- 映像头 `n_globals` = 声明总数;`n_i` / `n_q` / `n_m` = 0(第一版不拆,见 [`初步计划.md`](../初步计划.md) 5.1)
|
||||
- `LOAD_I` / `STORE_Q` / `LOAD_GLOBAL` / `STORE_GLOBAL` 操作码不同,槽号指向同一数据区
|
||||
- **槽表两级**:全部全局(含 I/Q/M)与 FB 实例统一编槽号(0..n-1);槽表条目(8B:addr:u32 + 预留)指向**值区**字节偏移;值区按变量类型紧凑变宽(1/2/4/8 对齐)
|
||||
- 全局按 `globals.st` 声明顺序编槽;**FB 实例 = 1 个槽表条目**,字段走 `LOAD_OFF` / `STORE_OFF` 实例槽 + 编译期算死的字段偏移
|
||||
- 映像头 `n_globals` = 全局声明总数;`n_i` / `n_q` / `n_m` = 0(第一版不拆,见 [`初步计划.md`](../初步计划.md) 5.1)
|
||||
- 访问统一 `LOAD` / `STORE`(+ `LOAD_OFF` / `STORE_OFF`),无 I/Q/M 专用操作码
|
||||
- io 绑定(toml)只负责 channel/bit → 槽号映射(sidecar),不创造变量
|
||||
|
||||
## 符号表一行
|
||||
@@ -70,20 +71,27 @@ struct Symbol {
|
||||
## FB 实例布局
|
||||
|
||||
- 用户 FB:字段 = 全部 `VAR_INPUT` + `VAR_OUTPUT` + `VAR`(内部),按声明段序排
|
||||
- 内建(冻结,isa 规格;12.11 扩为 8 个):
|
||||
- 内建 FB 15 条(`compiler/machine.toml` `[[fb]]` 表驱动,fb_id 0..14):
|
||||
|
||||
| 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 |
|
||||
| fb_id | FB | 字段(名 → 类型) |
|
||||
|---|---|---|
|
||||
| 0 | TON | in BOOL, pt TIME, q BOOL, et TIME |
|
||||
| 1 | TOF | 同 TON |
|
||||
| 2 | TP | 同 TON |
|
||||
| 3 | CTU | cu BOOL, r BOOL, pv INT, q BOOL, cv INT |
|
||||
| 4 | DCTU | cu BOOL, r BOOL, pv DINT, q BOOL, cv DINT |
|
||||
| 5 | CTD | cd BOOL, ld BOOL, pv INT, q BOOL, cv INT |
|
||||
| 6 | DCTD | cd BOOL, ld BOOL, pv DINT, q BOOL, cv DINT |
|
||||
| 7 | CTUD | cu BOOL, cd BOOL, r BOOL, lu BOOL, pv INT, qu BOOL, qd BOOL, cv INT |
|
||||
| 8 | DCTUD | cu BOOL, cd BOOL, r BOOL, lu BOOL, pv DINT, qu BOOL, qd BOOL, cv DINT |
|
||||
| 9 | R_TRIG | clk BOOL, q BOOL |
|
||||
| 10 | F_TRIG | clk BOOL, q BOOL |
|
||||
| 11 | SR | S1 BOOL, R BOOL, Q1 BOOL |
|
||||
| 12 | RS | SET BOOL, RESET1 BOOL, Q1 BOOL |
|
||||
| 13 | PWM | in BOOL, pt TIME, duty REAL, q BOOL, et TIME |
|
||||
| 14 | RTC | enable BOOL, date DATE, tod TOD |
|
||||
|
||||
- 实例布局 = 类型字段表的一份拷贝;字段偏移 = 字段序号 × 8(8 字节定宽槽)
|
||||
- 实例布局 = 类型字段表的一份拷贝;字段偏移编译期按 1/2/4/8 对齐计算(字段类型决定宽度),实例 = 槽表 1 条
|
||||
|
||||
## 错误
|
||||
|
||||
|
||||
Reference in New Issue
Block a user