Gast
#553358
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