我已经看过通过值和引用传递结构的示例。我的代码编译但不能正常工作。我正在使用C编程一个微控制器,所以很难检查它是否正常工作,但我没有得到所需的输出。
所以,按照说明,我首先定义我的结构:
struct package //define a structure type called package.
{
unsigned char
wavType,startFreq1,startFreq2,startFreq3,startFreq4,
stopFreq1,stopFreq2,
stopFreq3,stopFreq4,step,dura,amp,sett; //define bytes to use
};
在main方法中,我创建了一个实例:
struct package p; //create a new instance of Package
现在我通过引用(指针 - 因为我正在使用C)将它传递给函数:
getPackage(&p);
在函数getpackage()中,我更新了p:
的各个元素的值 getPackage(struct package *p) //Get data package
{
p->wavType = receive();
p->startFreq1 = receive();
p->startFreq2 = receive();
p->startFreq3 = receive();
p->startFreq4 = receive();
p->stopFreq1 = receive();
p->stopFreq2 = receive();
p->stopFreq3 = receive();
p->stopFreq4 = receive();
p->step = receive();
p->dura = receive();
p->amp = receive();
p->sett = receive();
}
这是接收功能:
unsigned char receive(void)
{
unsigned char dataR = 0x00;
for(signed char i = 0; i <=7 ;i++)
{
dataR |= PORTBbits.RB1 << i; //move the value on the data pin to a bit in dataR
}
return dataR;
}
问题:这会正确更新包p中的字节吗?另外,如果我想在其他地方使用它,是否需要返回包p?我问这个是因为......
我现在通过值将包p传递给另一个函数:
sendSine(p);
此函数使用包p:
中的字节值void sendSine(struct package p)
{
dataL = p.startFreq1;
dataH = p.startFreq2;
send(dataL,dataH);
dataL = p.startFreq3;
dataH = p.startFreq4;
send(dataL,dataH);
}
我知道函数send(dataL,dataH)正在运行,因为我已经通过手动设置dataL和dataH来测试它,并且我得到了所需的结果,所以在结构的过程中一定有错误 - 我只是不能找出哪里......任何人都可以帮助我吗?
答案 0 :(得分:0)
接收功能似乎是有问题的程序。尝试为接收编写存根替换,例如:
unsigned char receive(void)
{
unsigned char X = 'a';
// or whatever value you want to simulate as being received
return X;
}
然后尝试运行完整的应用程序,如果它有效,那么回过头来重新考虑一下已经发表的一些评论的原始接收。