Suatu kali, pada liburan Tahun Baru, dengan malas menjelajahi Internet, para pekerja keras di kantor R&D * kami melihat video dari pengujian prototipe robotaxi. Komentator menanggapi dengan nada antusias - bagaimanapun juga sebuah revolusi. Ini bagus, ya, tapi waktunya sekarang - revolusi sudah ada, dan TI memimpin mereka.
Tetapi telinga yang terlatih mendengar sesuatu yang lain dalam suara dari lokasi pengujian. Pengontrol kecepatan (hal untuk mengontrol dorongan baling-baling) memainkan melodi di awal, seperti yang biasa dilakukan pilot drone, yang sering menggunakan pengontrol penerbangan Betaflight. Apakah ada penerbangan beta? Sepertinya ya. Ya, atau beberapa variasinya - hanya ada sekitar setengah lusin pengontrol penerbangan terbuka.
Kilas balik berlari di depan mata saya, di suatu tempat dari kedalaman alam bawah sadar, informasi yang terlupakan tentang firmware untuk Toyota selama jutaan ribu baris C dan 2.000 variabel global muncul ( kesalahan Toyota: 81564 dalam kode ).
Setelah meninjau kode sumber Betaflight di github, itu menjadi lebih buruk, dan lebih jauh, semakin buruk . Kami menduga bahwa kode yang ditulis sendiri akan memiliki tingkat yang sama. Ini berarti bahwa tidak ada jaminan dan kemampuan tidak hanya untuk memastikan pengoperasian kode yang bebas masalah, tetapi untuk sepenuhnya memahami pekerjaannya sepenuhnya. Dan ini adalah program kontrol untuk alat berat dengan sekrup tajam yang terbang tinggi, cepat. Semakin menakutkan: mainan adalah satu hal, tetapi saya tidak ingin terbang dengan taksi seperti itu.
Tetapi apakah mungkin sebaliknya? Anda bisa, kami memutuskan!
Dan mereka memutuskan untuk membuktikannya. Sebuah kuadrik FPV akrobatik berdasarkan STM32F405 dibeli di Avito, papan Discovery untuk pengontrol yang sama dibeli untuk debugging, dan kemudian semuanya seperti kabut.
Jadi bagaimana bisa sebaliknya?
Setelah pertemuan singkat, muncul pemikiran berikut:
kita membutuhkan pendekatan yang berbeda
, .
, - , . , [FC] .
:
- embedded
runtime RTOS, RTOS
, .
, , . , Ada. , , SPARK. [SRM] SPARK Ada, .
SPARK, , , , , , , , . Rust.
. , . , .
, , , , . , .
SPARK, :
null-
.
, .
, . !
, ?
SPARK , , , . , , , .
SPARK , Ada. Runtime; SPARK , .
:
:
, , .
SPARK , โโ , . , - () .
SPARK : "" (Stone level) "" "" "" (Gold) "". :
Stone |
, SPARK |
Bronze |
Stone + / |
Silver |
Bronze + runtime- |
Gold |
Silver + - - |
Platinum |
Gold + |
Gold, - Boing 777 MAX.
SPARK: , , (SMT - Z3), . , .
[SUG]
, "" - ECMA-, , . , , , . Rust, - - Perl, .
, , , , , , , , . Ada ( SPARK Ada) . , Ada embedded-.
"". , . , " ". " ". " ". " ". , .
Ravenscar, embedded-. , : -, , stdlib- .
Ravescar,
Runtime
embedded - , RTOS, . Ada - Ada ( Ada tasks, ), (, , entries) . , .
embedded- :
zero-footprint - ; , TO MSP430
small footprint - Ada, , RAM
full ravenscar - Ravenscar/Extended Ravenscar
, - green threads, . , , .
, Ada stdlib STM32, . , .
โrustRustRUSTโ!
, , Rust . ? , Spark .
Ada - access types, , , - Spark , Rust. , ( /), ( ) .
, , - Rust, , , Ada/SPARK. [UPS]
, Ada/SPARK ? , ( - , - , - - ?), Ada . , (, ), placement constructor, .. limited- - , .
, โ , . . - , , Ada.
layout : , . - , , .
IDE
IDE, VSCode , .
. , [EFF], , , โยป Ada :
, SPARK/Ada . 21 [LIC] Ada, BasiLEO Ada 12, .
-
, - . , , .
, :
Veriflight - , .
Veriflight_board - , - . , .
, USB STM32 Interop Ada.
:
STM32F405 168 (192 RAM, 1M flash)
S.BUS USART1
6- -
PWM
USB-, PHY- .
ยซยป 2 :
(CMD task ) . , ยซ , ยป. , - , . 20 .
- - . 3 PID-, . , - . - 200 . , .
, , .
PID :
-
PID- ,
PID-
, ,
, - ( Arduino ) - C Wiring . . , - , [MHN], .
, , . 90 - (disarm).
, , PID . , , , , -- , .
, .
, . , : , , Ada, .
Ada/SPARK , , , , .
R&D , , , , , , .
, runtime- , - , , .
, embedded Ada.
, robotics automotive , ยซ ยป, , , : , .
[SUG] SPARK user guide https://docs.adacore.com/spark2014-docs/html/ug/index.html
[SRM] SPARK reference manual (https://docs.adacore.com/live/wave/spark2014/html/spark2014_rm/index.html)
[FC] Frama-C - platform untuk analisis modular kode C https://frama-c.com/
[UPS] https://blog.adacore.com/using-pointers-in-spark
[MHN] https://nitinjsanket.github.io/tutorials/attitudeest/mahony
[EFF] https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf
[LIC] https://en.wikipedia.org/wiki/Lunar_IceCube