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....
und die display-routinen....mit dem ds hab ich mal weggelassen, weil da ist bis jetzt nur der reset fertig
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.