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


von Hans Peter (Gast)


Lesenswert?

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 *'

von Andreas H. (Gast)


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.

von let (Gast)


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:
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.

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
Noch kein Account? Hier anmelden.