7.9.1.2.GEL 函数参数¶
用户可以在 GEL 函数定义中定义参数,从而将参数传递给 GEL 函数。
与 C 语言不同的是,参数的数据类型不需要定义,只需要它的名称。根据赋值自动确定数据类型。
GEL 参数可以是以下任何一种:
- 实际目标器件上的调试符号(变量、函数等)
- 如果传递了任何表达式或常量值,则为数值常量
- 如果传递了字符串常量,则为字符串常量
在执行时传递的参数决定了参数采用的值。
GEL 参数可以是整数(十进制,十六进制)、实数(浮点)或字符串(例如,1、3.1415、0x100、c:\workspace\filename 等)。对于数值参数,GEL 允许传递任何有效的 C 表达式,且表达式在传递给 GEL 函数之前对其求值。如果最终值包含句点或指数符号(例如,1.2 或 1.34e4),则被认为是实数类型;否则,它被认为是整数类型。
GEL 的定义非常宽泛,可以灵活地使用默认值来使 GEL 函数调用变得简单。如果需要,它还提供了传递更多参数的机会。这可以在 GEL_TextOut 等 GEL 内置函数中看到,该函数最多可带六个参数。这可以只使用一个参数来调用,如下所示:
GEL_TextOut("Hello World!");
在这个特定函数(对 GEL 执行期间的调试和信息任务很有用)中,所有参数均可用于对输出提供更强的控制。
___
示例:
下面是 GEL 函数定义:
Initialize(localSymbol, filename, value) { if (value > 10) { localSymbol = 0; targetStatus = 10; } else { GEL_MemoryLoad(localSymbol, 0, 0x100, filename); targetStatus = value; } return value*value; }
以下是对先前 GEL 函数的正确调用示例:
Initialize(targetSymbol, "c:\\workspace\\myProject\\Debug\\myProject.dat", 2 * 5 + 1.22);
就像在 C 中一样,执行函数时,会将参数 localSymbol 分配给符号 targetSymbol,将参数 filename 分配给字符串常量 c:\users\user\workspace\myProject\Debug\myProject.out,计算参数值,并假定值为 11.22。
对该函数的上述调用可测试参数值,并决定是使用初始值初始化目标符号还是从主机加载数据。
在上面的示例中,targetStatus 和 targetSymbol 都必须存在于加载到目标器件的代码中,否则在执行赋值语句时会发生运行时错误。此外,对参数 localSymbol 的无效赋值将是一个常量值(例如 20),因为赋值将等于 20 = 0
,这是无效的。
即使为参数 localSymbol 传递了一个有效的符号,也必须在执行函数之前,将定义该符号的代码(带有调试信息)加载到 Code Composer Studio 调试器中。否则,会发生运行时错误。
初始化 GEL 函数可使用以下任一格式调用:
Initialize(targetSymbol, "c:\\workspace\\myProject\\Debug\\myProject.dat", 10);
Initialize(targetSymbol, "c:\\workspace\\myProject\\Debug\\myProject.dat", 1.2);
此调用会为参数值指定一个整数或一个实值。如果目标变量 targetStatus 为 int 类型,该值在赋值给 targetStatus 期间被截断。
当使用符号参数定义 GEL 函数时,为其传递参数是可选的。这是因为对于数值,参数值初始化为 0,否则初始化为空字符串;如果没有传递参数,函数将假定参数的默认值。
因此,可按如下方式调用上述函数:
Initialize(targetSymbol, "c:\\workspace\\myProject\\Debug\\myProject.dat");
此调用只将两个参数传递给函数,将第三个参数自动分配 0。
Initialize();
从 GEL 语法和结构的角度来看,这是一个有效的调用,但如果语句 GEL_MemoryLoad()
具有空字符串,它将导致运行时错误。由于没有为文件名传递参数,该语句等效于 GEL_MemoryLoad(0, 0, 0x100, “”),并导致“无效文件名”错误。
___
另请参阅: