0

我已经查看了通过值和引用传递结构的示例。我的代码可以编译,但不能正常工作。我正在使用 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 对其进行了测试,并且我得到了所需的结果,所以在使用结构的过程中一定有错误 - 我只是不知道在哪里...任何人都可以帮助我吗?

4

1 回答 1

0

接收功能似乎是有问题的过程。尝试为接收编写存根替换,例如:

    unsigned char receive(void)
    {
       unsigned char X = 'a';  
       // or whatever value you want to simulate as being received

       return X;
    }

然后尝试运行您的完整应用程序,它可以正常工作然后返回并根据已经提出的一些评论重新考虑您的原始接收。

于 2013-08-01T05:38:27.303 回答