thumb2 mov r0, %0

Gast #2313910
Lesenswert?

Hallo allerseits,
ich habe gerade im freeRTOS Port für den ARM Cortex M3 (GNU Toolchain) 
den Assembler Befehl
1
mov r0, %0
gelesen, den ich nicht verstehe. Etwas Probleme macht mir hier das 
Prozentzeichen. Laut GNU ARM Assembler Quick Reference steht es für 
Register direct Adressierung. Bedeutet das dann, dass der Wert auf den 
r0 zeigt in r0 geladen wird? Das kann ja eigentlich nicht sein, denn 
dieser Befehl wäre meines Wissens nach
1
mov r0, [r0]

Bin für Erklärungen dankbar.
alibaba
Gast #2313941
Lesenswert?

Es ist inline assembler. Hier mal alles:
1
FreeRTOS V6.0.4 - Copyright (C) 2010 Real Time Engineers Ltd.
2
...
3
void PendSV_Handler( void )
4
{
5
  /* This is a naked function. */
6

7
  __asm volatile
8
  (
9
  "       mrs r0, psp                     \n"
10
  "                                       \n"
11
  "       ldr  r3, pxCurrentTCBConst   \n"
12
  "       ldr  r2, [r3]                \n"
13
  "                                       \n"
14
  "       stmdb r0!, {r4-r11}             \n"
15
  "       str r0, [r2]                    \n"
16
  "                                       \n"
17
  "       stmdb sp!, {r3, r14}            \n"
18
  "       mov r0, %0                      \n"
19
  "       msr basepri, r0                 \n"
20
  "       bl vTaskSwitchContext           \n"
21
  "       mov r0, #0                      \n"
22
  "       msr basepri, r0                 \n"
23
  "       ldmia sp!, {r3, r14}            \n"
24
  "                                       \n"
25
  "       ldr r1, [r3]                    \n"
26
  "       ldr r0, [r1]                    \n"
27
  "       ldmia r0!, {r4-r11}             \n"
28
  "       msr psp, r0                     \n"
29
  "       bx r14                          \n"
30
  "                                       \n"
31
  "       .align 2                        \n"
32
  "pxCurrentTCBConst: .word pxCurrentTCB  \n"
33
  ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
34
  );
35
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren