preemptive
1.0.0
さびに記載されているcortex-M3(特にブルーピルボード上)の最小の先制os。これは、Cortex-M3の基本的なランタイムがどのように機能するかを調査および示す目的です。
コンピューティングでは、先制とは、コンピューターシステムによって実行されるタスクを一時的に中断する行為であり、その協力を必要とせずに、そして後でタスクを再開する意図を持っています。実行されたタスクのこのような変更は、コンテキストスイッチと呼ばれます。 ----ウィキペディア
BREIFでは、非プリエンプティブOSのカーネルはタスクを中断することはできませんが、先制OSの核はタスクを通知せずにコントロールを取り戻すことができます。
blue-pillボードとシリアルポート受信者があることを確認してください。arm-none-eabiツールチェーンとopenocdがインストールされていることを確認してください。rustc 1.37.0-nightly (17e62f77f 2019-07-01)です。 このプロジェクトは、スケッチから予備的な先制OSを構築するいくつかの段階のコレクションです。各章のすべてのコードがblue-pillでコンパイルして実行できることを確認します。
Chapter5-MultiTaskingを入力します cd Chapter5-MultiTasking
blue-pillラップトップに接続します。
PIN PA2シリアル受信者に接続します。115200ボードレート、8つのデータビット、1ストップビット、パリティなし、フロー制御なし。
openocd実行:
> 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.
その結果、このようなシリアル受信者からの出力が表示されます。
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
...