www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Compiler error: undeclared (first use in this function)


Autor: Patrick H. (paddix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Versuche gerade den UART auf dsPIC33 zu initialisieren, erhalte aber 
folgende Fehlermeldung beim Builden. Kann mir jemand weiterhelfen?

serial.c: In function `initU2':
serial.c:23: error: `TRTS' undeclared (first use in this function)
serial.c:23: error: (Each undeclared identifier is reported only once
serial.c:23: error: for each function it appears in.)
serial.c: At top level:
serial.c:45: warning: return type defaults to `int'


Hier der Sourcecode:

//---------------------------------------------------------------------- 
-------
// Asinchronous Serial communication
// UART RS232 asynchronous communication demo code
//---------------------------------------------------------------------- 
-------
#include "p33FJ64MC508.h"

//---------------------------------------------------------------------- 
-------
// I/O definitions for the dsPIC30 Motor Control Dev board
//---------------------------------------------------------------------- 
-------
# define CTS _RG3                // Clear to Send, input, HW handshake
# define RTS _RG2                // Request to Send, output, HW 
handshake
# define TRTSTRISGbits .TRISG2  // Tris control for RTS pin
# define BRATE 34                // 115200 Bd (BREGH=1)
# define U_ENABLE 0x8008        // enable UART, BREGH=1, 1 stop, no 
parity
# define U_TX     0x0400

//---------------------------------------------------------------------- 
-------
// Initialization of UART 2 module
//---------------------------------------------------------------------- 
-------
void initU2(void){
  U2BRG  = BRATE;     // initialize the baud rate generator
  U2MODE = U_ENABLE;  // initialize the UART module
  TRTS   = 0;         // make RTS an output pin
  RTS    = 1;         // set RTS default status (not ready)
} // initU2

int putU2(int c){
  while(CTS);             // wait for !CTS, clear to send
  while(U2STAbits.UTXBF); // wait while Tx buffer full
  U2TXREG = c;
  return c;
} // putU2

char getU2(void){
  RTS = 0;                 // assert Request To Send !RTS
  while(!U2STAbits.URXDA); // wait for a new character to arrive
  return U2RXREG;          // read the character from the receive buffer
  RTS = 1;
} // getU2

//---------------------------------------------------------------------- 
-------
// Main routine
//---------------------------------------------------------------------- 
-------
main()
{
  char c;

  initU2();   // init the UART2 serial port
  putU2('>'); // prompt

  while(1){
    c = getU2();  // wait for character
    putU2(c);     // echo the character
  } // while
} //main

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte es nicht
int main (void)
{...
return 0;
}
heissen?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und muss da nicht noch ein
#define TRTS ...
hin?

Ich weiss nicht, ob das stimmt. Ich kenne nur AVR.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, vermutlich sollte das TRTS irgendwo aus einem System-Headerfile
kommen, steht dort aber nicht so drin.  Entweder Schreibfehler, oder
Fehler im Systemheader.

Ah nein, ich hab's gefunden:
# define TRTSTRISGbits .TRISG2  // Tris control for RTS pin

Da fehlt simpel ein Leerzeichen:
# define TRTS TRISGbits .TRISG2  // Tris control for RTS pin

Autor: Patrick H. (paddix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ja das war das Problem.

Autor: Patrick H. (paddix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem war, dass bei den I/O definitions die Zuweisung der 
Konstante TRTS  zusammenhängend geschrieben wurde und sollte natürlich 
#define TRTS TRISGbits.TRISG2 lauten.

Die 'warning' stammte daher, wie Patrick (Gast) korrekterweise bemerkt 
hat,   dass die Funktion 'main' folgendermassen lauten sollte:

int main (void)
{ ...
  return 0;
}


Vielen Dank für die schnelle Hilfe

Autor: Patrick H. (paddix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun kann ich das Projekt zwar compilieren und builden. Aber leider 
funktioniert die Kommunikation mit dem Hyperterminal nicht. Die 
Verbindung zum Hyperterm kann nicht aufgebaut werden. Die Einstellungen 
im Hyperterm sollten jedoch korrekt sein (115200 Bd, (8 Datenbit, 1 
Stopbit, No parity, Hardware handshake).
Muss ich im dsPIC33 zusätzlich noch den Oszillator konfigurieren, oder 
mit welcher Frequenz lauft der uC per default?

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den Oszillator schon konfigurieren, und zwar mit den FUSES, die 
Du entweder im Sourcecode eingeben kannst (ich glaube irgendwie so 
#PRAGMA ...)
oder im Programmer (d.h. in MPLAB).
Und zwar müssen die FUSES zum Oszillator passen, der in Hardware 
realisiert ist, also z.B. Quarz. Hast Du denn ein Schema?

Die Default-Frequenz (für den internen RC-Osziollator?) entnimmst Du am 
besten dem Datenblatt.

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.