2014-07-20 55 views
0

我有一個位的列表,我想解壓到stage, stage#1將它解壓縮爲struct A,並且取決於我在A.next中收到的值現場我想解開「休息」到另一個擊中,可以是B,C或D.如何分階段解壓列表(specman)

我的問題是如何通知下一個解壓從哪裏開始拆包。 代碼:

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

一般而言,用於定製拆包的目的,它建議以延長該結構的方法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(...) }; 
};