Как printk () тип данных ядра s32

При работе с модулем беспроводного драйвера шум в беспроводной среде передается в модуль как тип данных s32, который определен в linux/types.h.

Я хотел бы использовать printk (), чтобы распечатать это значение в системном журнале, однако, когда я это делаю, я получаю непонятные результаты. Текущие попытки были:

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

Я не понимаю, как отформатировать это для печати. Я также не смог найти никакой информации о том, как это сделать.

Так как он имеет дело с типами данных ядра, я подумал, что было бы целесообразно публиковать сообщения в Askubuntu.

1
задан 26 January 2013 в 01:21

3 ответа

typedef         __s32           int32_t;

Таким образом, вы должны рассматривать это как простое целое число.

0
ответ дан 26 January 2013 в 01:21

Оказывается, что расширение знака было важно:

sign_extend32 (AR5K_REG_MS (значение, AR5K_PHY_NF_MINCCA_PWR), 8)

где:

AR5K_PHY_NF_MINCCA_PWR 0 измерено мин. 0x0 уровень шума, считываемый с аппаратного обеспечения в единицах 1 дБм * /

Функция AR5K_REG_MS маскирует и сдвигает значение, считываемое из регистра аппаратного обеспечения, относительно минимального измеренного уровня шума.

Знак_экстенд32 / * знак расширяет 32-битное значение, используя указанный бит в качестве знака-бита * /

. После их завершения число можно записать в системный журнал, используя для форматирования «% d». .

0
ответ дан 26 January 2013 в 01:21

Поскольку вы знаете, что это 32-разрядный тип int, попробуйте привести его в действие, прежде чем передавать его в printk:

printk("%d", (int32_t) val);
0
ответ дан 26 January 2013 в 01:21

Другие вопросы по тегам:

Похожие вопросы: