Guten Tag allerseits,
ich versuche eine kleine einfache Software für eine Bedienungseinheit zu
schreiben. Die Bedienungseinheit ist mit einem 8051 bestückt, genauer es
ist ein M80C31F von OKI drauf. Zum entwicklen habe ich den WICE M4 Eprom
Emulator.
Nun zum Problem:
Ich habe bereits Treiber zur Ansteuerung von Display/Tastatur und RS232
geschrieben. Nur verhält sich der Compiler oder der 8051 sehr
merkwürdig.
z.b.
habe ich eine ISR die vom Ext Int0 ausgelöst wird (dies geschieht bei
einem Tastendruck). Der Code in der ISR funktioniert so wie ich mir das
vorstelle, füge ich jedoch noch weitere Zeilen in die ISR ein, so läuft
plötzlich das gesammte Programm nicht mehr. (Nicht mal eine Livesign LED
die eigentlich immer blinken sollte, auf dem Display kommt auch nichts
mehr, tote hose überall)
Der Compiler jedoch meldet keinen Fehler.
Danach habe ich um zu Testen was denn jetz nicht richtig ist, immer mehr
Code auskommentiert bis ich nur noch bei diesem Stück war:
1 | void main(void) // Hauptfunktion
|
2 | {
|
3 |
|
4 | unsigned int system_clock = 0;
|
5 | unsigned char com_clock = 0;
|
6 | unsigned char lcd_clock = 0;
|
7 |
|
8 | for(;;)
|
9 | {
|
10 |
|
11 | /*
|
12 | if(com_clock == 50 & (RS232_send_packet==0)) // Falls 50ms vorbei und letztes Paket gesendet.
|
13 | {
|
14 | RS232_send_packet = 1; // Neues Paket senden.
|
15 | TI = 1; // künstlichen Interrupt auslösen
|
16 | com_clock = 0; // Takt Zaehler zurück setzen
|
17 | }
|
18 | */
|
19 |
|
20 | if(system_clock == 1000) // Jede Sekunde
|
21 | {
|
22 | P1_1 = ~P1_1; // Blinkled invertieren
|
23 | system_clock = 0;
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 | delay_1ms(); // Hauptzykluszeit
|
29 | system_clock++; // System Zähler
|
30 | com_clock++; // RS232 Takt
|
31 | lcd_clock++;
|
32 |
|
33 | if(com_clock > 60) // Überlaufschutz
|
34 | {
|
35 | com_clock = 0;
|
36 | }
|
37 | if(system_clock > 1000) // Überlaufschutz
|
38 | {
|
39 | system_clock = 0;
|
40 | }
|
41 |
|
42 | }
|
43 | }
|
Aber komischerweise funktioniert nicht mal mehr das! Es sind keine
Interrupts aktiviert, das Display ist nicht initialisiert, ich will nur
die LED blinken lasse, (was mit diesem Code schonmal funktioniert hat)
Ich weis echt nicht wo ich noch suchen soll!
Ich denke irgendwas wird hier wegoptimiert oder sowas in der Art.
Ein weiters Sympton ist, wenn ich den Optimierungsgrad runterschalte auf
3 (Peephole optimization) dann erhalte ich gar kein Hex File mehr, der
Compiler zeigt folgende Warnung: (ich habe ein Screenshot gemacht)
Ich bin echt mit meinem Latein am Ende.
Ich habe versucht das Problem so gut wie möglich zu beschreiben. Wenn
jemand aber noch mehr Infos braucht, nur Fragen.
Mit freundlichen Grüssen,
Marco Beffa