asm c variable to a assembler register

hi i start a new try.
i am looking for a solution that uVision4 accept to put Variables(Parameters) of c-Code in to Asssembler Registers.

A reference to the "C166 User's Guide - Reference ASM" helped my not because this(my) problem isnot treated!

------------------------------------------------------------------------------------


_inline int vf_control( int offset, int slew, int anglespeed)
{
        int retvalue;

#pragma asm     ( @w1=offset, @w2=slew, @w3=anglespeed, @4,@5 )


        mov     MCW,#0600H

        mov     @5,ZEROS

        CoMUL   @w2,@w3

        CoSHL   #8

        CoADD   @5, @w1

        CoSTORE @4,MAS

#pragma endasm (retvalue = @4 )
        return retvalue;
}

Parents
  • This is Tasking syntax - C166 uses a different approach.
    You might try out this version of your code:

    #pragma MODV2
    #include <reg167.h>
    
    static _inline int vf_control( int offset, int slew, int anglespeed)  {
      int     retvalue;
      unsigned int  zv;
    
      retvalue = 0;
      zv       = 0;               ; // @5,ZEROS
    //#pragma asm     ( @w1=offset, @w2=slew, @w3=anglespeed, @4,@5 )
      __asm  {
        mov     MCW,#0600H
    //  mov     @5,ZEROS          ; --> zv = 0
        CoMUL   slew,anglespeed   ; @w2,@w3
        CoSHL   #8
        CoADD   zv,offset         ; @5, @w1
        CoSTORE R4,MAS            ; @4,MAS
        mov     retvalue,r4
      }
    //#pragma endasm (retvalue = @4 )
      return (retvalue);
    }
    
    int   offs, slew, aspeed;
    int     vr;
    
    void test (void)  {
      vr = vf_control (offs, slew, aspeed);
    }
    

Reply
  • This is Tasking syntax - C166 uses a different approach.
    You might try out this version of your code:

    #pragma MODV2
    #include <reg167.h>
    
    static _inline int vf_control( int offset, int slew, int anglespeed)  {
      int     retvalue;
      unsigned int  zv;
    
      retvalue = 0;
      zv       = 0;               ; // @5,ZEROS
    //#pragma asm     ( @w1=offset, @w2=slew, @w3=anglespeed, @4,@5 )
      __asm  {
        mov     MCW,#0600H
    //  mov     @5,ZEROS          ; --> zv = 0
        CoMUL   slew,anglespeed   ; @w2,@w3
        CoSHL   #8
        CoADD   zv,offset         ; @5, @w1
        CoSTORE R4,MAS            ; @4,MAS
        mov     retvalue,r4
      }
    //#pragma endasm (retvalue = @4 )
      return (retvalue);
    }
    
    int   offs, slew, aspeed;
    int     vr;
    
    void test (void)  {
      vr = vf_control (offs, slew, aspeed);
    }
    

Children
More questions in this forum