Siro
17.07.2014, 10:48
Hallo, ich habe eben ein eigenartiges Verhalten beim Microchip XC8-Compilers Lite bemerkt.
Ich bekam folgende Fehlermeldung:
Error [1347] ; 0. can't find 0x103 words (0x103 withtotal) for psect "swtext1" in class "CONST" (largest unused contiguous range 0x100)
Das klingt so, als wäre der Speicher voll, oder eine Funktion benötigt zu viel Code und sollte in mehrere aufgeteilt werden. Also habe ich immer mehr Funktionen ausgeklammert, aber der Fehler blieb.
Dann habe ich den "Softwarefehler" gefunden, den der Compiler, meiner Meinung nach, hätte anmeckern müssen, oder zumindest einen Warning ausgeben müste.
Eigentlich wäre das doch ein "unreachable code" Diesen Fehler zu finden ist nicht einfach, da es keinen Hinweis gibt wo er verursacht wird :(
Hier der "falsche" Code, ich habe in einer case Anweisung den gleichen Wert 2 mal eingetragen:
void do_messages(void)
{Tmessage msg;
msg_get(&msg);
switch (msg.message)
{
case MSG_SERVO_LEFT : do_msg_SERVO_LEFT(); break;
case MSG_SERVO_RIGHT : do_msg_SERVO_RIGHT(); break;
case MSG_KEY_DOWN : do_msg_KEY_DOWN(); break;
case MSG_KEY_DOWN : do_msg_KEY_UP(); break; /* da sollte eigentlich MSG_KEY_UP stehen, dann geht es auch */
}
}
Ich bekam folgende Fehlermeldung:
Error [1347] ; 0. can't find 0x103 words (0x103 withtotal) for psect "swtext1" in class "CONST" (largest unused contiguous range 0x100)
Das klingt so, als wäre der Speicher voll, oder eine Funktion benötigt zu viel Code und sollte in mehrere aufgeteilt werden. Also habe ich immer mehr Funktionen ausgeklammert, aber der Fehler blieb.
Dann habe ich den "Softwarefehler" gefunden, den der Compiler, meiner Meinung nach, hätte anmeckern müssen, oder zumindest einen Warning ausgeben müste.
Eigentlich wäre das doch ein "unreachable code" Diesen Fehler zu finden ist nicht einfach, da es keinen Hinweis gibt wo er verursacht wird :(
Hier der "falsche" Code, ich habe in einer case Anweisung den gleichen Wert 2 mal eingetragen:
void do_messages(void)
{Tmessage msg;
msg_get(&msg);
switch (msg.message)
{
case MSG_SERVO_LEFT : do_msg_SERVO_LEFT(); break;
case MSG_SERVO_RIGHT : do_msg_SERVO_RIGHT(); break;
case MSG_KEY_DOWN : do_msg_KEY_DOWN(); break;
case MSG_KEY_DOWN : do_msg_KEY_UP(); break; /* da sollte eigentlich MSG_KEY_UP stehen, dann geht es auch */
}
}