Un error de sintaxis en mi código de programa C18

2

Estoy usando el MPLAB IDE X v1.41 con el compilador C18 para pragram PIC18F45K20. Mi objetivo es recuperar datos de imagen de una placa de sensores de imagen completamente construida y mostrarlos en la computadora con el cable MAX232 y serial a USB. Los datos de salida del sensor de imagen están en forma digital. Sin embargo, hubo un error en el código de mi programa que me impidió realizar más pruebas. Por favor ayúdame a identificar el problema.

El error se produce en la línea putsUSART() en void main(void)

El código del programa a continuación fue escrito por mí mismo. Tenga en cuenta que es sólo el cuerpo principal del programa:

//----------------------------Global variable----------------------------
unsigned int input0, input1, input2, input3, input4, input5, input6, input7;

//----------------------------USART initialize----------------------------
void init_USART(void)
{
    OpenUSART ( USART_TX_INT_OFF    &
                USART_RX_INT_OFF    &
                USART_ASYNCH_MODE   &
                USART_EIGHT_BIT     &
                USART_CONT_RX       &
                USART_BRGH_HIGH,
                25                  );
}

//----------------------------Main program----------------------------
void main(void)
{
    TRISB = 1;                  //input PORT B
    init_USART();
    while(1)
    {
        input0 = PORTB;
        putsUSART("%d",input0);
    }
}
    
pregunta RonnÉ

3 respuestas

4

Para usar las llamadas de la biblioteca USART (OpenUSART y marcas relacionadas), deberá #incluir el encabezado de la biblioteca USART:

#include <usart.h>

Es probable que también necesite el #include específico del procesador, ya que las bibliotecas admiten varios tipos de piezas y necesitan una pista sobre qué hardware está utilizando:

#include "p18f45k20.h"

Es posible que tenga que definir explícitamente las rutas a estos encabezados si su C18 no está cooperando.

Además, además de lo que dijo Abdullah, las funciones de usuario como su init_USART deberían tener un prototipo de función en su archivo .h principal para evitar tener que estructurar explícitamente su código en una secuencia específica.

void init_USART(void);

ACTUALIZACIÓN: el error está en putsUSART.

Según la documentación de la biblioteca , la llamada a putsUSART no acepta especificadores de formato como printf () y otras llamadas de E / S estándar, solo acepta un puntero.

Parece que primero debes colocar sprintf () en un búfer de cadena, luego llamar a putsUSART en ese búfer.

    
respondido por el Adam Lawrence
2

Esto se debe a que ha utilizado una función no definida en la función principal. Tiene dos soluciones para este problema, ambas funcionarán;

  1. Mueve la función init_USART(void) por encima de main(void) .

  2. Agregue void init_USART(void); antes de void main(void) .

Además, debes hacer algunas inclusiones a tu archivo C con la directiva #include , como señaló Madmanguruman.

    
respondido por el abdullah kahraman
1

Esto no es una llamada de función:

init_USART(void);

Es una mezcla de una declaración de función de estilo antiguo con un tipo de retorno implícito y una declaración de función de estilo nuevo con void . Para llamar a una función que no tiene argumentos, simplemente llámela:

init_USART();

Sin embargo, en estos días, como han dicho otros, debe agregar una declaración de esa función delante de main o mover su definición delante de main . La declaración se vería así:

void init_USART(void);
    
respondido por el Pete Becker

Lea otras preguntas en las etiquetas