1

我是 T32 脚本的新手,有一个关于脚本的问题。查看我们项目的脚本,我发现如下代码:

A.cmm
=======================================================
....
   if (&AAA==TRUE())
   (
      do B.cmm F=test1
      entry &detect
   )
.....
=======================================================

B.cmm
=======================================================
.......
test1:
........
return TRUE()
=======================================================

有几个问题: 1.入口函数是用来接收test1子程序的返回值,并把它放到“检测”宏中吗?2. “F=”有什么含义吗?我们不能在 do 命令后面使用 test1 吗?谢谢!

4

1 回答 1

3
DO <filename> [<parameter_list>]

这意味着F=test1是一个应该在B.cmm内部评估的参数。B.cmm似乎使用F=function来决定调用B.cmm中的哪个函数。B.cmm里面可能有一些类似的代码:

LOCAL &ARGS &ARG_FUNCTION 
ENTRY %LINE &ARGS
&ARG_FUNCTION=STRing.SCANAndExtract("&ARGS","F=","")

IF "&ARG_FUNCTION"!=""
(
    PRIVATE &rval
    GOSUB &ARG_FUNCTION
    ENTRY &rval
    ENDDO &rval
)
ENDDO

ENTRY用于获取参数以及获取返回值。entry &detect从对B.cmm的调用中获取返回值并将其保存到&detect

在较新版本的 TRACE32 中,您还可以使用PARAMETERSRETURNVALUES而不是ENTRY。但是,对于PARAMETERS/RETURNVALUES ,所有参数都必须用双引号传递(例如DO B.cmm "F=test1")。上面的示例将如下所示:

LOCAL &ARGS &ARG_FUNCTION
PARAMETERS &ARGS
&ARG_FUNCTION=STRing.SCANAndExtract("&ARGS","F=","")

IF "&function"!=""
(
    PRIVATE &rval
    GOSUB &function "&args"
    RETURNVALUES &rval
    ENDDO "&rval"
)
ENDDO
于 2017-01-16T08:17:48.410 回答