gpt4 book ai didi

c - 我将结构作为值和引用传递的方法是否正确?

转载 作者:行者123 更新时间:2023-11-30 17:49:16 25 4
gpt4 key购买 nike

我查看了通过值和引用传递结构的示例。我的代码可以编译,但无法正常工作。我正在使用 C 对微 Controller 进行编程,因此很难检查它是否正常工作,但我没有得到所需的输出。

因此,按照说明,我首先定义我的结构:

 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
};

在主方法中我创建了它的一个实例:

    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 对其进行了测试,并且得到了所需的结果,因此结构中一定存在错误 - 我只是不能弄清楚在哪里...任何人都可以帮助我吗?

最佳答案

接收函数似乎是有问题的过程。尝试为接收编写一个 stub 替换,例如:

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

return X;
}

然后尝试运行完整的应用程序,如果它有效,则返回并根据已经提出的一些评论重新考虑您最初收到的信息。

关于c - 我将结构作为值和引用传递的方法是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com