奇怪的问题:一个函数被调用两次,输入同样的参数值,结果确不一样?
此函数如下:
static __inline__ unsigned int Func(unsigned int input)
{
unsigned char *pval = (unsigned char *)&input;
unsigned char temp1, temp2;
temp1 = (unsigned int)(pval[0] ^ pval[1]);
temp2 = (unsigned int)(pval[2] ^ pval[3]);
return( ((temp1 << 4) ^ temp2) & 4095);
}
运行环境:
OS:vxworks
gcc编译器,使用makefile编译
实参传进来就是一个临时变量,与多线程同步没有关系。
现象:
1)当执行设置操作时,会调用此函数,输入参数值后得到是错误的结果(返回值是错误的)。
2)当执行查询操作时,会调用此函数,输入参数值后得到是正确的结果(返回值是正确的)。
3)当把函数定义中的"__inline__ "去掉或是函数定义中改为
static __inline__ unsigned int Func(volatile unsigned int input)
结果是对的。
4)当函数改为
static __inline__ unsigned int Func(unsigned int input)
{
unsigned char *pval = (unsigned char *)&input;
unsigned char temp1, temp2;
printf("");
temp1 = (unsigned int)(pval[0] ^ pval[1]);
temp2 = (unsigned int)(pval[2] ^ pval[3]);
return( ((temp1 << 4) ^ temp2) & 4095);
}
时是对的
5)但改为
static __inline__ unsigned int Func(unsigned int input)
{
unsigned char *pval = (unsigned char *)&input;
unsigned char temp1, temp2;
temp1 = (unsigned int)(pval[0] ^ pval[1]);
temp2 = (unsigned int)(pval[2] ^ pval[3]);
printf("");
return( ((temp1 << 4) ^ temp2) & 4095);
}
函数却返回错误的结果。
请大虾们不吝指教!!
Thank you!!