Forum: Compiler & IDEs thumb2 mov r0, %0


von alibaba (Gast)


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

von (prx) A. K. (prx)


Lesenswert?

Steht das in Assembler-Quelltext oder in einem asm-Statement in C?

von alibaba (Gast)


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
}

von (prx) A. K. (prx)


Lesenswert?

Dann steht %0 für den ersten Parameter des asm-Statements, also die 
Konstante configMAX_SYSCALL_INTERRUPT_PRIORITY.

von alibaba (Gast)


Lesenswert?

Oh, ich glaube für den Gedanken hätte ich noch eine Weile gebraucht ;-)

Vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.