Yahoo Groups archive

AVR-Chat

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

Thread

*** H E L P ***

*** H E L P ***

2008-02-28 by Tom

OK.   avrgcc 4.3, AVRStudio 4,13 Service Pack 1, mixed C and assembly.


I have:

int main (){

uint8_t        var1, var2, var3, var4;

    var1 = 0;                        // all zeros
    var2 = 255;                        // all ones
    var3 = 170;                        // alternating ones and zeros
    var4 = 55;                        // alternating zeros and ones

    /*
     *        copy register to backup, then copy back in reverse order
     */

    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);           
// line 63
    )
}

/*
 *        end of program
 */


   I am getting:

../embedded_asm.c:63: error: expected ')' before '(' token




*WHY*?

Re: *** H E L P ***

2008-02-28 by Don Kinzer

--- In AVR-Chat@yahoogroups.com, Tom <tjkeller1@...> wrote:
>I am getting:
> ../embedded_asm.c:63: error: expected ')' before '(' token

You do have to follow the recipe.

asm volatile (

"mov r16, %0" "\n\t"
"mov r17, %1" "\n\t"
"mov r18, %2" "\n\t"
"mov r19, %3" "\n\t"

"mov %3, r19" "\n\t"
"mov %2, r18" "\n\t"
"mov %1, r17" "\n\t"
"mov %0, r16" "\n\t"

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

Perhaps this is simply an exercise but the code does nothing other 
than use CPU cycles.

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

Re: [AVR-Chat] Re: *** H E L P ***n (again)

2008-02-28 by Tom

Don Kinzer wrote:
>
>
> Perhaps this is simply an exercise but the code does nothing other
> than use CPU cycles.
>
> Don Kinzer
>
   Yes, it is precisely an exercise, will never run in silicon.

Now I am getting the following:

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" );

}

errors:
C:\Users\avrFreak\AppData\Local\Temp/ccFmqAas.s:61: Error: constant 
value required
C:\Users\avrFreak\AppData\Local\Temp/ccFmqAas.s:62: Error: constant 
value required
C:\Users\avrFreak\AppData\Local\Temp/ccFmqAas.s:63: Error: constant 
value required
C:\Users\avrFreak\AppData\Local\Temp/ccFmqAas.s:64: Error: constant 
value required
make: *** [embedded_asm.o] Error 1


What, exactly, is it complaining about not be a "constant" value, and h 
ow do I fix this?


avrFreak

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.