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

Writing ARM application containing both C code and assemply code

Note: This was originally posted on 6th September 2007 at http://forums.arm.com

Hi I need to put one ARM instruction in ARM application written in C.
Basically my application looks like
void main(void)
{
  ................
   ................
   enable_IRQ();
   program_dma();   /* programs DMA with st address, dest addr, xfer length etc and enables DMA*/
   /* Here I want to put a ARM instruction(assembly) */
   ..............
}

Extra information:
            After enabling DMA, I want to execute WaitForInterrupt instruction by doing

MCR p15, 0, Rd, c7, c0, 4

Since this is C code I cant directly put that instruction( I guess).
Can you tell me how can I put that MCR instruction in my C code
Parents
  • Note: This was originally posted on 10th September 2007 at http://forums.arm.com

    Pavan,

    ARMCC also provides "embedded" assembler which allows simple creation of assembler functions within C source code; for example, your code could become:

    __asm void WFI(void)
    {
       MCR p15,0,r0,c7,c0,4;  // wait-for-interrupt
       BX lr;  // return from function
    }

    which could then be called from other C code via the standard C function method, e.g. WFI();.

    The use of linker inlining would allow the linker to replace the call to your WFI() function with the MCR itself, producing code similar to that of the inline assembler.

    hth
    s.
Reply
  • Note: This was originally posted on 10th September 2007 at http://forums.arm.com

    Pavan,

    ARMCC also provides "embedded" assembler which allows simple creation of assembler functions within C source code; for example, your code could become:

    __asm void WFI(void)
    {
       MCR p15,0,r0,c7,c0,4;  // wait-for-interrupt
       BX lr;  // return from function
    }

    which could then be called from other C code via the standard C function method, e.g. WFI();.

    The use of linker inlining would allow the linker to replace the call to your WFI() function with the MCR itself, producing code similar to that of the inline assembler.

    hth
    s.
Children
No data