问题现象
前几天做实验的时候遇到个问题被卡着,报警40359。
问题描述
报警信息里面描述,我的一个IDT里面的基础类型有问题。
问题分析
根据提示排查
首先检查了出问题的IDT里面的基础类型,引用的是基础类型里面的布尔类型,非常标准,问题应该不是这里导致的。
排除范围内其他干扰
也就是把其他配置的内容都恢复为默认,报警依然存在。
扩大范围
一般来说,这种提示大方向应该是没错的,于是扩大范围检查,检查IDT是mapping以及使用到该信号的SWC,均无问题。
修改引用
既然报警说是引用基础类型的问题,那就改个基础类型试试,看看是不是这个基础类型不能用。但是换了好几个基础类型,全部都报错。这就非常奇怪了,既然这么简单的引用基础类型都会出错,那其他的IDT是怎么check通过的呢,于是进行对比查看。
对比其他IDT
对比发现,其他IDT是可以check通过的,里面的配置也是差不多的。
我怀疑过是因为大家的Package不一样,尝试改成一样的,结果发现我自己新建的IDT还是check不过。
通过复制创建新的IDT
既然问题不能够硬钢过去,那就绕路吧,我们自己新建的不行,人家有现成check通过的IDT,复制一个给自己用不就好了,抄作业嘛,不寒碜。
于是很神奇地发现,有些IDT复制出来的不能check通过。
有些却可以check通过。
复制出来的和源生就是个名字的差距了,咋就差别这么大呢?发现这两种IDT是有差别的,看名字就可以知道,check不通过的是基础类型,估计是davinci不允许有重复的基础类型。
源IDT | 复制出来的IDT | check结果 |
基础类型 | 基础类型 | 不通过 |
用户新建类型 | 用户新建类型 | 通过 |
到现在这一步,就知道怎么把路绕过去了,复制用户新建类型的不就完了?但我想起在IDT的排序当中,基础类型排在前面,用户新建类型排在后面,我在做对比其他IDT的时候只是抽了几个前面的IDT来对比,意味着只是对比了基础类型的,并没有对比用户新建类型的。
对比用户新建类型IDT
一对比就发现问题了:用户新建类型里面应用的基础类型是蓝色的,在以下路径下面。
我自己新建的IDT引用的类型是以下路径,虽然说是一样的名字,路径不同,引用的就是完全不同的两个东西。而且没得选用户新建类型的那些路径下的内容,肯定就是IDT在新建的时候出了问题。
问题结论
知道原因就基本知道方向了。
最后发现是我在新建IDT的时候选择了第1个New Value,应该要选择第二个New Type Reference。