الحد الأدنى لنظام التشغيل الاستباقي على القشرة-M3 (خاصة على لوحة الأزرق) المكتوبة في الصدأ. لغرض البحث وإظهار كيف يعمل وقت التشغيل الأساسي لـ Cortex-M3.
في الحوسبة ، يكون الاستباق هو فعل مقاطعة المهمة التي يتم تنفيذها مؤقتًا من قبل نظام الكمبيوتر ، دون الحاجة إلى تعاونه ، وبنية استئناف المهمة في وقت لاحق. تُعرف مثل هذه التغييرات في المهمة المنفذة بمفاتيح السياق. ---- ويكيبيديا
في BREIF ، لا يمكن لـ kernel of OS غير المسبق أن تقاطع المهمة ، في حين أن نواة نظام التشغيل الوقائي يمكن أن يعيد السيطرة دون إبلاغ المهمة.
blue-pill ومسلفة المنفذ التسلسلي.arm-none-eabi و openocd مثبتة على النظام الأساسي الخاص بك.rustc 1.37.0-nightly (17e62f77f 2019-07-01) . هذا المشروع عبارة عن مجموعات من عدة مراحل من بناء نظام تشغيل وقائي أولي من Sketch. سوف أتأكد من أن جميع رمز كل فصل يمكن تجميعها وتشغيلها على blue-pill .
Chapter5-MultiTasking cd Chapter5-MultiTasking
قم بتوصيل blue-pill بالكمبيوتر المحمول.
قم بتوصيل PIN PA2 بمستلم تسلسلي ، مع 115200 baudrate ، 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
...