来自一个非常生疏的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个字节?
谢谢!
答案 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);