Hallo! zur Zeit bin ich Dabei für einen DS 18B20 eine komplette verwaltungsroutine zu schreiben, inklusive Search Rom. Das ganze auf einem Mega128 Dafür habe ich im main die Routine folgendermaßen aufgerufen int main (void) { sei(); while(1){ DS18B20Zyklus(0); }; }; das ganze habe ich die ganze zeit mit AVR Studio gedebugt. um nun Search Rom mittels eines Tasters am µC neu zu Starten habe ich main folgendermaßen erweitert. while(1){ DS18B20Zyklus(0); Taster(&Taster1); if(Taster1.logic.rising_edge)//Wenn Taster gedrückt wurde { uart_puts_P("DS18B20\n"); DS18B20Zyklus(1); //Search Rom neu anstoßen }; Nachdem ich diese erweitert hatte, ging gar nix mehr, die Funktion hat nur 0 von den DS18B20 gelesen. sobald ich den aufruf wieder auf while(1){ DS18B20Zyklus(0); }; Reduziert hatte ging es wieder ohne Probleme. Ich habe mich dann etwas damit rumgeärgert, ins Assambler listing geschaut nix festgestellt. Dann habe ich mal ins blaue geschossen und int main(void) __attribute__((noreturn, naked)); vor int main(void) auskommentiert, siehe da while(1){ DS18B20Zyklus(0); Taster(&Taster1); if(Taster1.logic.rising_edge)//Wenn Taster gedrückt wurde { uart_puts_P("DS18B20\n"); DS18B20Zyklus(1); //Search Rom neu anstoßen }; läuft ohne Probleme. Mitlerweile habe ich die Attribute auf int main(void) __attribute__((noreturn)); reduziert und es geht ohne Probleme. kennt jemand zufällig die gleiche konstellation und weiß ob das auf mich oder den Compiler zurück zu führen ist ??? wenn nötig kann ich gern mehr code posten, sieht nur vielleicht etwas "aufgeblasen" aus, bin gerade dabei C auf dem Controler zu lernen Gruß Stefan
Sorry, ist ja schon paar Tage her. Dafür gibt's einen GCC-Bugreport, aber ich habe mittlerweile die leise Ahnung, dass das irgendwie nur Eric Weddington's WinAVR-build des Compilers betrifft, warum auch immer. Wiederum trat das dort berichtete Problem nur auf, wenn man
1 | int main(void) __attribute__((naked)) |
2 | {
|
3 | ...
|
4 | }
|
geschrieben hat, während die Prototypvariante
1 | int main(void) __attribute__((naked)); |
2 | int main(void) |
3 | {
|
4 | ...
|
5 | }
|
funktioniert hat. Kannst du nochmal reproduzierbar sagen, was bei dir genau zum Fehler geführt hat einschließlich der exakten Fehlermeldung?
Allerdings gab es da einen internen Compiler-Error. Das das Programm zwar compiliert wird, aber dann nicht funktioniert, ist neu. Daher wie immer: bitte ganzen Code posten. Oliver
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.