我需要创建一定数量的struct type对,这些对将进一步用作const参数,并且具有相同的一组值,但按比例缩放一半,就像这样(给定n):
TYPE ADDR_1 :
STRUCT
PARAMETER_A: INT :=0;
PARAMETER_B: INT :=2;
PARAMETER_C: INT :=4;
- - -
PARAMETER_n: INT :=n; (* being n any number *)
END_STRUCT
END_TYPE
和相关对:
TYPE ADDR_2 :
STRUCT
PARAMETER_X: INT :=0/2;
PARAMETER_Y: INT :=2/2;
PARAMETER_Z: INT :=4/2;
- - -
PARAMETER_n/2: INT :=n/2; (* being n any number *)
END_STRUCT
END_TYPE
通过分别创建两个结构,效果很好,我使用它们来创建一个CONST数组,以在SWITCH ... CASE语句中使用-我们知道,仅在其索引处接受常量,而不接受变量。
但是,在一个结构中进行的每个更改都必须在另一个结构中进行重构,在“最佳实践”设计过程中,确实不是一种安全的方法。
我现在面临的问题是,如果我在全局变量列表(GVL)中创建CONST值,则它在编译时间轴上没有优先级,我的意思是,结构首先被评估。
另一个选择是使用Pragmas,但是它仅在特定范围内起作用,这意味着它不会充当“全局参数”。
我只是想在编译之前定义上述每个参数,这样我就可以定义一次,将彼此除以2。
如果您不想使用常量全局变量,而只是像C中那样“定义”,那么请使用Pragmas。
如果您希望Pragma具有全局作用域,则可以将其放在全局变量列表中,也可以使用继承。这里是一个继承的例子:
TYPE ST_Root :
STRUCT
{IF defined (test) }
n : INT := 1;
{ELSE}
n : INT := 2;
{END_IF}
END_STRUCT
END_TYPE
TYPE ST_Derived EXTENDS ST_Root :
STRUCT
x : INT := n + 1;
END_STRUCT
END_TYPE