Gast
#177264
Ich habe vergeblich versucht, ein externes LED-Display (hat eigenen einen Controller) mit einem AT90S4433 anzusteuern, daraufhin habe ich einen (Pinkompatiblen) ATMEGA8 verwendet und hiermit funktionierte es. Nun habe ich an dem Quellcode ( bis auf MCU = xy in dem makefile) absolut nichts geändert, der Compiler (gcc) gibt mir weder Fehler noch Warnungen aus, auch eine Kontroll LED, die der MCU zum testen ein und ausschalten sollte, verhielt sich wie erwartet. Der MEGA8 läuft mit dem internen Oszillator mit 8 MHZ, der 90S4433 mit einem externen 8MHZ Quarz, somit schließe ich Timingprobleme aus. Den 90S4433 habe ich auch mal duch einen anderen getauscht, mit dem gleichen Ergebnis. Sowohl Batteriebetrieb, wie auch den Betrieb mittels Spannungsregler + Netzteil habe ich versucht. Da jedoch die erzeugten Binaries je nach eingestelltem MCU unterschiedlich groß sind, habe ich mir mal das Assemblerlisting angesehen und zwischen MEGA8 und 90S4433 verglichen. Bei dem ATMEGA8 werden 3x je zwei mov duch movw zusammengefasst und zusätzlich Anstelle von (beim 90S4433): subi r28,lo8(-(1)) cpi r28,lo8(16) brsh .+2 rjmp .L17 folgenedes geschrieben (MEGA8): subi r28,lo8(-(1)) cpi r28,lo8(16) brlo .L17 demnach müsste das Binary für den MEGA8 4 Wörter (= 8Byte) kleiner sein, als das für den 90S4433. Dem ist jedoch nicht so, das Binary für den MEGA8 ist 4 Byte größer als das dür den 90S4433. Kann es an dem Compiler liegen, dass das Programm nicht wie gewünscht läuft, oder hat das dies doch elektrische Ursachen?