我在通过指针从结构中获取整数值时遇到了问题,而不是在获取指针地址时获得预期的值。
我在main.c中
struct sonicPins *args1;
int main(){
pthread_t thr1, thr2, thr3, thr4;
//void(*foo1)(int, int, int);
//void(*foo2)(void *args);
//foo1 = &calcSonicS;
//foo2 = &threadFunc;
args1 = malloc(sizeof(struct sonicPins));
args1->trig1 = 21;
args1->echo1 = 20;
//front right.
args1->trig2 = 16;
args1->echo2 = 12;
//rear left;
args1->trig3 = 26;
args1->echo3 = 19;
//rear right.
args1->trig4 = 13;
args1->echo4 = 6;
//printf("print args %d", args1.trig1);
//if(args1!=NULL){
pthread_create(&thr1, NULL, &threadFunc,(void*) &args1);
//}sonicThread.h
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<string.h>
#include<errno.h>
#include<sys/time.h>
#include<wiringPi.h>
typedef struct sonicPins{
//front left.
int trig1;
int echo1;
//front right.
int trig2;
int echo2;
//rear left;
int trig3;
int echo3;
//rear right.
int trig4;
int echo4;
}args;
extern void* threadFunc(void *sonicPinsPtr);
void* threadFunc(void *sonicPinsPtr)
{
struct sonicPins *args = sonicPinsPtr;
int trig = args->trig1;
int echo = args->echo1;
printf("threadFunc got trigger value: %d and echo value %d\n", echo, trig);
value = setup(trig, echo);
printf("distance measured %d\n", value);
}打印距离在此阶段将不起作用,因为回声和trig未获得其预期的引脚值。另一个打印测试是输出完全不正确的值。
它的输出
threadFunc got trigger value: 0 and echo value 26222600应该只是两位数的整数,我不知道如何解决这个问题。
发布于 2015-08-15 23:13:00
当您将args1传递给pthread_create时,您就有了额外的间接性。args1已经是一个指针。
更改:
pthread_create(&thr1, NULL, &threadFunc,(void*) &args1);至:
pthread_create(&thr1, NULL, &threadFunc,(void*) args1);https://stackoverflow.com/questions/32026014
复制相似问题