При работе с модулем беспроводного драйвера шум в беспроводной среде передается в модуль как тип данных 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.
typedef __s32 int32_t;
Таким образом, вы должны рассматривать это как простое целое число.
Оказывается, что расширение знака было важно:
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». .
Поскольку вы знаете, что это 32-разрядный тип int, попробуйте привести его в действие, прежде чем передавать его в printk:
printk("%d", (int32_t) val);