www.mikrocontroller.net

Forum: PC-Programmierung AVR309 Borland C++ Compiler


Autor: Bjoern2006 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
ich habe folgendes Problem, ich möchte einen AT90S2313 der bei mir am
USB Port hängt über ein selbstgeschriebenes C++ Programm ansprechen nur
ich bekomme es einfach nicht hin die DLL zu verwenden. Das Code Beispiel
von Igor Cesko lässt sich nicht Compilieren und ich habe auch keine
Erfahrungen mit dem Einbinden von DLLs in C++ Programmen. Ich hoffe ihr
könnt mir dabei helfen. Vielen Dank schonmal im Vorraus
Mfg Björn

Hier erstmal der Code von Igor Cesko:
#####################################################################

#ifdef __cplusplus
extern "C" {
#endif

#define AVR309DLL    "AVR309.dll";
  //return values from AVR309DLL functions:
#define NO_ERROR    0;
#define DEVICE_NOT_PRESENT    1;
#define NO_DATA_AVAILABLE    2;
#define INVALID_BAUDRATE    3;
#define OVERRUN_ERROR    4;
#define INVALID_DATABITS    5;
#define INVALID_PARITY    6;
#define INVALID_STOPBITS    7;

int __stdcall DoGetInfraCode(uchar * TimeCodeDiagram, int DummyInt, int
* DiagramLength);
int __stdcall DoSetDataPortDirection(uchar DirectionByte);
int __stdcall DoGetDataPortDirection(uchar * DataDirectionByte);
int __stdcall DoSetOutDataPort(uchar DataOutByte);
int __stdcall DoGetOutDataPort(uchar * DataOutByte);
int __stdcall DoGetInDataPort(uchar * DataInByte);

int __stdcall DoSetDataPortDirections(uchar DirectionByteB, uchar
DirectionByte, uchar DirectionByte, uchar UsedPorts);
int __stdcall DoGetDataPortDirections(uchar * DataDirectionByteB, uchar
* DataDirectionByteC, uchar * DataDirectionByteD, uchar * UsedPorts);
int __stdcall DoSetOutDataPorts(uchar DataOutByteB, uchar DataOutByteC,
uchar DataOutByteD, uchar UsedPorts);
int __stdcall DoGetOutDataPorts(uchar * DataOutByteB, uchar *
DataOutByteC, uchar * DataOutByteD, uchar * UsedPorts);
int __stdcall DoGetInDataPorts(uchar * DataInByteB, uchar *
DataInByteC, uchar * DataInByteD, uchar * UsedPorts);

int __stdcall DoEEPROMRead(ushort Address, uchar * DataInByte);
int __stdcall DoEEPROMWrite(ushort Address, uchar DataOutByte);
int __stdcall DoRS232Send(uchar DataOutByte);
int __stdcall DoRS232Read(uchar * DataInByte);
int __stdcall DoSetRS232Baud(int BaudRate);
int __stdcall DoGetRS232Baud(int * BaudRate);
int __stdcall DoGetRS232Buffer(uchar * RS232Buffer, int DummyInt, int *
RS232BufferLength);
int __stdcall DoRS232BufferSend(uchar * RS232Buffer, int DummyInt, int
*  RS232BufferLength);
int __stdcall DoSetRS232DataBits(uchar DataBits);
int __stdcall DoGetRS232DataBits(uchar * DataBits);
int __stdcall DoSetRS232Parity(uchar Parity);
int __stdcall DoGetRS232Parity(uchar * Parity);
int __stdcall DoSetRS232StopBits(uchar StopBits);
int __stdcall DoGetRS232StopBits(uchar * StopBits);

#ifdef __cplusplus
    }
#endif

######################################################################

Und die Fehlermeldungen:


orland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
moep.cpp:
Error E2147 usb.cpp 18: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 19: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 20: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 21: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 22: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 23: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 25: 'uchar' cannot start a parameter declaration
Error E2303 usb.cpp 25: Type name expected
Error E2147 usb.cpp 26: 'uchar' cannot start a parameter declaration
Error E2303 usb.cpp 26: Type name expected
Error E2147 sub.cpp 27: 'uchar' cannot start a parameter declaration
Error E2303 usb.cpp 27: Type name expected
Error E2147 usb.cpp 28: 'uchar' cannot start a parameter declaration
Error E2303 usb.cpp 28: Type name expected
Error E2147 usb.cpp 29: 'uchar' cannot start a parameter declaration
Error E2303 usb.cpp 29: Type name expected
Error E2147 usb.cpp 31: 'ushort' cannot start a parameter
declaration
Error E2303 usb.cpp 31: Type name expected
Error E2147 usb.cpp 32: 'ushort' cannot start a parameter
declaration
Error E2303 usb.cpp 32: Type name expected
Error E2147 usb.cpp 33: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 34: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 37: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 38: 'uchar' cannot start a parameter declaration
Error E2147 usb.cpp 39: 'uchar' cannot start a parameter declaration
Error E2228 usb.cpp 39: Too many error or warning messages
*** 26 errors in Compile ***

################################################################
die uchar hab ich schonmal in unsigned char umgeschrieben aber geht
trotzdem nicht :-(

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die letzte Zeile ist unverständlich.

Du hast also an den Anfang des Cesko'schen Quelltext ein

  typedef unsigned char uchar;

geschrieben und "es geht trotzdem nicht"? Was heißt "geht nicht"?

Liest Du Dir die ausgegebenen Fehlermeldungen auch durch? Immer mit der
ersten anfangen, der Rest sind oft Folgefehler.

Autor: Thomas Hack (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Die Lösung für dieses Problem sind die drei
Win32 Funktionen:
LoadLibrary(..), GetProcAddress(..) und FreeLibrary(..)!
Mit diesen Funktionen kannst Du eine DLL zur Laufzeit
einbinden und brauchst damit nicht die *.LIB Datei.
Als Anhang habe ich meine AVR309.h beigefügt. Dort
wird die AVR309.DLL eingebunden und die Funktionen aus der
DLL mittels GetProcAddress(..) zugänglich gemacht.

Grüße

Thomas

Autor: Olaf Stieleke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum einen empfehle ich den Tip mit dem typedef.

Zum zweiten dürfte die von Igor mitgelieferte LIB mit einem
Borland-Compiler überhaupt nicht funktionieren, weil sie mit Visual-C
erstellt wurde.

Solche LIBs können mit dem Tool TLibImp (oder wars TImpLib ?)
Borland-tauglich aus der DLL erstellt werden. Spart einem das Gefinger
mit LoadLibrary u.ä.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Björn 2006
Willst Du eine "virtuelle COM - Schnittstelle programmieren, damit
die Schaltung von Igor auch von anderen Terminalprogrammen benutzt
werden kann? Daran hätte ich auch großes Interesse.
Ich kann leider nichts mit c++ anfangen. :-((

MfG Paul

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.