Ein minimales präventives Betriebssystem auf Cortex-M3 (insbesondere auf Blue-Pill-Board) in Rost. Es dient dazu, zu erforschen und zu zeigen, wie die grundlegende Laufzeit von Cortex-M3 funktioniert.
Beim Berechnen ist die Präsentation der Akt der vorübergehenden Unterbrechung einer Aufgabe, die von einem Computersystem ausgeführt wird, ohne dass ihre Zusammenarbeit erforderlich ist und die Absicht, die Aufgabe zu einem späteren Zeitpunkt wieder aufzunehmen. Solche Änderungen der ausgeführten Aufgabe werden als Kontextschalter bezeichnet. ---- Wikipedia
In Breif kann der Kernel des nicht preemptiven Betriebssystems eine Aufgabe nicht unterbrechen, während der Kern des präventiven Betriebssystems die Kontrolle zurückerobern kann, ohne die Aufgabe zu informieren.
blue-pill -Platine und einen seriellen Hafenersatz haben.arm-none-eabi -Toolchain und openocd installiert haben.rustc 1.37.0-nightly (17e62f77f 2019-07-01) . Dieses Projekt ist Sammlungen mehrerer Phasen, in denen ein vorbeugendes Präventiv -Betriebssystem aus der Skizze aufgebaut wird. Ich werde sicherstellen, dass jeder Code jedes Kapitels auf blue-pill kompiliert und ausgeführt wird.
Chapter5-MultiTasking cd Chapter5-MultiTasking
Schließen Sie die blue-pill mit Ihrem Laptop an.
Schließen Sie den Pin PA2 mit einem seriellen Erkenntnis mit 115200 Baudrate, 8 Datenbits, 1 Stopp -Bits, keine Parität und keine Flussregelung an.
openocd laufen:
> openocd
...
Info : using stlink api v2
Info : Target voltage: 3.175214
Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
> cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.93s
Running `targetthumbv7m-none-eabidebugpreemptive`
Reading symbols from targetthumbv7m-none-eabidebugpreemptive...done.
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080008fc msp: 0x20005000
Loading section .isr_vector, size 0x40 lma 0x8000000
Loading section .text, size 0x2a08 lma 0x8000040
Start address 0x80008fc, load size 10824
Transfer rate: 14 KB/sec, 5412 bytes/write.
(gdb) continue
Continuing.
Als Ergebnis sehen Sie die Ausgabe aus dem seriellen Erkenntnis wie folgt:
Executing task1!
task1: fib(0)=1
task1: fib(1)=1
task1: fib(2)=2
Executing task2!
task2: is_prime(1)=true
task2: is_prime(2)=true
task2: is_prime(3)=true
Executing task1!
task1: fib(3)=3
task1: fib(4)=5
task1: fib(5)=8
Executing task2!
task2: is_prime(4)=false
task2: is_prime(5)=true
task2: is_prime(6)=false
...