Gast
#362998
Ich hab immer gedacht der Präprozessor würde so Geschichten wie diese
"brechnen"
Wenn ich diese defines
#define FLASH_AT91C_MC_CORRECT_KEY ((unsigned int) 0x5A << 24)
#define AT91C_MC_FCMD_UNLOCK ((unsigned int) 0x4)
in dieser Funktion benutzte
char RAMFUNC flash_UnlockPage(unsigned int pagenum){
if(pagenum >= FLASH_PAGE_NB) return FLASH_PROGE;
flash_ReadyWait();
--->>>>flash_AT91F_MC_EFC_PerformCmd(AT91C_BASE_MC,((pagenum)<<8)|(FLASH
_AT91C_MC_CORRECT_KEY|AT91C_MC_FCMD_UNLOCK));
flash_ReadyWait();
return flash_GetError();
}
gehe ich davon aus, dass er mir FLASH_AT91C_MC_CORRECT_KEY und
AT91C_MC_FCMD_UNLOCK zusammenfasst... oder liege ich da falsch!??!
Der erzeugt Assembler code an der stelle sieht aber so aus
293 mov r3, r0, asl #8
294 orr r3, r3, #1509949440
295 orr r3, r3, #4
#1509949440 ist übrigends 0x5A << 24
In der gcc hilfe hab ich nix dazugefunden.
Achja diesen COde macht er mir bei Optimierungsstufe 2,3 und s
Bei Stufe 1 macht er jenes
160 mov r3, #1509949440
161 add r3, r3, #4
162 orr r3, r3, r0, asl #8
Mach ich da was falsch oder besteht da Optimierungsbedarf am gcc ?? Ist
ja eigentlich Standard solche Konstrukte zu verwenden.
hier noch die version
arm-elf-gcc (GCC) 4.0.2 (WinARM)
und die Parameter
Compiling C: flash.c
arm-elf-gcc -c -mcpu=arm7tdmi -I. -gstabs -DROM_RUN -Os -Wall
-Wcast-align -Wimplicit -Wpointer-arith -Wswitch -Wredundant-decls
-Wreturn-type -Wshadow -Wunused -Wa,-adhlns=flash.lst -MD -MP -MF
.dep/flash.o.d -Wnested-externs -std=gnu99 flash.c -o flash.o