如何分阶段解压缩列表(specman)

时间:2014-07-20 08:30:24

标签: specman

我有一个位列表,我想解压缩到阶段, 阶段#1将它解压缩到结构A,并且根据我在A.next字段中收到的值,我想解压缩" REST"另一个被击中的,可以是B,C或D.

我的问题是如何通知下一个解包从哪里开始解包。 代码:

unpack(packing.low, l, A);
if (A.next==B) {unpack(packing.low, l, B, LAST_UNPACK_SIZE)};
if (A.next==C) {unpack(packing.low, l, C, LAST_UNPACK_SIZE)};
if (A.next==D) {unpack(packing.low, l, D, LAST_UNPACK_SIZE)};

1 个答案:

答案 0 :(得分:1)

通常,为了自定义解包,建议扩展struct的方法do_unpack()。从外面打包将保持简单,并在内部,您可以封装逻辑。但不确定它是否与您的流量匹配,因为从A变量中您可能无法访问B,C,D变量。

对于这种特定情况,您可以尝试一些技巧,比如将缓冲区列表传递给第一个阶段,然后从缓冲区中解压缩其余部分:

unpack(packing.low, l, A, buffer);
case A.next {
    B: { unpack(packing.low, buffer, B) };
    C: { unpack(packing.low, buffer, C) };
    D: { unpack(packing.low, buffer, D) };
    default: { error(...) };
};