C指针参数不匹配编译警告

时间:2017-04-28 18:09:20

标签: c pointers avr

来自一个非常生疏的C的快速问题想成为程序员。我有以下情况

  

avr-gcc -Wall -Os -DF_CPU = 8000000 -mmcu = atmega328p -c mirf.c -o mirf.o   mirf.c:在函数'mirf_config'中:mirf.c:76:20:警告:传递   来自不兼容指针类型的'mirf_set_TADDR'的参数1        mirf_set_TADDR(安培; addr);将                       ^在mirf.c中包含的文件中:27:0:mirf.h:52:13:注意:预期'uint8_t *'但参数类型为'uint8_t(*)[5]'   extern void mirf_set_TADDR(uint8_t * adr);

void mirf_config() 
// Sets the important registers in the MiRF module and powers the module
// in receiving mode
{

uint8 addr[5] = {0xA0,0xA1,0xA2,0xA3,0xA4};       
mirf_set_TADDR(&addr); // HERE!!

// Set RF channel
mirf_config_register(RF_CH,mirf_CH);

// Set length of incoming payload 
mirf_config_register(RX_PW_P0, mirf_PAYLOAD);

// Start receiver 
PTX = 0;        // Start in receiving mode
RX_POWERUP;     // Power up in receiving mode
mirf_CE_hi;     // Listening for pakets

}

void mirf_set_TADDR(uint8_t * adr)
// Sets the transmitting address
{
    mirf_write_register(TX_ADDR, adr,5);
}

如何清除警告并将指针正确发送到5个字节?

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要知道的是:

  

mirf.h:52:13:注意:预期'uint8_t'但参数类型为'int   ()[5]'extern void mirf_set_TADDR(uint8_t * adr);

mirf_set_TADDR函数期望指向uint8_t的指针(即uint8_t *),但是你传递的是数组的地址(即uint8_t (*)[5]) 。传递给函数时,数组衰减到第一个元素的地址,因此摆脱了地址运算符:

mirf_set_TADDR(addr);