Pointers 在结构中使用PIC端口地址

Pointers 在结构中使用PIC端口地址,pointers,struct,microcontroller,pic18,Pointers,Struct,Microcontroller,Pic18,我试图通过使用函数通过结构传递端口地址,因为我不知道如何正确使用指针。下面是我的结构和函数的代码: typedef struct { read:1; last_read:1; changed:1; unsigned short *port; //Here the declaration of the pointer that will receive the address pin:1; active_state:1; } Input; void Setup_input(Input s,

我试图通过使用函数通过结构传递端口地址,因为我不知道如何正确使用指针。下面是我的结构和函数的代码:

typedef struct {
read:1;
last_read:1;
changed:1;
unsigned short *port;    //Here the declaration of the pointer that will receive the address
pin:1;
active_state:1;
} Input;

void Setup_input(Input s,char *port, char pin, char active_state){
 s.port = &port;        //HERE I TRY TO PASS THE ADDRESS OF THE PORT TO THE POINTER OBJECT
 s.pin = pin;
 s.active_state = active_state;
结果是,我没有正确地执行操作,并且无法正确读取或控制端口。我正在使用Mikroelectronic PRO编译器。

这行代码

s.port = &port;
将参数的地址存储到成员
端口中
。当您取消引用结构中的指针时,您将访问调用
Setup\u input()
时参数
port
所在的堆栈内存。这会导致未定义的行为

显然,您想要的是指定参数的值:

s.port = port;

当你为微控制器编程时,建议你已经通过了C语言的学习。你真的应该在这些位域中添加一个类型,即
无符号int
。1位
int
是个坏主意。如果我只修复那一行,我可以使用成员s.port作为原始端口吗?我的意思是,我能用这个成员读写端口吗?是的,如果你修复了你的代码,那么你就用一个指针的副本。只要数据宽度相同,就可以了。非常感谢,我修复了一个部分,但我意识到我的问题是来自mu函数的结构参数,如果你看,我的函数正在接收我想要编辑的结构,但我认为函数正在创建结构的副本并传递给它。我需要以某种方式传递原始结构的指针,这样我就可以编辑我在函数中放置的每个结构。你知道如何用结构指针声明函数吗?
void Setup\u input(input*s,char*port,char pin,char active\u state)
——坦白说,买一本好的C语言书()。如果你能区分C语言问题和微控制器问题,那么给微控制器编程就更有趣了。