volatile Problem oder asm Frage

Gast #566600
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?
1
void
2
_rol_array(uint8_t *__data)
3
{
4
  __asm__ volatile (
5
        "ld __tmp_reg__,%a0" "\n\t"
6
    "sec"  "\n\t"
7
    "rol __tmp_reg__" "\n\t"
8
    "st  %a0+,__tmp_reg__" "\n\t"
9

10
        "ld __tmp_reg__,%a0" "\n\t"
11
    "rol __tmp_reg__" "\n\t"
12
    "st  %a0+,__tmp_reg__" "\n\t"
13

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

16
       : /* void */
17
     : "e" (__data)
18
     : "memory"
19
       );
20
}
21

22

23

24
//...
25
// alle 10 Zeilen um eine Stelle verschieben
26

27
uint8_t r;
28

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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.