keil mdk 结构体的问题
本帖最后由 king1314 于 2013-5-23 14:30 编辑这个是在main.C中定义的全局变量
struct si4432_revdata
{
unsigned char rssi;
union
{
float ftem;
unsigned char tembuff;
} tem;
union
{
float fvoltage;
unsigned char voltagebuff;
}voltage;
} slaveid ;
我用的是keil mdk4.6
我给里面的变量赋值的时候出现如下问题,这是什么原因呢
下面这段代码是在si4432.C代码中
for(k=0;k<3;k++)
{
for(i=0;i<4;i++)
{
slaveid.tem.tembuff【i】=spi_readreg(0x7f); //本来是[],不然贴上去就没了
}
}
for(k=0;k<3;k++)
{
for(i=0;i<4;i++)
{
slaveid.voltage.voltagebuff【i】=spi_readreg(0x7f);//本来是[],不然贴上去就没了
}
}
错误如下:
这是哪里错了呢 ?? {:curse:}{:curse:}{:curse:} bygreencn 发表于 2013-5-23 13:16 static/image/common/back.gif
请多多指教 spi_readreg 返回是什么呢? windboy 发表于 2013-5-23 13:28 static/image/common/back.gif
spi_readreg 返回是什么呢?
返回的是unsigned char king1314 发表于 2013-5-23 13:33 static/image/common/back.gif
返回的是unsigned char
这就是问题所在,哪有给数组名直接赋值的,都是给数组中的元素赋值。 lcofjp 发表于 2013-5-23 13:41 static/image/common/back.gif
这就是问题所在,哪有给数组名直接赋值的,都是给数组中的元素赋值。
那是粘贴上去出的问题
正确的应该是这样
if((itstatus1&0x02)==0x02)
{
spi_writereg(0x07|0x80,0x01);//Çл»µ½Ô¤±¸Ä£Ê½
for(k=0;k<3;k++)
{
for(i=0;i<4;i++)
{
slaveadds.tem.tembuff【i】=spi_readreg(0x7f);
}
}
for(k=0;k<3;k++)
{
for(i=0;i<4;i++)
{
slaveadds.voltage.voltagebuff【i】=spi_readreg(0x7f);
}
}
slaveadds.rssi=spi_readreg(0x7f);
spi_writereg(0x0e|0x80,0x01);//ÌìÏß·¢Éä״̬ 哦,应该是不在同一个C文件中造成的结果;
在另一个C文件中,不明确结构的组成。 lcofjp 发表于 2013-5-23 15:36 static/image/common/back.gif
哦,应该是不在同一个C文件中造成的结果;
在另一个C文件中,不明确结构的组成。 ...
对
我的struct是在main。c中定义的类型
在si4432.h中找不到此类型
解决办法 : 在si4432中定义struct
感谢 lcofjp 也可把struct slaveid 定义留在main.c中,但要在si4432.c中声明extren slaveid[] .
xizi 发表于 2013-5-23 22:12 static/image/common/back.gif
也可把struct slaveid 定义留在main.c中,但要在si4432.c中声明extren slaveid[] .
那定义struct的类型
struct si4432_revdata
{
unsigned char rssi;
union
{
float ftem;
unsigned char tembuff;
} tem;
union
{
float fvoltage;
unsigned char voltagebuff;
}voltage;
} ;
要放在哪里呢?假如我要放在main.C中,在其他.C文件中怎么引用??
求指导
貌似不能放在MIAN.C中 我试过了
而且
struct si4432_revdata
{
unsigned char rssi;
union
{
float ftem;
unsigned char tembuff;
} tem;
union
{
float fvoltage;
unsigned char voltagebuff;
}voltage;
} ;
只能放在.h文件中
不知道是不是这样的呢??
编译器在使用变量之前是一定要知道变量的类型的,即使用extern声明也还是不知道具体结构体的组成。
因此,结构体的定义必须要出现在si4432.C,可以放在.c中,也可以放在.h中include进来,一般都是放在.h中,然后多个c文件都可以使用这个类型,这样就可以在一个c文件中定义,另一c文件中引用了。 楼上说得对。
定义struct的类型如果放在.c中,则只能该.c文件使用;定义struct的类型放在.h文件中,则可以通过include让多个.c文件使用。哪个.c文件要使用这个struct的类型,哪个.c文件就要include那个.h文件。
具体对楼主的程序,如果把struct slaveid 定义留在main.c中,除了要在si4432.c中声明extren struct si4432_revdata slaveid[] 外,还是要在某个.h文件中定义struct si4432_revdata类型,然后main.c和si4432.c都include这个.h文件。 xizi 发表于 2013-5-24 10:08 static/image/common/back.gif
楼上说得对。
定义struct的类型如果放在.c中,则只能该.c文件使用;定义struct的类型放在.h文件中,则可以 ...
{:2_35:}
呵呵
你总结的很好,的确是这样的
我测过过了
灰常感谢大家
页:
[1]