[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] in-line assembler
From: |
Robert von Knobloch |
Subject: |
[avr-gcc-list] in-line assembler |
Date: |
Tue, 11 Aug 2009 12:23:18 +0200 |
User-agent: |
Thunderbird 1.5.0.14 (X11/20060911) |
Hello,
I've been trying to decipher the intricacies of in-line assembler (using
the Inline Assembler Cookbook as my guide).
I have a very simple application that I cannot seem to realise.
I want a C function that will return the contents of the RAM address
that I give it as argument.
My assembler-based function looks like this:
file is hex.c
=====
uint8_t get_ram_byte(uint16_t ram_address)
{
uint8_t byte;
asm ("ld __tmp_reg__, %a1" "\n\t"
"sts %0, __tmp_reg__" "\n\t"
: "=&r" (byte) : "e" (ram_address));
return byte;
}
and is called from
rambyte = get_ram_byte(i );
u_hex8out(rambyte); // Print byte as 8-bit hex.
Trying to compile this results in "~/Monitor/hex.c:5: undefined
reference to `r24' "
If I comment out the line "sts %0, __tmp_reg__" "\n\t" then it
compiles and I see that the parameter is passed in R24,25, copied to
R30,31[Z] and the value is read into R0 [__tmp_reg__].
I cannot see what is wrong with the sts command or why R24 is mentioned.
Can anybody help me ?
Many thanks,
Robert von Knobloch.
- [avr-gcc-list] in-line assembler,
Robert von Knobloch <=