GCC+AVR CCS+PIC - unterschiedliches Pointerhandling?

Gast #2428401
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
}
#2428590
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren