I declare 32 bit variables in the MyAsmVar section.
I know the base address of MyAsmVar. Also I know the address of var1 and var2.
AREA MyAsmVar, DATA,NOINIT, READWRITE, ALIGN=3
var1 DCD 0x00 var2 DCD 0x00
LDR R0,=0x20000000 ; base address of MyAsmVar LDR R1,[R0,#0] ; read var1 in to R1 (var1 address is 0) LDR R2,[R0,#4] ; read var2 in to R2 (var2 address is 4)
We must know the numeric value of variable address and this is not good.
How can I use the variables names instead of address?
I want the following lines but compiler give error messages;
LDR R0,=0x20000000 LDR R1,[R0,#var1] ; read var1 in to R1 LDR R2,[R0,#var2] ; read var1 in to R2
Also i try following lines but compiler dont compile.
LDR R1,[R0,#&var1] ; read var1 in to R1 LDR R2,[R0,#&var2] ; read var1 in to R2
if I use
var1 equ 0 var2 equ 4
problem solving, but i dont want to count address of variables.
You can do:
var1 DCD 0x00 var2 DCD 0x00 LDR R0,=var1 ; Address of var1 LDR R1,[R0] ; read var1 in to R1 LDR R0,=var2 ; base address of MyAsmVar LDR R2,[R0] ; Address of var2
Thanks for your answer.
Are there short method?
How I can write at the single line
like this LDR R1,[R0,#var1] ; Address of var1
Not that I'm aware of.
IF you want programmer convenience, then use a High-Level Language.
You could of course write a simple macro.
View all questions in Keil forum