Yahoo Groups archive

AVR-Chat

Index last updated: 2026-04-28 22:41 UTC

Thread

Re: **YIKES**

Re: **YIKES**

2008-02-28 by Don Kinzer

--- In AVR-Chat@yahoogroups.com, Tom <tjkeller1@...> wrote:
> undefined reference to `r22'
> None of R22, R23, R30 or R31 are referenced explicitly
> ANYWHERE in this code

That's true, but the compiler assigns locally defined variables 
like 'var1', etc. to registers as it pleases.  The problem is that 
you're insisting on using 'ldi' where you should be using 'mov'.  If 
you go back and check you'll see that I changed it for you in my 
last reply but you ignored it.

The line:

" ldi R16, %0 \n"

gets expanded to something like:

ldi R16, r22

The assembler knows that you can't have a register reference as the 
second argument to 'ldi' so it assumes that 'r22' is the name of a 
variable.  Since you haven't defined a variable named r22 anywhere 
it issues the "undefined reference" message.

When you encounter error messages like that that you can't 
comprehend, it is often useful and instructive to examine the .lst 
file in the area corresponding to the inline assembly code.  In this 
case, it looks something like this:

  32 /* #APP */
  33 000c 00E0 ldi R16, r21 
  34 000e 10E0 ldi R17, r20 
  35 0010 20E0 ldi R18, r25 
  36 0012 30E0 ldi R19, r24 
  37 0014 832F mov r24, R19 
  38 0016 922F mov r25, R18 
  39 0018 412F mov r20, R17 
  40 001a 502F mov r21, R16 


Don Kinzer
ZBasic Microcontrollers
http://www.zbasic.net

**YIKES**

2008-02-28 by Tom

Again:    avrgcc 4.3, AVRStudio 4.31 Service Pack 1.

Following code: 
      
asm volatile (

    "    ldi    R16,    %0    \n"
    "    ldi R17,    %1    \n"
    "    ldi R18,    %2    \n"
    "    ldi    R19,    %3    \n"

    "    mov    %3,    R19        \n"
    "    mov    %2,    R18     \n"
    "    mov    %1,    R17        \n"
    "    mov %0,    R16        \n"

     : "=r" (var1) , "=r" (var2) , "=r" (var3) , "=r" (var4):
       "0" (var1) , "1" (var2) , "2" (var3) , "3" (var4) :
       "r16", "r17", "r18", "r19" );

 Generates the following, verymysterious errors:

embedded_asm.o: In function `main':
C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
undefined reference to `r22'
C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
undefined reference to `r23'
C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
undefined reference to `r30'
C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
undefined reference to `r31'
make: *** [embedded_asm.elf] Error 1
Build failed with 4 errors and 0 warnings...


None of R22, R23, R30 or R31 are referenced explicitly ANYWHERE in this 
code, and the "0", "1" positional references shouldn't generate oddball 
labels like that, regardless. IIRTFMC, the "0", "1", "2", "3" should 
sequentially reference R16, R17, R18 and R19.

(per documentation found @ 
http://www.nongnu.org/avr-libc/user-manual/inline_asm.html )


*wah*  Help me, please?

avrFreak 

(phreaquing out here)

Re: [AVR-Chat] **YIKES**

2008-02-29 by Russell Shaw

Tom wrote:
> Again:    avrgcc 4.3, AVRStudio 4.31 Service Pack 1.
> 
> Following code: 
>       
> asm volatile (
> 
>     "    ldi    R16,    %0    \n"
>     "    ldi R17,    %1    \n"
>     "    ldi R18,    %2    \n"
>     "    ldi    R19,    %3    \n"
> 
>     "    mov    %3,    R19        \n"
>     "    mov    %2,    R18     \n"
>     "    mov    %1,    R17        \n"
>     "    mov %0,    R16        \n"
> 
>      : "=r" (var1) , "=r" (var2) , "=r" (var3) , "=r" (var4):
>        "0" (var1) , "1" (var2) , "2" (var3) , "3" (var4) :
>        "r16", "r17", "r18", "r19" );
> 
>  Generates the following, verymysterious errors:
> 
> embedded_asm.o: In function `main':
> C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
> undefined reference to `r22'
> C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
> undefined reference to `r23'
> C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
> undefined reference to `r30'
> C:\Users\avrFreak\Documents\embedded_asm\default/../embedded_asm.c:51: 
> undefined reference to `r31'
> make: *** [embedded_asm.elf] Error 1
> Build failed with 4 errors and 0 warnings...
> 
> 
> None of R22, R23, R30 or R31 are referenced explicitly ANYWHERE in this 
> code, and the "0", "1" positional references shouldn't generate oddball 
> labels like that, regardless. IIRTFMC, the "0", "1", "2", "3" should 
> sequentially reference R16, R17, R18 and R19.
> 
> (per documentation found @ 
> http://www.nongnu.org/avr-libc/user-manual/inline_asm.html )

Try using lowercase "r" instead of "R".

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.