2012-03-15 82 views
0

问题,我试图调用库函数与签名与结构

void GPIO_Init(GPIO_InitTypeDef* GPIO_InitStruct) 

其中GPIO_InitTypeDeftypedef结构。

我曾尝试做如下:

GPIO_InitTypeDef NE1 = { 
    7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP 
}; 
GPIO_Init(NE1); 

但我得到一个编译器错误

error: incompatible type for argument 1 of 'GPIO_Init' expected 'struct GPIO_InitTypeDef *' but argument is of type 'GPIO_InitTypeDef'

我也使用struct关键字尝试:

struct GPIO_InitTypeDef NE1 = { 
    7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP 
}; 
GPIO_Init(NE1); 

但他们我得到编译器错误

error: storage size of 'NE1' isn't known

我做错了什么,以及什么是正确的方法叫GPIO_Init

回答

1

您需要使用:

GPIO_Init (&NE1); // <- Note the '&' indicating pointer-to 

这个函数需要指针GPIO_InitStruct结构,与指示:

void GPIO_Init (GPIO_InitTypeDef * GPIO_InitStruct) 
//        ^
//       pointer 

但你NE1变量是一个实际结构,所以你必须使用&来得到它的指针,所以你可以通过它。

因为您试图传递结构而不是指向结构的指针,这就是导致您的incompatible type错误的原因。

+0

谢谢。我想这整个混乱来自我不正确理解我在做什么。你能解释一下吗? – Randomblue 2012-03-15 09:01:23

+0

@Randomblue,当然,我已经添加了一些额外的信息,希望更清楚。 – paxdiablo 2012-03-15 09:03:54