www.mikrocontroller.net

Forum: Compiler & IDEs volatile Problem oder asm Frage


Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe ein Problem mit meinem Code zum Byte Array schieben. Das 
rotieren in asm funktionierte eigentlich, die Routine wurde nacheinander 
für 10 Zeilen aufgerufen. Erst mit Konstanten, dann habe ich es 
ordentlicher mit einer Schleife gemacht. Dann noch die Compiler 
Optimierung (-Os) an und schon funktioniert es nicht mehr, es sieht aus 
als wird r doppelt inkrementiert in for(r=...) Wenn ich die Laufvariable 
r volatile deklariere ist es wieder ok.
Meine Vermutung ist das im asm Teil was faul ist. In der clobberlist ist 
nur "memory" drin, wie sage ich dem Compiler das ich den Pointer "e" 
verbiege? "e" ist ja nur eine Speicherklasse, in der clobberlist wird 
das nicht akzeptiert. Muss man "e" selber retten und restaurieren?
void
_rol_array(uint8_t *__data)
{
  __asm__ volatile (
        "ld __tmp_reg__,%a0" "\n\t"
    "sec"  "\n\t"
    "rol __tmp_reg__" "\n\t"
    "st  %a0+,__tmp_reg__" "\n\t"

        "ld __tmp_reg__,%a0" "\n\t"
    "rol __tmp_reg__" "\n\t"
    "st  %a0+,__tmp_reg__" "\n\t"

// gleicher rotate noch 9x, wg. lesbarkeit entfernt

       : /* void */
     : "e" (__data)
     : "memory"
       );
}



//...
// alle 10 Zeilen um eine Stelle verschieben

uint8_t r;

for (r=0; r<((DIGITS+1)*ROWS); r+=(DIGITS+1))
   _rol_array(&disp[r]);

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.