工作中,遇到的问题(持续更新)

13 篇文章 0 订阅

1移位遇到的问题

struct pci_addr
{
	unsigned int domain;
	unsigned char bus;
	unsigned char devid;
	unsigned char function;
};
	unsigned long addr;
	addr |= pci.function;
	addr |= pci.bus<<8;
	addr |= pci.devid<<16;
	addr |= pci.domain<<24;
本来的想法是   struct pci_addr结构体大小为8bytes;
				addr存储也是8bytes;
				0-7位   存function
				8-15位  存bus
				16-23位 存devid
				24-63位 存domain
这样有问题, domain  比如   八进制为1000 0001
			左移24位后位  想要的是 0100 0000 1000 0000
			但实际上得到的是 1000 0000
			原因:因为超过unsigned int存储的位数 
			 

2函数传参

struct example
{
	int a;
	int b;
	int c;
	int d;
}
int func(struct example test)  //函数参数大小 最好不要超过8字节  不建议这样写
{
}
int func(struct example *test) //这样写好
{
}
原因:
X86-64下有1664位寄存器:
其中%rdi、%rsi、%rdx,%rcx、%r8、%r9用作传递函数参数,分别对应第1个参数、第2个参数直到第6个参数

如果函数的参数个数超过6个,则超过的参数直接使用栈来传递。

在被调用`在这里插入代码片`函数执行前,会先将寄存器中的参数压入堆栈,之后的访问会通过栈寄存器加上偏移位置来访问
跑DPDK运行报找不到PCI设备
	lspci | grep Eth   网卡设备也存在
	其他步骤也没问题
	
	经查找 原因:  pci 插在了 cpu1 卡槽上,   但是该CPU对应的内存条未识别,原因:未插紧
		   解决方法:  pci 插在另一个内存条识别的 cpu 卡槽上


3格式化输出

warning: format ‘%u’ expects argument of type ‘unsigned int, but argument 2 has type ‘__time_t’ [-Wformat=]

gcc test.c -Wformat=0 就没问题了。Wformat这个配置在Centos下默认是关闭的,所以一直没报错,如果编译的时候打开,也会提示一样的错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值