We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
i wrote about similiar problem http://www.keil.com/forum/docs/thread9546.asp
and now i have same problem i use odd adres memory (for example) and got problem text test progfam for ARM you may see
if used odd adres 0x801 i had problem if didnt use __packed if i used __packed i have no problem
IDE-Version: µVision3 V3.51 Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2007 Tool Version Numbers: Toolchain Path: BIN30\ C Compiler: ARM/Thumb C/C++ Compiler, RVCT3.0 [Build 951] for uVision [Full] Assembler: ARM/Thumb Macro Assembler, RVCT3.0 [Build 951] for uVision [Full] Linker/Locator: ARM Linker, RVCT3.0 [Build 951] for uVision [Full] Librarian: ARM Archiver, RVCT3.0 [Build 951] for uVision Hex Converter: ARM FromELF, RVCT3.0 [Build 951] for uVision [Full] CPU DLL: SARM.DLL V3.05 Dialog DLL: DARMP.DLL V1.13b Target DLL: BIN\UL2ARM.DLL V1.26b Dialog DLL: TARMP.DLL V1.11f **************************************************************** command compiler if you want get the same result -c --device DARMP -g -O0 --apcs=interwork -I "C:\Keil\ARM\INC\Philips" -o "*.o" **************************************************************** int main() { volatile unsigned long work; #define reg0 ( *(volatile unsigned long __packed *)0x801) //#define reg0 ( *(volatile unsigned long *)0x801) work=reg0; } **************************************************************** #define reg0 ( *(volatile unsigned long *)0x801) 8: work=reg0; 9: 0x000001B0 E3A00001 MOV R0,#0x00000001 0x000001B4 E5901800 LDR R1,[R0,#0x0800] **************************************************************** #define reg0 ( *(volatile unsigned long __packed *)0x801) 8: work=reg0; 9: 0x000001B4 E59F0010 LDR R0,[PC,#0x0010] 0x000001B8 EB000004 BL 0x000001D0 0x000001BC E1A04000 MOV R4,R0 10: } 0x000001C0 E3A00000 MOV R0,#0x00000000 0x000001C4 E8BD4010 LDMIA R13!,{R4,R14} 0x000001C8 E12FFF1E BX R14 0x000001CC 00000801 DD 0x00000801 0x000001D0 E5D02001 LDRB R2,[R0,#0x0001] 0x000001D4 E5D01000 LDRB R1,[R0] 0x000001D8 E5D03002 LDRB R3,[R0,#0x0002] 0x000001DC E5D00003 LDRB R0,[R0,#0x0003] 0x000001E0 E1811402 ORR R1,R1,R2,LSL #8 0x000001E4 E1811803 ORR R1,R1,R3,LSL #16 0x000001E8 E1810C00 ORR R0,R1,R0,LSL #24 0x000001EC E12FFF1E BX R14
"i use odd adres memory (for example) and got problem"
I'll repeat what I said in the other thread:
"For whatever ARM you are using or simulating, read up on how it handles unaligned memory accesses."