mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik problem mit 1k-grenze bei cc5x


Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner??

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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??

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: paul (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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....

Autor: paul (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier das main-file

Autor: paul (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und die display-routinen....mit dem ds hab ich mal weggelassen, weil da 
ist bis jetzt nur der reset fertig

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
neuer versuch . . .

Autor: TeddyD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian H. (chris07011985)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.