Como imprimir um tipo de dados do kernel s32

1

Ao trabalhar com um módulo de driver sem fio, o ruído na mídia sem fio é relatado ao módulo como um tipo de dados s32, que é definido em linux/types.h .

Eu gostaria de usar printk () para imprimir esse valor para o syslog, mas quando obtenho resultados ininteligíveis. As tentativas atuais foram:

printk("%d", val);  
printk("%d", (int) val);  
printk("%3i", (int)val);  
printk("%3i", val);  
printk("%lx", val);  
printk("%lx", long val);  

Eu não entendo como formatar isso para impressão. Eu também não consegui encontrar nenhuma informação até agora sobre como fazer isso.

Como ele lida com os tipos de dados do kernel, achei que seria apropriado postar no askubuntu.

    
por Radagasp 25.01.2013 / 21:37

3 respostas

0

Acontece que a extensão do sinal era importante:

sign_extend32 (AR5K_REG_MS (valor, AR5K_PHY_NF_MINCCA_PWR), 8)

onde:

AR5K_PHY_NF_MINCCA_PWR 0x0ff80000 / * Nível de ruído medido mínimo, lido do hardware em unidades de 1 dBm * /

As funções AR5K_REG_MS mascara e desloca esse valor lido do registro de hardware em relação ao nível mínimo de ruído medido.

sign_extend32 / * sign estende um valor de 32 bits usando bit especificado como bit de sinal * /

Após a conclusão, o número pode ser gravado no syslog usando '% d' para formatação.

    
por Radagasp 08.02.2013 / 11:38
2

Como você sabe que é um int de 32 bits, tente lançá-lo antes de passá-lo para printk:

printk("%d", (int32_t) val);
    
por Travis G. 25.01.2013 / 22:26
0
typedef         __s32           int32_t;

Então você deve tratá-lo como um valor inteiro simples.

    
por przemo_li 25.01.2013 / 22:28

Tags