-
-
Erfahrener Benutzer
Roboter Genie
C-Compiler mit negativer Optimierungsstufe ?
Hallo zusammen, ich bin noch recht neu auf der "ARM" Schiene mit dem IAR-C-Compiler.
Habe bisher nur PICs in Assembler programmiert.
Nun bin ich auf folgende Merkwürdigkeit gestoßen:
Dazu ersteinmal der Der C-Code:
#define IOSET (*((volatile unsigned long*) 0xE0000004))
IO0SET = (1 << 25);
Der erzeugte Assembler-Code sieht dann so aus:
MOV R0,#0xE0000004 ; lade eine Teil der Adresse ins R0 Register
ORR R0,R0,#0x28000 ; und nun den "vergessenen Rest" oben drauf ???
MOV R1,#0x2000000 ; das hat der Preprocessor richtig gemacht 1<<25
STR R1,[R0,#+0] ; und wieder Speichern
Wie kommt denn dieser Code zustande ???
oder warum wird nur ein Teil der Adresse geladen E0000004
und der fehlende Teil 0x28000 aufoderiert.
Das funktioniert natürlich und ist Programmtechnisch völlig korrekt,
aber das sieht aus, als würde hier bewust Speicher verschwendet werden.
Macht das der C-Compiler evtl. absichtlich, weil es keine Vollversion ist ??????
Oder gibt es doch einen Sinn, welchen ich bisher nicht verstanden habe.
Das find ich generell sehr aufwändig um ein einzelnes Bit zu setzen.
Bei den PIC's, welche ich bisher programmiert habe, ging sowas in einer einzelnen Zeile
mit einem Bit-Set-Befehl "BSF"
für jegliche Info bin ich dankbar.
mfg. Siro
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen