www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehlermeldung beim Compelieren LPC2134


Autor: Sergey S. (Firma: ARM LPC2134, uVision3, in C) (serik00)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hilfe, ich finde den Fehler einfach nicht

Ferhlermeldung beim Compelieren im Keil uVesion

main.c(37): error:  #167: argument of type "COM_TYP *" is incompatible 
with parameter of type "unsigned long"
main.c(37): error:  #165: too few arguments in function call

main()
uart0_init(&com_var_1);

C-File
typedef struct
{
  unsigned long baudrate;
  unsigned char dataBits;
  unsigned char stopBits;
  unsigned char parity;
} COM_TYP;                 

extern COM_TYP com_var;  
set_com_data(COM_TYP *pcd_data)
{
    pcd_data->baudrate =   9600;
  pcd_data->dataBits =  8;
  pcd_data->stopBits =  1;
  pcd_data->parity   =  0;
}
C-File
/*UART0 Initialization*/ 
 int uart0_init( unsigned long int baudrate, unsigned char dataBits, unsigned char stopBits, unsigned char parity )
{ 
  unsigned char ucTemp;

  ucTemp = 0;
  // Word Lenght Select
  if (dataBits ==  7)
    ucTemp |= 0x02;
  else if (dataBits == 8)
    ucTemp |= 0x03;
  else
    return(ERR_COM_INIT_LINE_SETTINGS);

  // Stop Bit Select
  if (stopBits == 1 )
    ucTemp |= 0x00;
  else if ( stopBits == 2 )
    ucTemp |= 0x04;
  else
    return(ERR_COM_INIT_LINE_SETTINGS);

  // Parity Enable
   if (parity == 0)    //disable
     ucTemp |= 0x00;
  else if (parity == 1)  //enable
    ucTemp |= 0x04;
  else
    return(ERR_COM_INIT_LINE_SETTINGS);

  //Parity Select
  if (parity == 'o')
    ucTemp |= 0x00;
  else if (parity == 'e')
    ucTemp |= 0x10;
  else if (parity == 1)
    ucTemp |= 0x20;
  else if (parity == 0)
    ucTemp |= 0x30;
  else
    return(ERR_COM_INIT_LINE_SETTINGS);

  // Devisor Latch Access Bit(DLAB) enable
  ucTemp |= 0x80; 
  U0LCR  =  ucTemp;    /*8 bits, 1 stopbit, no Parity, enable DLAB*/

  // Baudrate Select  
  switch ( baudrate )
  {
    case 4800:  
      U0DLM    =  0x02;    /*4800 Baud Rate, 55.296.000 PCLK*/
      U0DLL    =  0xD0;    /*720dez=0x02Do*/
      break; 
    case 9600:  
      U0DLM    =  0x01;    /*9600 Baud Rate, 55.296.000 PCLK*/
      U0DLL    =  0x68;    /*360dez=0x0168*/
      break; 
    case 19200:  
      U0DLM    =  0x00;    /*19200 Baud Rate, 55.296.000 PCLK*/
      U0DLL    =  0x64;    /*180dez=0x0064*/
      break; 
    case 38400:  
      U0DLM    =  0x00;    /*38400 Baud Rate, 55.296.000 PCLK*/
      U0DLL    =  0x5A;    /*90dez=0x005A*/
      break; 
    case 76800:  
      U0DLM    =  0x00;    /*9600 Baud Rate, 55.296.000 PCLK*/
      U0DLL    =  0x68;    /*45dez=0x003D*/
      break; 
    default:
      //return(ERR_COM_INIT_LINE_SETTINGS);
      break;
      
  }

  // Devisor Latch Access Bit(DLAB) disable
  ucTemp = 0;
  ucTemp |= 0x00;
  U0LCR    =  ucTemp;
  
  //FIFO UART enable    
  U0FCR    =  0x01;
  return 1;    
}

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier

>uart0_init(&com_var_1);

und das hier

> int uart0_init( unsigned long int baudrate, unsigned char dataBits, >unsigned 
char stopBits, unsigned char parity )


ist ja wohl nicht das gleiche !

Im Aufruf übergibst du einen Pointer auf eine Struktur. Deine Funktion 
ist aber mit 4 einzel Parameter deklariert.

Gruss Helmi

Autor: Sergey S. (Firma: ARM LPC2134, uVision3, in C) (serik00)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wie mache ich das jetzt.
Soll ich der Funktion beim Aufruf einzelne Parameter übergenen?
Ich kommm nicht drauf.
Bin ein Anfänger!

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Soll ich der Funktion beim Aufruf einzelne Parameter übergenen?

Das wäre die eine Möglichkeit. Die andere wäre deine Funktion auf einen 
Pointer auf eine Struktur um zu ändern.

anstatt so:

 int uart0_init( unsigned long int baudrate, unsigned char dataBits, 
unsigned char stopBits, unsigned char parity )
{

besser so:

int uart0_init(COM_TYP * com_var)

dann kannst du auf die einzelnen Komponenten der Struktur so zugreifen

com_var->baudrate
com_var->dataBits

also so

switch(com_var->baudrate)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.