printk奇怪问题,请高手指点!
小弟我在调试网卡驱动的时候写了下面语句:
static long long count = 0;
static long long drop = 0;
static long long crc_error = 0;
.
.
.
printk("<0> count=%ld drop=%ld crc_error=%ld\n", count, drop, crc_error);
printk("<0> crc_error=%ld\n", crc_error);
.
.
.
程序运行的时候打印出来的结果是:
count=5 drop=0 crc_error=0
crc_error=5
按理来说crc_error的值应该是5,为什么第一条打印是0呢???????
------解决方案--------------------不会哦
你怎么设置的 count ?开始初始化的是 0 啊 ,
不会无原无故地变 5 吧?
中间细节是什么?
------解决方案--------------------printk 支持long long 吗?
long long 在32位系统上应该是8字节吧?
8字节应该不是系统的内部数据类型吧
这个到不是很清楚
只是印象中printf也是只能处理4字节吧,在32系统上
------解决方案--------------------C语言最容易出现的错误就是内存溢出,出现这种错误之后的最常见现象就是LZ所描述的那样,所以你仔细看看其它相关的代码
------解决方案--------------------刚刚试了下
printk是只能支持4字节的输出
如果你输入你个8字节的变量,只有四个字节
static long long lnum = 0x1000000020000000;
printk(KERN_EMERG"Module is loaded, lnum is %ld!\n", lnum);
[root@wolf drivertest]#
Message from syslogd@wolf at Mon Apr 3 06:28:12
wolf kernel: Module is loaded, lnum is 536870912!
536870912 = 0x20000000
------解决方案--------------------以后需再关注,现在先帮你顶一下