hey,
hab folgendes Problem:
Ich brauch ne polymorphe Funktion, die Stringparameter aus dem Daten-
und Programmbereich unterscheiden kann.
1 | void foo( const char* const _cstrText) { ... }
|
und
1 | typedef char __attribute__( ( __progmem__)) prog_char;
|
2 | void foo( const prog_char* const _cstrText) { ... }
|
funktioniert nicht, da beide Typgleich sind.
Also hab ich mir einen neuen Typ erstellt:
1 | struct __attribute__( ( __progmem__)) __SProgChar {
|
2 | char __dummy;
|
3 | };
|
4 | typedef struct __SProgChar pchar_t;
|
Um nun einen String (hier: abc mit Inhalt "test") im Programmspeicher
abzulegen, benutze ich
1 | __asm(
|
2 | "\n\t .text"
|
3 | "\n\t .align 2"
|
4 | "\n\t .global abc"
|
5 | "\n\t abc: .asciz \"test\""
|
6 | );
|
7 | extern const prog_char* abc[];
|
8 | extern pchar_t identifier[sizeof( "test")] __attribute__( ( alias( "abc")));
|
Obwohl abc im asm-Teil global und im cpp-Teil extern deklariert ist,
bekomme ich beim compilieren folgende Fehlermeldung in der letzten
Zeile:
1 | error: 'identifier' aliased to undefined symbol 'abc'
|
Ist das ein Bug oder überseh ich was?
mfg Martin