Forum: Mikrocontroller und Digitale Elektronik AVRGCC nach Keil C166


von Owen S. (senmeis)


Lesenswert?

Servus,

ich möchte eine Methode vom AVR (AVRGCC) auf einem C166 (Keil) anpassen.

In AVRGCC:
Definition:
1
void myfunction(char* PROGMEM string){}
Deklaration:
1
void myfunction(char* PROGMEM);
Aufrufen:
1
myfunction(PSTR("String"));

Meine Anpassung in Keil:
Definition:
1
void myfunction(char* string){}
Deklaration:
1
void myfunction(char*);
Aufrufen:
1
myfunction(*("String"));

Stimmt meine Anpassung?

Vielen Dank im Voraus.
Senmeis

von Michelle K. (Firma: electronica@tdnet) (michellekonzack) Benutzerseite


Lesenswert?

Sorry, keine Ahnung von diesem proprietären Compiler, aber ich würde den 
Code einfach durch den Compiler dreschen und gucken was passiert!

Das geht schneller als auf die Antwort hier warten...

Open Source rulez!

Schönes Ostereiersuchen
Michelle bei der Arbeit -- Örgs!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Aufrufen: myfunction("String");

Ansonsten stimmt's.

Du kannst auch einfach irgendwo im Header folgendes machen, dann musst 
du im Code nichts ändern:

#define PSTR
#define PROGMEM

von Owen S. (senmeis)


Lesenswert?

Vielen Dank, Andreas.

Eines verstehe ich noch nicht. Nach der GCC Anleitung soll PSTR wie 
folgt definiert werden:
1
#define PSTR(s) ((const PROGMEM char*)(s))

Also ein Casting auf Zeiger. Deswegen habe ich das Stern-Zeichen 
absichtlich hinzugefügt.

Vielen Dank im Voraus.
Senmeis

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ein "*" macht kein Cast, sondern eine Dereferenzierung.

In deiner Anwendung kannst du einfach das PSTR weglassen bzw.
1
#define PSTR(S) S

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.