日期:2014-05-16  浏览次数:20682 次

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

------解决方案--------------------
以后需再关注,现在先帮你顶一下