在内联汇编中使用 C 变量

时间:2021-01-15 23:27:52

标签: assembly arm inline-assembly

我使用的是 MSP432 微控制器,我需要使用一些组件。我需要使用程序中先前定义的 C 变量,但我不确定如何执行此操作。我需要使用的变量是 OS_curr 和 OS_next。我也试过冒号,但没有任何效果。


    OSThread *volatile OS_curr;
    OSThread *volatile OS_next;

    void PendSV_Handler(void) 
    {
    
    __asm__("cpsid      i");

    //if(OS_curr != (OSThread *)0)
    __asm__("ldr        r0, =OS_curr");
    __asm__("ldr        r0, [r0]");
    __asm__("cbz        r0, PendSV_restore");

    // Push r4  - r11
    __asm__("PUSH {r4-r11}");

    __asm__("ldr        r1, =OS_curr");
    __asm__("ldr        r1, [r1]");

    // OS_curr -> sp = sp;
    __asm__("str         sp, [r1]");

    PendSV_restore:

    // sp=OS_next -> sp;
    __asm__("ldr r0, =OS_next;");
    __asm__("ldr        r0, [r0]");
    __asm__("ldr        r0, [r0]");
    __asm__("str        sp, [r13]");

    // OS_curr = OS_next;
    __asm__("ldr        r0, =OS_next");
    __asm__("ldr        r1, [pc, 0xc]");
    __asm__("ldr        r0, =OS_curr");
    __asm__("str        r0, [r1]");

    //Pop  r4-r11
    __asm__("POP        {r4-r11}");

    //            __enable_interrupts();
    __asm__("cpsie      i");

    //return to next thread
    __asm__("bx         r14");
    }

0 个答案:

没有答案