Nachdem ich nun wieder im "Padauk-Fieber" bin (ich habe keine Ahnung, warum mich dieser derart kastrierte Mikrocontroller so fasziniert) habe ich ein (kleines) "Schönheitsproblem" (wie ich glaube).
Etwas, das bisher problemlos mit SDCC 4.0.4 und SDCC 4.10 funktioniert hat, gibt mir nun eine Assemblerwarnung aus:
1 |
|
2 |
|
3 |
|
4 |
|
und ich habe keine Ahnung wo das herkommt und wichtiger wie ich das abgestellt bekomme.
Die Warnung wird von einer Verzögerungsschleife generiert, die in Assembler codiert und nicht von mir ist. Quelle der delay-Funktion ist:
https://github.com/free-pdk/free-pdk-examples/blob/master/include/delay.h
Der Author dieser Funktion zählt die Taktimpulse der MCU (und macht das sehr genau). Leider hat er Programmcode in die delay.h eingefügt, was mir nicht so wirklich gefällt. Vor allen Dingen kann bei diesem Vorgehen diese delay.h nur einmal im gesamten Programm inkludiert werden. Habe ich andere *.h / *.c Dateien kann ich dort dann nicht auch #include "delay.h" machen, weil ich hier dann doppelte Definitionen habe.
Also hatte ich diese Funktion geteilt in eine delay.c und eine delay.h und habe die bisher meinem Programm hinzugelinkt.
Hat bisher klaglos funktioniert.
So wollte ich das auch mit SDCC4.4.4 machen. Wie oben beschrieben erzeugt mir das eine Warnmeldung. Allerdings ist das "nur" eine Warnung, das Programm verarbeitet die delay-funktion klaglos.
Bindet man die originale delay.h (ohne zu linken), die ich zu Unterscheidungszwecke nach delay_inc.h umbenannt habe im Main-Programm ein, wird diese Warnmeldung interessanterweise nicht erzeugt!
Im Zip-Anhang habe ich beide Programmversionen (mit und ohne Linken) hinzugefügt.
Der Assemblercode der Delay-Funktion stößt sich an folgender Instruktion (gleiche Befehle in Zeile 88 und 109:
1 |
|
Diese Instruktion überspringt die nachfolgende Instruktion (ein goto) und beendet somit die Warteschleife.
Wie bekomme ich die Warnmeldungen weg oder wie kann ich hier zumindest diese Warnmeldung explizit unterdrücken? (und nur diese).