Probleme: Codevision AVR vs AVR GCC

Gast #1123363
Hat jemand eine Ahnung wiso AVR GCC folgenden Code schluckt und 
Codevision nicht:

Definitionen:
1
#define CR "\r\n"
2
void uart_puts (const unsigned char *s);

und so der Aufruf:
1
uart_puts(CR);


Error: included from: main.c: function argument #1 of type 'flash 
unsigned char [3]' is incompatible with required parameter of type 
'const unsigned char *'
Gast
Erstens mal gibt es in CodevisionAVR die Funktion uart_puts nicht, 
ausser du schreibst sie selbst oder bindest eine (externe!) Lib ein, die 
diese Funktion zur Verfügung stellt.

Es gibt die Funktion puts, die einen String aus dem RAM auf der 
seriellen Schnittstelle ausgibt, und es gibt die Funktion putsf, die 
einen String aus dem FLASH auf der seriellen Schnittstelle ausgibt. 
Beide Funktionen sind in der Lib stdio.h vorhanden.

Wenn du einer Funktion, die einen Zeiger auf Daten im RAM erwartet, 
einen Zeiger auf Daten im FLASH übergibst, bekommst du den geschilderten 
Fehler.

Hinweis: CR wird während des Kompilierens als Konstante im FLASH 
gespeichert.

Vielleicht solltest du dir erstmal ausführlich die Hilfe zu 
CodevisionAVR ansehen, bevor du mit diesem Kompiler arbeitest.
Gast
CV kann mit der Harvard Architektur umgehen und verfügt
dazu über das Schlüsselwort "flash". Damit kann dem Compiler
gesagt werden ob die Daten auf die ein Zeiger zeigt im Flash
stehen (oder im RAM wenn es fehlt).
Es ist also nicht nötig sich Daten mit separaten Funktionen
aus dem Flash zu holen wie es beim GCC gemacht wird.

String Konstanten sind vom Typ "const flash unsigned char*"
und werden im Flash abgelegt. Wenn eine Funktion Daten die
im Flash stehen entgegennehmen soll muß sie entsprechend
vereinbart werden:
1
void uart_puts (const flash unsigned char *s);
Damit müßte es gehen.

CV hat noch einige Besonderheiten bezügl. der Verwendung von
Registern für Variablen. Beim GCC braucht man sich darum nicht
sonderlich zu kümmern. Beim CV kann das Umstellen einiger Zeilen
bei der Variablendeklaration einen großen Einfluß auf die
Geschwindigkeit des Programms haben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.