mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme: Codevision AVR vs AVR GCC


Autor: Hans Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand eine Ahnung wiso AVR GCC folgenden Code schluckt und 
Codevision nicht:

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

und so der Aufruf:
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 *'

Autor: Andreas H. (Gast)
Datum:

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

Autor: let (Gast)
Datum:

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

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.