Hallo,
ich habe vor einer Weile den cc5x Compiler runtergeladen (freie
Version). Damit hab ich ein Nokia 3310 Display angesteuert, was auch
sehr gut klappt. Bin jetzt an die 1k-grenze gestossen und habe versucht
alle Routinen für Display in eine eigene c-Datei auszulagern.Iich habe
dabei versucht vorzugehen, wie auf www.cc5x.de bzw.
www.stefan-buchgeher.info vorzugehen. Aber ich kriegs irgendwie enicht
hin und je länger ichs versuch, desto verwirrter werde ich.
Ich habe mir eine main.c (hier soll nur das Hauptprogramm ablaufen),
eine lcd_routinen.c und ein projekt.h angelegt. Jetzt weiß ich aber
nicht, wo ich meine lcd_routinen "includen" muss. Im main. oder in
projekt.h? Außerdem hab ichnicht genau verstanden, wie man vorgeht, wenn
eine Funktion zwei Übergabewerte besitzt. Z.B. hab ich eine Funktion
Set_Cursor(char x, char y). Geht das überhaupt? Außerdem hab ich eine
Funktion Put_String(const char *s) um ein String auf dem Display
auszugeben. Kann man Pointer mit diesem extern-Befehl bekannt machen?
Wäre nett, wenn mir jemand helfen könnte.
Hallo,
deine lcd_routinen.c musst du nirgendwo includen. Nachdem die
C-Quelldateien compiliert worden sind, werden diese durch den Linker
zusammengefügt.
Du musst nur deiner main.c (vor der Verwendung der jeweiligen Funktion)
mitteilen, dass die Funktion, z.B. void Set_Cursor(char x, char y), mit
genau diesen Parametern (char x, char y) und diesem Rückgabewert (void)
existiert.
Um diese Deklarationen auszulagern, schreibt man sie in Header-Dateien,
die dann am Anfang des Quelltextes includiert werden. Die eigentliche
Funktion in lcd_routinen.c findet dann der Linker.
Ich kann ein C-Buch, gratis und online z.B. unter
http://openbook.galileocomputing.de/c_von_a_bis_z/ empfehlen. Wenn du
lieber etwas handfestes bevorzugst, musst du dir wohl was kaufen.
Gruß
David
ok...das hab ich jetzt soweit verstanden und hab es auch geschafft,
verschiedene c-dateien anzulegen und somit funktionen auszulagern. mein
problem ist jetzt noch, dass ich an eine funktion einen pointer
übergeben will. dieser ist mit "const char *s" im main-file und mit
"extern page0 'const char *s" deklariert. da bringt mir der compiler
einen fehler: "'extern const' is not supported". was kann bzw. muss ich
anders machen damits funktioniert??
Kannst du bitte komplette Code-Ausschnitte posten (zumindest die
komplette Deklaration der Funktion), denn so kann man nur raten, was du
meinst.
Ich rate mal, du hast statt einer Funktion eine globale Variable
deklariert? Die wird nicht const sein dürfen. Keine Ahnung, was du damit
machen willst.
Gruß
David
also ich versuche mit einem ds1820 sensor die temperatur zu messen und
auf einem nokia 3310 display auszugeben. die funktionen dafür gibs ja
eigentlich schon zu hauf, nur ich versuch diese selber zu schreiben bzw.
versuche nach zu vollziehen, wie andere es gemacht haben und nutze den
code. ist auch noch nicht ganz fertig. das display kann ich ansteuern.
nur wird der code zu groß. deshalb versuchs ich es auf mehrere c-files
zu verteilen. da komm ich leider nicht so richtig weiter....
ich hab jetzt weiter rum probiert und habs anscheinend fast richtig
gemacht :-)
nur leider bringt mir mplap einen fehler, wenn ich die einzelnen
asm-datein zusammen linken will:
MPLINK 4.14, Linker
Copyright (c) 2007 Microchip Technology Inc.
Error - symbol '_LcDA' has multiple definitions.
Errors : 1
kann mir jemand helfen und sagen was der fehler bedeutet? anscheinend
wurde _LcDA mehrfach definiert. ich hab so ein symbol aber gar nicht
deklariert, deshalb versteh ich den fehler nicht.
Hi,
ich hatte das gleiche Problem... die 1k-Grenze...
Dies konnte ich allerdings lösen, bloß ich habe mehrere Methoden, an die
merhere Parameter übergeben werden. Bloß die nimmt der Compiler nicht
mehr an. Kann mir da vielleicht jmd helfen?
Wichtige Daten:
Compiler: cc5x
Mikroprozessor: 16F877A
Der Fehler sieht so aus:
extern page1 void senden(uns8 adresse, uns8 regbyte, uns8 datenbyte);
^------
Error haupt_2_0.h 29: One unsigned 8 bit parameter (not pointer) is
supported for extern function 'senden'
(The single parameter is transfered in 'W' because local storage is not
shared between modules)
Error options: -ew: no warning details -ed: no error details -eL: list
details
wenn man funktionen in mehrere c-dateien auslagert, kann man an sie nur
noch einen einzigen parameter (1 byte) übergeben. das heißt, du musst
deine funktionen aufteilen, so das eine variable übergeben und ein teil
abgearbeitet wird. wenn das nicht geht, weil du z.b. für eine berechnung
mehrere parameter benötigst, musst du die variablen als extern
deklarieren (siehe meine files, www.cc5x.de, www.stefan-buchgeher.info).
du weist vorher alle parameter zu und rufst dann die funktion (ohne
übergabeparameter) auf. ist das so verständlich?
kann mir vielleicht jemand bei meinem problem helfen?? ich versteh wie
gesagt nicht, warum der compiler sagt, ich hätte eine variable mehrfach
deklariert.
MPLINK 4.31, Linker
Copyright (c) 2009 Microchip Technology Inc.
Error - symbol '_LcTA' has multiple definitions.
Errors : 1
Ich habe genau das gleich Problem. Das Problem scheint bei mir genau so
wie bei dir nicht am Code zu liegen sondern an irgendwas anderem.
Weis hier jemand weiter ?
Ich habe das Symbol mit dem Namen nie definiert.
Das ist so nervig, da Programmiert man drei Tage und dann kommt auf
einmal sowas.
Mitlerweile habe ich den Fehler eingrenzen können. Ich arbeite mit
mehreren Modulen um die 1k Grenze zu umgehen. Wenn ich jedoch eine
bestimmte Funktion (die Funktion ist sogar leer) mit einem Parameter
aufrufe dann wird der fehler gemeldet. Definiere ich diese Funktion und
den Parameter dann geht alles gut...seltsam.
Vielleicht weiß hier jemand rat?
mfg,christian