【问题标题】:Jump to subroutine from a custom Trace32 menu从自定义 Trace32 菜单跳转到子程序
【发布时间】:2021-11-11 17:56:52
【问题描述】:

我想从 Lauterbach T32 的菜单中运行几个类似的命令序列(甚至从工具栏中,问题也是一样的)。 菜单是使用类似的东西构建的:

menu.reprogram
(
 add toolbar 
(
toolitem "Say NE", "SN,r"
(
GOSUB sayNE
)
)
)
enddo
sayNE:
(
print "ne"
return
)

根据文档,这应该可以工作。如果我删除 menu.reprogram 部分并仅运行“gosub sayNE”,则类似的工作。

但是当这个代码应该来自实际的菜单回调时,它不会。它会打印“没有这样的标签”错误消息,这并没有真正的帮助。

我什至尝试将子例程移动到包含的文件中,该文件的来源是Do ~~~~/subSayNE.cmm,后跟gosub ...Do ... 命令有效,但之后调用 gosub 会带来与以前相同的“没有此类标签”错误。

看起来对允许做的事情有限制,但我找不到它的记录。有没有什么方法可以在那里使用子例程,或者有没有更好的技巧来运行重复的动作,只需稍作修改(参数)?

【问题讨论】:

    标签: trace32


    【解决方案1】:

    子程序仅在脚本执行期间可用。当脚本执行结束时(在您的情况下,这发生在 ENDDO 命令中),标签/子例程将不复存在。

    这个问题的一个很好的解决方案是为脚本配备一个调用参数。当不带参数调用脚本时,将安装菜单或工具栏。如果脚本是带参数调用的,则调用同名子程序。

    用户将通过调用不带参数的脚本来安装菜单/工具栏,而菜单/工具栏项将使用子程序名称作为参数调用脚本。

    PRIVATE &parameter
    ENTRY %LINE &parameter
    IF "&parameter"!=""
    (
      ;if parameter specified, go to subroutine with that name
      GOSUB &parameter
      ENDDO
    )
    ELSE
    (
      ;set up script caller
      PRIVATE &CALL
      &CALL="DO """+OS.PresentPracticeFile()+""" "
    
      ; "&+" in the menu means that macro &CALL will be replaced at compile time
      MENU.ReProgram
      (&+
        ADD
        TOOLBAR
        (
          TOOLITEM "Say NE" "SN,r"
          (
            ;call script with parameter SayNe
            &CALL SayNe
          )
        )
      )
      ENDDO
    )
    
    ;subroutines
    SayNe:
    (
      PRINT "ne"
      RETURN
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      相关资源
      最近更新 更多