Forum: Mikrocontroller und Digitale Elektronik GCC+AVR CCS+PIC - unterschiedliches Pointerhandling?


von Matthias (Gast)


Lesenswert?

Gibt es Unterschiede in der Pointerbehandlung zwischen GCC+AVR und dem 
CCS Compiler für PIC?

Bei GCC hat la die korrekte Länge der Zeichenkette. Bei CCS ist la = 0. 
Muss bei CCS irgendwas anders eingestellt werden?

uint8_t ist bei CCS wie folgt definiert:
#define uint8_t  unsigned char        /* 8Bit ohne Vorzeichen  */
1
...
2
3
my_prog((uint8_t*)"Test");
4
5
...
6
7
8
9
// Subroutine
10
uint8_t my_prog(uint8_t *wr_string) {
11
uint8_t la;       // Stringlänge
12
  la = strlen(wr_string);
13
14
  ....
15
16
}

von Frank K. (fchk)


Lesenswert?

Schau mal nach, wo Dein String "Test" gelandet ist - im RAM oder im 
Flash. Das siehst Du im .map-File. Wenn er im Flash gelandet ist, zeigen 
Deine Pointer ins Leere, denn sowohl PIC als auch AVR haben getrennte 
Adressräume für RAM und Flash. Für einen Pointer ins Flash brauchst Du 
ein Attribut wie __rom oder so, damit der Compiler den passenden Code 
erzeugt, und Du solltest dann den String erstmal ins RAM kopieren. Lies 
die Anleitung Deines Compilers zu diesem Thema - ich verwende den CCS 
nicht.

fchk

von Matthias (Gast)


Lesenswert?

Aus der CCS Dok. werde ich nicht ganz schlau.

Wie wird erreicht, dass alle const Variablen im RAM liegen und auch die 
Zeiger auf den RAM Bereich verweisen. Also so wie beim GCC/AVR.

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.