Fehler gefunden!
Die Adresse war richtig. Die Grütze war das Problem.
Ich habe blind von einem 8051er Code abgeschrieben. Der SDCC kann wohl
tatsächlich Strukturarrays mit variablen Stringlängen pro Element
verwalten. Der GCC compiliert ohne zu murren, das Ergebnis ist aber
undefinierbar. Anbei ein Codeschnipsel zur Verdeutlichung:
Original:
struct lexcfg {
code char *string;
void (*function) (uint8_t) ;
event_t event;
uint8_t button_cfg;
};
static code struct lexcfg commandlist[] = {
{"NEXT", parse_event, E_NEXT, BUTTON_6 | B_UP},
{"PREVIOUS", parse_event, E_PREV, BUTTON_4 | B_UP},
GCC nimmt es nur so:
struct lexcfg {
const char string[12];
void (*function) (unsigned char) ;
event_t event;
uint8_t button_cfg;
};
const struct lexcfg commandlist[] PROGMEM = {
{"NEXT ", parse_event, E_NEXT, BUTTON_6 | B_UP},
{"PREVIOUS ", parse_event, E_PREV, BUTTON_4 | B_UP},
Gruß Matthias