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

对该函数的上述调用可测试参数,并决定是使用初始值初始化目标符号还是从主机加载数据。

在上面的示例中,targetStatustargetSymbol 都必须存在于加载到目标器件的代码中,否则在执行赋值语句时会发生运行时错误。此外,对参数 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);

此调用会为参数指定一个整数或一个实值。如果目标变量 targetStatusint 类型,该值在赋值给 targetStatus 期间被截断。

当使用符号参数定义 GEL 函数时,为其传递参数是可选的。这是因为对于数值,参数值初始化为 0,否则初始化为空字符串;如果没有传递参数,函数将假定参数的默认值。

因此,可按如下方式调用上述函数:

  • Initialize(targetSymbol, "c:\\workspace\\myProject\\Debug\\myProject.dat");

此调用只将两个参数传递给函数,将第三个参数自动分配 0。

  • Initialize();

从 GEL 语法和结构的角度来看,这是一个有效的调用,但如果语句 GEL_MemoryLoad() 具有空字符串,它将导致运行时错误。由于没有为文件名传递参数,该语句等效于 GEL_MemoryLoad(0, 0, 0x100, “”),并导致“无效文件名”错误。

___

另请参阅:

GEL 函数:按字母顺序排列的列表