es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo dificultades al usar typedef en una función… recibiendo el error “redeclarado como tipo de símbolo diferente”.

UARTATMEGA328.h

“` #ifndef UART_ATMEGA328_H

<h1>#define UART_ATMEGA328_H_</h1>

<p>void USART_Init(unsigned long); /* Función de inicialización de USART <em>/
char USART_RxChar(); /</em> Función de recepción de datos <em>/
void USART_TxChar(char); /</em> Función de transmisión de datos <em>/
void USART_SendString(char</em>); /* Función para enviar una cadena de datos por USART */

<h1>#endif /* UART<em>ATMEGA328</em>_H_ */</h1>

“`

sim900.h

“` #ifndef SIM900_H

<h1>#define SIM900_H</h1>

typedef void (USART_Init)(unsigned long);
typedef void (USART_SendString)(char*);
typedef void (*USART_TxChar)(char);

typedef struct
{
USART_Init start;
USART_SendString write;
USART_TxChar tx;
// Define cualquier cosa adicional que necesites
} Sim900Config_t;

void InitiateGSM(); // Verificación GSM
void SendSMS(char*); // Función para enviar SMS
void StoreSMS(); //Almacenamiento de SMS

<h1>#endif /* SIM900_H */</h1>

“`

Error: ‘USART_Init’ ha sido redeclarada como un símbolo diferente / ‘USART_SendString’ ha sido redeclarada como un símbolo diferente / ‘USART_TxChar’ ha sido redeclarada como un símbolo diferente

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error está ocurriendo porque los typedefs en el archivo sim900.h están chocando con las declaraciones de funciones en el archivo UART_ATMEGA328.h. Específicamente, la estructura Sim900_Config_t en sim900.h está utilizando los mismos nombres de los tipos de punteros de función (USART_Init, USART_SendString y USART_TxChar) que las declaraciones de funciones en UART_ATMEGA328.h.

    Para resolver el error, los tipos de punteros de función en sim900.h deben ser renombrados para evitar colisiones con las declaraciones de funciones en UART_ATMEGA328.h. Por ejemplo:

    typedef void (*GSM_USART_Init)(unsigned long);
    typedef void (*GSM_USART_SendString)(char*);
    typedef void (*GSM_USART_TxChar)(char);
    
    typedef struct
    {
        GSM_USART_Init start;
        GSM_USART_SendString write;
        GSM_USART_TxChar tx;
        //Definir todo lo que usted necesite ..
    }Sim900_Config_t;
    

    Con estos cambios, el archivo sim900.h no debería chocar con el archivo UART_ATMEGA328.h, y el código debería compilarse sin errores.

Comments are closed.