This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

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 Reply Children
  • you need to understand that the Tasking and Keil implementation of the 166-tools is completely different: Tasking - EXTEND2 --> Keil - MODV2; uVision will never accept EXTEND2.

    The next problem will be with all those @SET(...), @_CALL(...) etc. macros used in the assembly language file. This needs to be converted to use the Keil macro format. Also 'LDAT' needs to be converted.

    I would suggest to use c:\keil\c166\lib\Start_v3.a66 as a reference for porting, this is the standard startup file used by uVision when creating a XExxx application.

  • A small problem ;-) i hope so...

    CoSTORE [@w4],MAS

    transform to

    CoSTORE [rw4],MAS

    don't work, Keil uVision4 don't know this syntax "rw4" for a word regiester.

    _inline int inv_park_trans(int i_d,int i_q,int phi,int *o_b)
    {
    int retvalue;
    
    # pragma asm(@w1 = i_d,@w2 = i_q,@w3 = phi, @w4 = o_b , @5, @7, @9, @8)
    
            mov     @7,MCW
            mov     MCW,#0600h
        shr     @w3,#6
        shl     @w3,#1
        EXTS    #SEG (_sincostab),#2
        mov     @9,[@w3 + #SOF(_sincostab+512)]
        mov     @8,[@w3 + #SOF(_sincostab)]
        CoMUL   @w1,@9
        CoMAC-  @w2,@8
            CoASHR  #2
        CoSTORE @5,MAS
        CoMUL   @w1,@8
        CoMAC   @w2,@9
            CoASHR  #2
        CoSTORE     [@w4],MAS
            mov     MCW,@7
    
    #pragma endasm(retvalue = @5 )
    
    return retvalue;
    
    }
    

  • I found the solution, its ok. @w4 = o_b

  • What is the problem now? Its typical c-code. The same in other files.

    #ifndef _SUBROUTINES_FOC_H_
    #define _SUBROUTINES_FOC_H_

    Subroutines_FOC.H(646): warning: last line of file ends without a newline
    #endif // #endif _SUBROUTINES_FOC_H_

    Controls_FOC.H(170): warning: last line of file ends without a newline
    Scheduler.H(489): warning: last line of file ends without a newline
    t end of source: internal error: assertion failed: copy_from_source_to_asm_func_buffer: bad lexical escape (D:\edg\src\lexical.c, line 6205)

  • What is the problem now?

    It's exactly what it says:

    warning: last line of file ends without a newline
    

    How hard can that be to understand?

  • just an enter in all last lines of the c-code it did it!