2016-08-01 10 views
0

Ich brauche diesen Code zu konvertieren:Wie sc_logic Werte mit Semantik protokollieren?

bool hw = (gpio_ctrl(idx) >> 5) & 1; 
uint8_t cnfg = (gpio_ctrl(idx) >> 3) & 3; 
sc_dt::sc_logic oe_n = Log_1; // Default disable 
sc_dt::sc_logic od = Log_Z; // Default disable 


DEBUG_PRINTF(("GPIO update_ouput: CTRL=0x%x IDX=%d, HW=%d CNFG=%d, OE_N=%d, od=%d\n", gpio_ctrl(idx), idx, hw, cnfg, oe_n, od)); 

in mit Semantic protokolliert werden.

Ich habe versucht, diese vereinfachend tun:

SEM_MSG(gpio_output_logic_update, SEM_INFO, "GPIO output logic update", "Control register index", ("value", SEM_ATTR_HEX), "HW (active low)", "Config style", "OE_N", "OD"); 

    // ... 

    SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n, od); 

aber SEM_MSG versteht nicht magisch sc_logic.

Antwort

0

Was ich zur Zeit getan haben, ist eine semantische Enum für die sc_logic Werte zu erklären, und verfolgen, dass der Wert des sc_logic verwenden. Es ist leicht zu lesen gefaltet („warum muss ich die value() der sc_logic Variable nehmen?“), Aber es funktioniert ...

// Support logging sc_logic values 

SEM_ENUM(sc_dt::sc_logic_value_t, (sc_dt::Log_0, "0"), (sc_dt::Log_1, "1"), (sc_dt::Log_Z, "Z"), (sc_dt::Log_X, "X")); 

//... 

SEM_MSG(gpio_output_logic_update, SEM_INFO, "GPIO output logic update", "index", ("value", SEM_ATTR_HEX), "HW", "CNFG", "OE_N", "OD"); 

//.. 

    SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n.value(), od.value()); 
0

Sie können die to_char() Methode verwenden, die eine char Version von sc_logic zurückgibt. (oder to_bool()). Siehe Abschnitt 7.9.2.2 von IEEE Std 1666-2011.

SEM_TRACE(gpio_output_logic_update, source, idx, gpio_ctrl(idx), hw, cnfg, oe_n.to_char(), od.to_char()); 
+0

sah vielversprechend aus, aber das Problem dabei ist, dass semantische interpretiert das Zeichen als ein numerischer Wert und rendert diesen Wert (den ASCII-Wert). – GreenAsJade