Embox berpartisipasi dalam festival IT
TechTrain . Seperti
pertama kali, kami membawa potongan-potongan besi dan menunjukkan prestasi kami secara langsung. Kami sudah menulis tentang beberapa di Habré, tetapi Anda tidak pernah tahu siapa :).
Telepon VoIP ,
Qt dan
OpenCV ditunjukkan, semua berdasarkan STM32F7-Discovery. Selain stand, kami membuat tiga laporan. Saya sudah menggambarkan ide-ide yang pertama tentang proyek terbuka di
habr Dalam artikel ini saya ingin menceritakan ide-ide lain dari laporan kami, yang disebut
"Meluncurkan perangkat lunak" desktop "pada mikrokontroler" . Nah, mengambil kesempatan ini, saya akan memberi tahu Anda sedikit tentang perasaan saya tentang festival ini.
TechTrain
Pertama, izinkan saya memberi tahu Anda sedikit tentang festival itu sendiri. Siapa pun yang tidak tertarik dapat segera memutar balik ke bagian "Meluncurkan perangkat lunak" Desktop "pada mikrokontroler"
Hal pertama yang menarik perhatian saya di festival adalah banyak orang. Kami lelah berdiri di mimbar, berbicara, melakukan pencarian, dan berkomunikasi. Di sisi lain, itu sangat menyenangkan dan menarik, dan yang paling penting, kami mendapat banyak emosi positif, misalnya, beberapa orang mengatakan kepada kami bahwa kami memiliki blog yang bagus di pusat :). Peserta festival berasal dari berbagai bidang kegiatan, dan bahkan bukan dari TI, karena slogan festival adalah "festival yang hebat bagi pengembang, insinyur, dan simpatisan." Ada banyak anak, seorang bocah lelaki di ujung festival menyeret mesin robot dari stan dan bermain dengannya. Baik bocah itu maupun robotnya tidak terluka.
Untuk membuat keluasan audiens lebih dimengerti, saya akan menggambarkannya secara berbeda. Banyak kegiatan dilakukan di festival, salah satunya adalah pencarian. Peserta pencarian harus naik ke tribun, menyelesaikan tugas yang diciptakan dan mendapatkan cetakan. Untuk ini, seseorang bahkan mendapat quadrocopter utuh. Tapi sekarang bukan tentang itu. Kami juga salah satu tempat di mana Anda bisa mendapatkan meterai. Kami telah menyiapkan tugas, termasuk pertanyaan. Pertanyaannya sederhana, mengenai perangkat lunak open source dan sistem embedded. Tetapi kontingen itu begitu berbeda sehingga beberapa orang membenci kesederhanaan pertanyaan, sementara yang lain masuk ke dalam keadaan pingsan. Terakhir kami secara alami membantu, memberi tahu (atau menyarankan google) tentang hal-hal seperti: "yang merupakan pembuat bahasa C", "apa yang terkenal dengan Linus Torvalds", "apa perbedaan antara mikroprosesor dan mikrokontroler" atau "apa itu kompilator silang". Akibatnya, tidak ada yang pergi tanpa mencetak. Ngomong-ngomong, itu agak aneh, tapi curiga banyak yang dengan mudah diuraikan "GNU - GNU bukan Unix". Mungkin siap untuk Stallman. :)
Yang kedua mengikuti dari yang pertama. Ada hiburan untuk audiens yang sangat luas. Misalnya, Habr membawa kotak pasir. Benar, itu bukan kotak pasir lokal di mana Anda bisa mendapatkan undangan untuk sebuah artikel, tapi ada kemungkinan untuk berkubang di dalamnya ketenaran. Tentang undangan di kotak pasir, saya tidak berpikir untuk bertanya, mungkin mereka memberi seperti kotak pasir nyata. Ada klub
komputer lama , Anda bisa bermain di sana, dan banyak yang melakukannya. Ada mesin slot dari
Museum mesin slot Soviet . Sberbank, menawarkan area relaksasi, juga memungkinkan untuk bermain di dalamnya di stasiun bermain. Ada tradisional ya penendang IT dan banyak hiburan lainnya. Sayangnya, kami harus bekerja, jadi saya hanya berbicara tentang apa yang terlihat dari gerai kami.
Yang ketiga dan mungkin yang utama adalah bahwa penyelenggara berhasil mengumpulkan perwakilan dari hampir semua bidang mulai dari pengembangan web dan sistem terdistribusi hingga tertanam. Dari pengembang dan teknisi lainnya, hingga sumber daya manusia dan hanya tertarik padanya, misalnya, gamer (toh, dimungkinkan untuk meretas sendiri ke
Romero ) atau penggemar DIY. Ada QA dari
COMAQA, ada lead tim dari
Burning Lead . Ada komunitas dari berbagai kota (Rostov, Tver, Krasnodar). Akibatnya, laporan dan stand sangat berbeda dalam topik. Misalnya, stan kami terletak di antara komunitas pemimpin tim Burning Lead dan stan dari
St. Petersburg Club of IT Director .
Akibatnya, orang-orang dengan latar belakang yang sangat berbeda mendekati stan kami, ada pengembang web dan pipi dotnet, ada JS dan plus. Seseorang ingat bahwa dia sedang melakukan sesuatu pada AVR ketika masih di universitas, seseorang mengatakan bahwa dia bersenang-senang dengan RaPi atau Arduino. Ada banyak DotNet-chicks, banyak yang bertanya-tanya apakah kami memiliki
.NET Micro Framework . Kami bahkan berpikir keras untuk tidak menyeretnya ke kami. Diharapkan ada banyak pertanyaan tentang Rust. Singkatnya, menurut pendapat saya, panitia berhasil menerapkan gagasan festival dengan baik “Cari tahu apa yang orang lain jalani!”. Lagi pula, seperti pada festival apa pun, hal utama di sini adalah melihat orang lain dan menunjukkan diri mereka :).
Ya, foto tidak diberikan di sini.
Beberapa foto , termasuk dengan anak laki-laki hidup Volodya, dapat
dilihat di grup kami. Yah, tentu saja, dalam
kelompok techtrain, sekelompok foto berkualitas tinggi, mereka berjanji untuk memposting lebih banyak.
Luncurkan Perangkat Lunak Desktop pada Mikrokontroler
Laporan saya adalah semacam
ringkasan hasil beberapa pekerjaan kami dalam meluncurkan perangkat lunak desktop (
Qt ,
OpenCV ,
pjsip ). Laporan ini ditujukan untuk masyarakat umum. Untuk habr, saya akan mencoba mengurangi banyak detail, dan untuk hal-hal yang diperlukan saya akan memberikan tautan atau kata kunci untuk pencarian.
Untuk memulainya, saya akan memberikan semacam agenda. Bahkan, akan ada 3 bagian. Pertama, saya akan menjelaskan kesulitan mentransfer perangkat lunak desktop ke mikrokontroler, dan di sepanjang jalan saya akan menjelaskan perbedaan antara mikrokontroler dan mikroprosesor. Saya juga akan menjawab pertanyaan kunci,
misalnya, kambing kambing , mengapa menjalankan perangkat lunak desktop pada mikrokontroler, dan akhirnya, saya akan memberi tahu Anda bagaimana kami dapat sangat mengurangi biaya transfer perangkat lunak "desktop" ini ke mikrokontroler.
Apa perbedaan antara mikrokontroler dan mikroprosesor
Jadi salah satu pertanyaan kami pada pencarian terdengar dan mungkin di bawah pengaruh ini sebuah
artikel muncul
pada seorang programmer yang menjelaskan perbedaannya. Saya setuju dengan semua yang ada di artikel, tetapi kami akan mencoba menjelaskannya dengan kata-kata kami sendiri dan membuat beberapa aksen lainnya.
Apa itu Micro Controller Unit (MCU)? Jika Anda melihat
Wikipedia , Anda dapat memahami bahwa mikrokontroler adalah sistem pada sebuah chip, yaitu, sebuah prosesor dan periferal berada dalam satu chip.
Istilah system-on-a-chip (System-on-a-Chip, SoC) adalah konsep yang lebih luas daripada mikrokontroler. Ini adalah sirkuit elektronik yang terintegrasi ke dalam satu chip, yang berisi mikroprosesor (CPU) dan periferal. Di ponsel mana pun ada chip di mana, selain beberapa inti prosesor, ada banyak periferal. Bahkan prosesor x86 sekarang termasuk jembatan dan bahkan GPU. Tapi saya ingin fokus bukan pada klasifikasi yang jelas, tetapi pada fitur. Semua orang tahu sistem pada sebuah chip:
- Konsumsi lebih sedikit
- Lebih murah
- Kurang produktif
Tidak semua orang tahu bahwa mereka bahkan lebih dapat diandalkan dengan mengurangi jumlah kontak dan mungkin memiliki kisaran suhu yang lebih besar.
Mikrokontroler memiliki integrasi yang lebih besar dan juga termasuk memori (RAM dan ROM), yang juga disebut periferal. Dengan demikian, sifat-sifatnya dipertahankan, dikonsumsi lebih sedikit, biaya lebih sedikit, bahkan kurang produktif, bahkan lebih dapat diandalkan.
Saya ingin berbicara tentang "bahkan kurang produktif" secara lebih rinci. Faktanya adalah bahwa di satu sisi itu benar, gunakan CPU umum umum atau SoC dan melihat kinerja yang jauh lebih besar dalam apa yang disebut
DMIPS . Tetapi jika Anda berpikir tentang mengapa kinerja seperti itu? Sebagai contoh, saya akan memberikan game Quake and Doom (pembuatnya adalah John Romero di festival), mereka bekerja sangat baik di Pentium MMX. Tetapi kinerja sistem berdasarkan CPU ini sudah diblokir oleh mikrokontroler top-end. Maksud saya
STM32F7 atau bahkan
STM32H7 . Artinya, berdasarkan MCU ini, sangat mungkin untuk menjalankan aplikasi tingkat Doom dan Quake, yang Anda setujui tidak buruk sama sekali.
Mari kita bicara tentang fitur lain dari MCU - memori internal. Dia, seperti yang saya katakan, terletak langsung di chip, dan karenanya, sangat cepat. Tapi dia, tentu saja, tidak cukup. Tapi seberapa kecil? Mikrokontroler STM32F769 berisi 2 mb flash (ROM) dan SRAM (RAM) 512 + 16 + 4 kB. Selain itu, misalnya, papan
disko STM32F769i juga memiliki memori eksternal (128-Mbit SDRAM dan 512-Mbit Quad-SPI Flash memory), yang ditangani secara langsung. Saya bahkan tidak berbicara tentang kemampuan untuk menghubungkan kartu sd atau usb. Nah, jika Anda mengingat frasa terkenal "640 kb harus cukup untuk semua orang", maka muncul pertanyaan yang masuk akal - mengapa perangkat lunak desktop modern begitu rakus? Sebagai contoh, kalkulator di windows 10 dalam mode siaga menghabiskan memori sebanyak 16 MB.
Mari kita beralih ke fitur MCU berikutnya, kehadiran ROM. Bahkan, sistem dengan CPU juga mengandung ROM; eksekusi dimulai dari itu, dan BIOS dimulai, tetapi sisa perangkat lunak dimuat ke dalam RAM dan dieksekusi dari itu. Dalam embedded system, sudah lazim untuk mengeksekusi kode secara langsung, yang disebut eXecute-In-Place (XIP), Linux, omong-omong, juga mendukung mode ini, tetapi yang utama adalah memuat semuanya ke dalam memori utama dan bahkan kemudian menjalankannya. Kemampuan untuk mengeksekusi langsung dari ROM itu penting karena dua alasan: yang pertama adalah arsitektur Harvard, pemisahan bus perintah dan bus data memungkinkan Anda untuk meningkatkan kecepatan eksekusi program; yang kedua - well, tentu saja, lebih sedikit memori yang terbuang, karena setidaknya segmen kode tidak perlu disalin di tempat lain.
Fitur kunci lain dari MCU adalah kurangnya modul seperti
MMU , yaitu, mikrokontroler tidak memiliki dukungan perangkat keras untuk
manajemen memori virtual . Di MCU, bahkan tidak semua memiliki
MPU , dan kode berjalan di ruang alamat yang sama, sehingga sulit untuk mengatur
garpu penuh () . Tapi garpu () itu sendiri, seperti yang kita tulis dalam artikel
“garpu () vs. vfork () ”adalah pemanggilan sistem yang agak berat, dan menurut fungsinya, dalam banyak kasus, ini dapat diganti dengan vfork () atau posix_spawn ().
Ringkasnya, bagaimana mikrokontroler berbeda dari mikroprosesor, kita dapat mengatakan yang berikut:
Dalam hal perangkat keras:
- Mikrokontroler memiliki semua periferal yang diperlukan termasuk memori
- Mikrokontroler memiliki memori yang jauh lebih sedikit
- Mikrokontroler tidak memiliki MMU perangkat keras
- Mikrokontroler memiliki kecepatan clock yang lebih rendah dan mungkin memiliki arsitektur prosesor yang berbeda (arsitektur hadiah)
Dalam hal properti konsumen:
- Mikrokontroler mengkonsumsi lebih sedikit energi, dapat bekerja dengan baterai
- Mikrokontroler lebih murah
- Mikrokontroler lebih dapat diandalkan
- Mikrokontroler kurang produktif
Mengapa menjalankan perangkat lunak desktop pada mikrokontroler
Jadi, MCU kurang produktif dan pada awalnya dimaksudkan (dan dimaksudkan) untuk tugas-tugas kontrol. Jadi mengapa menjalankan perangkat lunak yang dirancang untuk sistem kelas lain pada mereka? Yah, bahkan jika kekuatan mereka sudah cukup untuk tugas-tugas seperti itu, tetapi tugas-tugas ini dapat diselesaikan dengan cara tradisional untuk mikrokontroler. Artinya, untuk menggunakan berbagai RTOS kecil atau menulis kode dari awal, apa yang disebut bare-metal. Ada jawaban yang jelas, awalnya tugas manajemen sangat sederhana, sekarang persyaratan untuk fungsionalitas berkembang pesat. Bahkan dari beberapa bola lampu kumuh yang mereka harapkan dapat dikendalikan melalui Internet, saya tidak berbicara tentang ketel, mereka mungkin akan segera memilih komposisi teh sesuai dengan keinginan pemilik dan memanaskan jumlah air yang optimal ke suhu optimal untuk memperbaiki situasi lingkungan. :)
Oleh karena itu, tidak mengherankan bahwa upaya terus dilakukan untuk menggunakan perangkat lunak yang sudah dikembangkan dalam mikrokontroler. Sebagai contoh, salah satu upaya pertama dan banyak dikenal untuk menjalankan Linux pada platform kecil adalah ucLinux, sekarang ini adalah mode NOMMU terutama Linux. Idenya adalah untuk menjalankan Linux pada platform perangkat keras tanpa MMU, tetapi kami menemukan bahwa ini adalah salah satu perbedaan utama antara CPU dan MCU.
Secara singkat, keuntungan menggunakan perangkat lunak yang sudah jadi:
- Mengurangi biaya pengembangan
- Waktu yang lebih singkat untuk memasarkan
- Pengurangan kesalahan dalam kode. Perangkat lunak siap pakai lebih andal.
Bagaimana kami melakukannya di Embox
Di sini Anda mengerti, Anda dapat berbicara untuk waktu yang sangat lama, tetapi sekali lagi saya akan mencoba menguraikan poin utama dalam tesis dan dengan cara yang dapat diakses.
Yang pertama. Embox menggunakan sistem build Mybuild dengan bahasanya sendiri untuk mendeskripsikan modul dan sistem, kami menulisnya di artikel
“Mybuild - sistem build untuk aplikasi modular” . Sistem build ini memungkinkan Anda untuk tidak memasukkan apa pun yang berlebihan dalam gambar, atau lebih tepatnya hanya memasukkan apa yang diperlukan. Anda dapat benar-benar menyempurnakan karakteristik sistem, misalnya, untuk menjalankan PJSIP pada STM32F7, kami membatasi jumlah paket ethernet menjadi 16 dengan hanya menulis baris dalam file konfigurasi untuk sistem.
include embox.net.skbuff(amount_skb=16)
Mybuild menganalisis dependensi dan menghasilkan berbagai artefak, termasuk file header, skrip linker, dan Makefile. Semua ini memungkinkan untuk secara signifikan mengurangi jumlah memori yang diperlukan dan tidak memasukkan bagian-bagian yang tidak digunakan sama sekali.
Yang kedua. Jelas, Embox harus mendukung POSIX dan didukung. Selain itu, kami telah mengimplementasikan perpustakaan standar kami sendiri, karena perpustakaan itu juga harus dibangun kembali tergantung pada konfigurasi sistem.
Yang ketiga. Menghubungkan statis. Untuk menghindari masalah dengan satu ruang alamat, kurangi ukuran gambar dan hanya sertakan bagian yang diperlukan, kami menggunakan tautan statis. Pada tahap yang berbeda, bagian-bagian berbeda dari sistem dirakit, tetapi akhirnya semuanya (kernel, semua subsistem, perpustakaan dan aplikasi) dihubungkan ke satu gambar. Ia memiliki semua informasi tentang semua karakter dalam gambar. Dan meskipun pada pandangan pertama kami memiliki banyak aplikasi dengan titik masuk standar utama (..), tetapi pada gambar yang dihasilkan, ini akan menjadi karakter yang berbeda yang akan tersedia pada sistem dari baris perintah.
Keempat. Kami harus mengimplementasikan runtime untuk C ++, karena banyak aplikasi dan pustaka populer menggunakan kelebihan.
Kelima. Kami menambahkan kemampuan untuk menggunakan sistem build
./configure; make; make install
Setelah mengunduh sumber dari suatu tempat dan menerapkan tambalan yang diperlukan.
Kesimpulan
Saat ini, persyaratan fungsional untuk sistem yang sebelumnya dibuat pada mikrokontroler telah tumbuh secara signifikan. Sistem kontrol diharapkan kompatibel dengan sistem universal. Karakteristik mikrokontroler juga telah tumbuh secara signifikan, yang memungkinkan Anda untuk menjalankan perangkat lunak dengan fungsi yang sesuai. Secara historis, perangkat lunak untuk mikrokontroler untuk keperluan optimasi ditulis untuk tugas tertentu, tetapi dengan peningkatan persyaratan fungsional, perlu untuk menerapkan pendekatan dari dunia sistem universal yang dapat sangat meningkatkan keandalan perangkat lunak, yaitu penggunaan kembali modul, pengembangan terdistribusi. Perangkat lunak universal, meskipun tidak memperhitungkan fitur sistem tertanam, tetapi memiliki fungsi yang jauh lebih besar dan berfungsi dengan baik. Oleh karena itu, penggunaan perangkat lunak desktop pada mikrokontroler memberikan keuntungan. Memang, di satu sisi, Anda dapat menggunakan platform perangkat keras yang lebih murah, lebih andal, dan kurang konsumsi, dan di sisi lain, biaya pengembangan sistem seperti itu berkurang secara signifikan.