返回步进电机的C结构中的数组值



我正试图用rabbit 4000处理器旋转步进电机。我有一个队列,它将保存结构,并创建了一个函数来创建运行4绕组步进电机所需的二进制位序列。我正试图将序列从结构中的函数传递给生产者,生产者将用它填充队列。问题是我没有得到放入队列中的预期值。我是不是误解了如何从函数返回结构,还是需要单独分配数组值?相关的代码块是:

typedef struct {
char d[4];
int  delayUs;
} mQueueEntry_t;

mQueueEntry_t setDirStep(int count0, int count1, int count2, int count3){
mQueueEntry_t entry;
entry.d[0] = (!((count0+1)%4));                 //1a
entry.d[1] = (!((count1+1)%4));                 //1b
entry.d[2] = (!((count2+1)%4));                 //2a
entry.d[3] = (!((count3+1)%4));                 //2b
entry.delayUs =10;
printf("Breaking Funct with: %d,%d,%d,%dn",entry.d[0], entry.d[1], entry.d[2], entry.d[3]);
}
// continually stuff a queue with a dedicated structure
void Producer(void* pdata){
mQueueEntry_t entry;
int count0 = 3;
int count1=1;
int count2=2;
int count3=0;
labQueue_t * q = (labQueue_t *) pdata;  // Note use of task data..
printf("Hola Producern");
while (1)
{
entry = setDirStep(count0, count1, count2, count3);
printf("Values after funct call: %d,%d,%d,%dn",entry.d[0], entry.d[1], entry.d[2], entry.d[3]);
count0++;
count1++;
count2++;
count3++;
// send a copy of the element and
switch ( labQueuePut( q, &entry) ){
case LABQ_OK:
printf("put %d,%d,%d,%dn",entry.d[0], entry.d[1], entry.d[2], entry.d[3]);
break;
case LABQ_TIMEOUT:
OSTimeDly(OS_TICKS_PER_SEC/10);
break;
case LABQ_FULL:
OSTimeDly(OS_TICKS_PER_SEC/10);
break;
default:
assert(0);
break;
}
OSTimeDly(1);
}
}

程序的屏幕输出:

Hola消费者
Hola生产者
函数调用后的值:235,0,24,23
已接收(1a=0:1b=1:2a=0:2b=0)0
放入235,0,24.23
Breaking Funct with:0,0,1,0
功能调用后的数值:236,41237,0
received(1a=0:1b=0:2a=0:2b=1)1
放置236,41237.0

我的问题是,函数调用后从breaking函数到values的值应该是相同的。

您的setDirStep()没有返回值,但您将其声明为返回mQueueEntry_t。您在此分配中读取的值将无效:

entry = setDirStep(count0, count1, count2, count3);

这应该显示一个编译器警告,我很惊讶它没有。

要修复错误,请在setDirStep():中添加必要的返回语句

return entry;

以后,一定要打开警告进行编译。如果你使用的是gcc,你只需要-Wall

代码的其余部分看起来还可以

相关内容

  • 没有找到相关文章

最新更新