Warum überspringt der STM32F207 instructions?

Wenn ich von meinem selbst-getippten bootloader, der in 0x800'0000 ausgeführt wird:

  1. Die Firmware von 0x801'0000 nach 0x2000'0000 (SRAM) kopiere...
  2. Dann 0x2000'0000 nach 0x0 mappe (weil Ausführung vom ICode Bus schneller geht)...
  3. Dann zu der in (u32*)0x4 gespeicherten Adresse (z. B. 0x85C) springe...

führt der STM32F207 die ersten vier „schnellen“ Bytes offenbar gar nicht aus...

  1. Wie kommt das?
  2. Hat es mit der Pipeline zu tun, wenn der ICode Bus nicht mehr vom Flash sondern vom SRAM fetcht?
  3. Wo steht was davon in den Bastel-Anleitungen von STM&ARM?

Quellcode Bootloader:

__set_MSP(P[0]); // set stack pointer from app's ((u32*)g_pfnVectors)[0]
void (*app)() = (void(*)()) P[1]; // get address of app's reset ISR from app's ((u32*)g_pfnVectors)[1]
SYSCFG->MEMRMP = (0b11 << SYSCFG_MEMRMP_MEM_MODE_Pos); __DSB(); __ISB(); // map first 112KiB of SRAM to 0x0
SCB->VTOR = (u32)0x0; __DSB(); __ISB(); // app's &g_pfnVectors is always @ 0x0
asm("bx %0"::"r"(app)); // jump into the freshly mapped code segment in order to use ICode-bus

Quellcode Firmware (0xE000'ED00 ist übrigens die base address von SCB... offenbar von dem SCB->VTOR = 0 vor dem „bx %0“... passt auch, wenn man den Assembler Kram anguckt):

void Reset_Handler() {
   dbgb[16] = __get_MSP(); // führt zu dbgb[16] == 0xE000'ED00
   __DSB(); __ISB();
   main();
}

Disassembly:

 800032c:       2000            movs    r0, #0
 800032e:       4a1c            ldr     r2, [pc, #112]  ; (80003a0 <main+0xe0>)
 8000330:       6090            str     r0, [r2, #8]
 8000332:       f3bf 8f4f       dsb     sy
 8000336:       f3bf 8f6f       isb     sy
 800033a:       4718            bx      r3
 80003a0:       e000ed00
0000085c <Reset_Handler>:
     85c:       f3ef 8208       mrs     r2, MSP
     860:       4b03            ldr     r3, [pc, #12]   ; (870 <Reset_Handler+0x14>)
     862:       641a            str     r2, [r3, #64]
     864:       f3bf 8f4f       dsb     sy
     868:       f3bf 8f6f       isb     sy
     86c:       f7ff bfa8       b.w     7c0 <main>
     870:       2001c000        andcs   ip, r1, r0
Arm, Bus, Code, Pipeline

Semantik von „muss [...] rechts oder links [...]“?

Wird die Fahrbahn benutzt, muss innerhalb geschlossener Ortschaften am rechten oder linken Fahrbahnrand gegangen werden;

Quelle: §25 Abs. 1 Satz 3 StVO

Wird dadurch vernünftig gesagt, dass dem Bürger die Entscheidung überlassen wird, ob er rechts oder links geht?

Oder könnte es sein, dass die Polizei angetanzt kommt und sagt: „Oh Nein! Heute ist doch Links-Tag!“?

Warum schreibt der Gesetzgeber nicht das da?

Wird die Fahrbahn benutzt, darf innerhalb geschlossener Ortschaften nicht in der Fahrbahnmitte gegangen werden;

Im abgeschafften Rundfunkgebührenstaatsvertrag stand:

Im Falle der gewerblichen Vermietung eines Rundfunkempfangsgerätes sind die Rundfunkgebühren bei einer Vermietung für einen Zeitraum bis zu drei Monaten nicht vom Mieter, sondern vom Vermieter zu zahlen;

Quelle: §2 Nr. 3 Satz 1 RGebStV

Hier wird jemand entlastet und jemand belastet, wodurch Komplikationen entstehen können... Cum-Cum, Cum-Ex, Ex-Ex mäßig... wenn Mieter und Vermieter in einem etwas komplizierten Verhältnis zueinander stehen... 😋 Wieso schreibt der Gesetzgeber nicht einfach:

Im Falle der gewerblichen Vermietung eines Rundfunkempfangsgerätes sind die Rundfunkgebühren bei einer Vermietung für einen Zeitraum bis zu drei Monaten vom Vermieter zu zahlen;

Karussell-Betrug ist auch sowas Komisches... Europaweit haben die Gesetzgeber es offenbar ermöglicht, eine Steuerrückzahlung zu erhalten, bevor deren Zahlung überhaupt erfolgt ist...

Will der Gesetzgeber Widerstand provozieren, indem er sich so ungeschickt ausdrückt, damit er dann windige Strafverfahren veranstalten kann, die er Wunder-Oh-Wunder dann auch noch gewinnt? 🥳

Bedeutung, Intelligenz, Grammatik, Semantik, Straßenverkehrsordnung, Gesetzgeber, Cum-Ex