步骤D:用例 22_multi_instance(FB 共享体多实例隔离,a=102/204/306)+ 全量回归
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
# 期望:编译通过;FB 共享体多实例隔离
|
||||
|
||||
- Counter 编译为**单一共享函数**(fn 0),MAIN 两次 `CALL 0`(c1/c2 各一次,c2 两次调用)
|
||||
- 调用点 `LOADK r1` 装载**不同实例地址**(值区偏移),字段访问 `LOAD_PTR/STORE_PTR r1+off`
|
||||
- `count` 是实例字段:c1 每周期 +1、c2 每周期 +2,互不干扰
|
||||
- 全局 `a = c1.q * 100 + c2.q`:周期 1/2/3 = 102 / 204 / 306
|
||||
@@ -0,0 +1,4 @@
|
||||
(* globals.st *)
|
||||
VAR_GLOBAL
|
||||
a : INT;
|
||||
END_VAR
|
||||
@@ -0,0 +1,27 @@
|
||||
(* main.st *)
|
||||
FUNCTION_BLOCK Counter
|
||||
VAR_INPUT
|
||||
inc : BOOL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
q : INT;
|
||||
END_VAR
|
||||
VAR
|
||||
count : INT;
|
||||
END_VAR
|
||||
IF inc THEN
|
||||
count := count + 1;
|
||||
END_IF
|
||||
q := count;
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
PROGRAM MAIN
|
||||
VAR
|
||||
c1 : Counter;
|
||||
c2 : Counter;
|
||||
END_VAR
|
||||
c1(inc := TRUE);
|
||||
c2(inc := TRUE);
|
||||
c2(inc := TRUE);
|
||||
a := c1.q * 100 + c2.q;
|
||||
END_PROGRAM
|
||||
@@ -0,0 +1,11 @@
|
||||
[project]
|
||||
name = "case22"
|
||||
entry = "program MAIN"
|
||||
cycle_limit = 1000
|
||||
dt_ms = 10
|
||||
|
||||
[files]
|
||||
st = ["globals.st", "main.st"]
|
||||
|
||||
[gvl]
|
||||
file = "globals.st"
|
||||
Reference in New Issue
Block a user