mikrocontroller.net

Forum: Compiler & IDEs Fehler mit Attribut naked für Main


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
int main(void) __attribute__((naked))
{
  ...
}

geschrieben hat, während die Prototypvariante
int main(void) __attribute__((naked));
int main(void)
{
  ...
}

funktioniert hat.

Kannst du nochmal reproduzierbar sagen, was bei dir genau zum Fehler
geführt hat einschließlich der exakten Fehlermeldung?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.