Lauterbach Trace32自定义菜单调用GOSUB子程序提示no such label如何解决
问题根因
Lauterbach T32的菜单回调命令是在独立的全局执行上下文中运行的,你在脚本中定义的sayNE标签属于脚本运行时的局部上下文,脚本执行结束后上下文就会销毁,所以菜单触发时自然找不到对应标签,哪怕你提前用Do命令加载过子程序文件也没用,Do执行完成后对应上下文同样会被释放。
可行解决方案
方案1:直接调用独立脚本(最适合多参数差异的重复操作)
把重复执行的逻辑封装成独立的.cmm脚本,需要传参的话可以直接在Do命令后追加参数,菜单回调里直接写Do命令调用即可,不需要用GOSUB。
示例菜单代码:
menu.reprogram ( add toolbar ( toolitem "Say NE", "SN,r" ( Do ~~~/subSayNE.cmm ) // 仅参数不同的相似操作,直接传不同参数即可 toolitem "Say Hello", "SH,r" ( Do ~~~/commonOperate.cmm "Hello" ) toolitem "Say World", "SW,r" ( Do ~~~/commonOperate.cmm "World" ) ) ) enddo
带参数的通用脚本commonOperate.cmm示例:
ENTRY &content PRINT &content // 其他通用逻辑 RETURN
方案2:指定脚本路径调用GOSUB
如果确实需要用GOSUB调用单个脚本内的不同标签,可以直接在GOSUB后指定脚本完整路径+标签名,无需提前加载脚本:
GOSUB ~~~/subScript.cmm sayNE
这样T32会自动读取目标脚本,找到对应标签执行。
内容的提问来源于stack exchange,提问作者PasterOfMuppets
相关产品推荐
相关产品推荐

