Skill脚本定制 避开这3个坑 新手也能一次跑通

发布于 更新于
3,083
详情介绍
智行者IC社区持续更新技术干货、实操教程、案例分享与常见问题解答,为学习者提供实用的学习参考资料。

将我实测的Cadence IC618版本与Cadence IC617版本,踩过Skill脚本加载出现报错、函数呈现未定义、菜单显示存在异常这样的坑。

加载Skill脚本的正确路径

好多初学者将脚本文件放置于目录后就直接启动软件,然而却发觉菜单栏压根没有任何改变,在此务必清晰点明: Skill 脚本并非放入就能自动运行的,而是需要先对软件环境变量开展检查。

具体实施步骤为,开启CIW窗口,输入getShellEnvVar(“CDS_SCRIPT”)然后按下回车键,此时系统将会返回当下的加载路径。要是返回值为空,那就表明软件根本就没有读取到你的脚本目录。正确的做法是在.cdsinit文件里增添一行内容: load(“/path/to/your/script.il”),注意此处应该使用绝对路径,而非相对路径。

【新手避坑】:常见的报错情况呈现为, CIW窗口给出提示,显示Error load: file not found。其核心原因大多在于,路径出现了写错的情况,又或者是文件名的大小写并不匹配。迅速的解决办法是:在CIW里直接键入load(“完整路径”)开展测试,要是依旧报错,借助ls命令去确认文件是不是真的存在。

函数未定义怎么修复

若你在写好脚本并运行时, CIW忽然弹出Error undefined function – myFunction,此时别慌乱。其根本原因并非函数写错,而是脚本加载顺序出现了问题。如果Skill脚本里调用了外部的函数库,那就必须先加载库文件,之后再加载主脚本。

关键参数最优推荐的值是,在脚本起初时加入一行when( nil (setSkillPath(list(“/path/to/lib”)) ) ),在路径里指明所有依赖库的目录。此设置的原因挺简单的, Skill依据路径顺序来搜索函数,要是不进行指定的话就会默认仅仅搜索当前目录,从而遗漏函数库的。

进行实操方案对比时,存在两种加载方式,其一为手动加载,在每次开启软件时于CIW处输入load(“xxx.il”);这种方式适用于调试阶段,其二是自动加载方式,将其写在.cdsinit里,适用于正式生产环境,在调试阶段选用第一种方式,一旦确定脚本文字没问题的时候,便切换到第二种方式,否则每次重新开启软件都需要手动加载,这是很浪费时间的。

新手要避开一些情况,有一种报错情况是函数很明显写得没错,然而却提示未定义,其中核心的出错原因是Skill脚本里的函数名与调用名不一样,或者脚本里使用了procedure()却遗漏了括号,快速的解决办法是在CIW里通过采用getFunctionList(“my”)来搜索函数名,以此确认实际定义的名字。

菜单显示异常的排查流程

脚本加载达成预期之成功状态后,菜单未呈现或者呈灰色之按钮状态这一情况,是最为使人烦闷苦恼甚而倍感头疼的问题所在。我所施行的排查具体进程如下:其一,在CIW当中输入hiGetCurrentMenu()以查看当下菜单项情况。其二,对脚本里的菜单注册代码检查,从而确认hiCreateMenuItem()的callback参数有无参数有无犯下写错函数名字的错误。

高频完全报错: CIW报 Error* hiCreateMenuItem,其提示为论据号一应当是字符串(类型模板为“t”)。完整化解流程表明:此错误提示表明你运用的参数类型有误。第一步,核查 callback 向后的数值是否由双引号加以包裹作为字符串而呈示。第二步,去确认一下回调函数名里并没有空格存在。第三步,将callback的值单独来打出来查看一下,就好比printf(“%Ln”, callback)这样,要确保没有遗漏引号。这三步全部完成之后, 99%的菜单异常情况都是能够被解决掉的。

这种办法不适用于脚本里头运用了自定义SKILL++类库的情况,由于类库加载依靠更为繁杂的路径设定。替代的方案是采用envGetVal()获取软件内部建成的路径,将库文件放置到系统默认的目录下面,防止路径产生冲突。

常见问题(FAQ)

Skill脚本放进目录后启动软件,菜单栏却没有任何变化怎么办?
脚本不会放进目录就自动运行。先在CIW窗口输入 getShellEnvVar("CDS_SCRIPT") 查看当前加载路径,返回为空说明根本没读到脚本目录;正确做法是在.cdsinit文件里加一行 load("/path/to/your/script.il"),并且必须用绝对路径。
运行时提示 Error undefined function 怎么修复?
大多是脚本加载顺序出了问题。如果脚本调用了外部函数库,必须先加载库文件再加载主脚本;可在脚本开头加一行 when( nil (setSkillPath(list("/path/to/lib")) ) ),把所有依赖库目录指出来,Skill会按路径顺序搜索函数。
菜单注册时报 hiCreateMenuItem 相关错误、提示第一个参数应为字符串怎么办?
说明参数类型写错了。检查 hiCreateMenuItem() 的 callback 参数值是否用双引号包成了字符串、回调函数名里有没有空格,也可以单独把callback打印出来确认引号没漏,这三步能解决绝大多数菜单异常。
0 / 600
0 讨论
热门最新
总结
暂无总结