Mengapa pengembang bare-metal pindah ke sistem operasi
Melihat kembali 'Usia Bare-Metal'
Pertama kali saya tahu tentang perangkat lunak tertanam adalah sekitar tahun 2008, saya adalah seorang mahasiswa tahun kedua dan mulai belajar tentang pemrograman pada chip 51. Karena saya mengambil jurusan ilmu komputer, sebagian besar program saya dijalankan di PC. Itu adalah pengalaman yang sama sekali berbeda untuk melihat program berjalan di atas papan bare-metal, dan saya masih dapat mengingat kegembiraan ketika program lampu sepeda pertama saya berjalan dengan sukses. Namun, semakin banyak program bare-metal yang saya tulis, semakin banyak masalah yang saya temui. Saya merangkumnya sebagai berikut:
Konkurensi
Untuk program bare-metal, pasti ada loop 'sementara (1)' yang sangat besar, yang berisi hampir semua logika transaksi dari keseluruhan proyek. Setiap transaksi memanggil satu atau lebih fungsi penundaan dan mereka dieksekusi secara serial ketika CPU menjalankan fungsi penundaan, sisa transaksi harus menunggu. Dengan cara ini, banyak waktu CPU yang terbuang pada loop kosong, yang menyebabkan konkurensi yang cukup rendah.
Modularitas
Dari perspektif proyek perangkat lunak, prinsip kohesi tinggi dan kopling rendah selalu ditekankan selama proses pengembangan. Namun, modul dalam perangkat lunak bare-metal biasanya sangat bergantung satu sama lain, tidak nyaman untuk merancang perangkat lunak dengan kopling rendah, yang menyulitkan pengembangan proyek besar pada papan bare-metal. Misalnya:
- Seperti disebutkan di atas, sebagian besar fungsi dikumpulkan dalam loop 'sementara (1)' yang sangat besar dan sulit untuk dibagi menjadi modul.
- Sebagai contoh lain, pengembang harus berhati-hati dalam menggunakan fungsi penundaan saat pengatur waktu pengawas dilibatkan. Jika waktu tunda terlalu lama, fungsi utama tidak memiliki kesempatan untuk mengatur ulang pengawas, maka pengawas akan dipicu selama eksekusi. Jadi, untuk pengembangan bare-metal, ada terlalu banyak hal yang perlu dipertimbangkan bahkan saat menjalankan fungsi tunda. Semakin kompleks proyek, semakin banyak perhatian yang harus diberikan.
Ekosistem
Banyak komponen perangkat lunak tingkat lanjut harus bergantung pada implementasi sistem operasi tingkat bawah. Misalnya:
- Saya telah mengembangkan proyek sumber terbuka berdasarkan 'FreeModbus' yang telah saya rencanakan untuk ditransplantasikan ke berbagai platform, bahkan papan bare-metal juga dipertimbangkan. Namun dibandingkan dengan kenyamanan dalam mengadaptasinya ke sistem operasi yang berbeda, beberapa fungsi terlalu rumit untuk diterapkan pada semua papan bare-metal. Di sisi lain, banyak implementasi harus dirancang dari awal pada platform perangkat keras yang berbeda karena kurangnya kesamaan, yang merupakan tugas yang membosankan dan memakan waktu. Untuk saat ini, implementasi tumpukan Modbus saya masih belum dapat berjalan pada papan bare-metal.
- Banyak perangkat pengembangan perangkat lunak (SDK) WiFi yang disediakan oleh perusahaan besar seperti Realteck, TI, dan MediaTek hanya dapat dijalankan di sistem operasi. Mereka tidak memublikasikan kode sumber firmware untuk dimodifikasi pengguna, jadi Anda tidak dapat menggunakannya dalam lingkungan bare-metal.
Waktu-Nyata
Kemampuan real-time diperlukan untuk beberapa bidang aplikasi. Dalam situasi ini, beberapa langkah penting dari perangkat lunak harus dipicu pada waktu tertentu. Untuk kontrol industri, perangkat mekanis harus menyelesaikan tindakan dalam urutan dan waktu yang telah ditentukan sebelumnya. Jika kemampuan real-time tidak dapat dipastikan, akan menyebabkan malfungsi, yang dapat membahayakan nyawa pekerja. Pada platform bare-metal, ketika semua fungsi di-jam menjadi satu loop besar 'sementara (1)', mustahil untuk mempertahankan kemampuan real-time.
Dapat digunakan kembali
Reusability tergantung pada modularitas secara langsung. Saya yakin tidak ada orang yang ingin melakukan pekerjaan yang sama berulang kali, terutama saat menulis kode. Tetapi pada berbagai platform perangkat keras dengan chip yang berbeda, fungsi yang sama harus disesuaikan dengan perangkat keras yang berbeda, yang implementasinya sangat bergantung pada perangkat keras tingkat rendah. Tidak dapat dihindari untuk membangun kembali roda.
Kelebihan sistem operasi
Itu sekitar tahun 2010 ketika saya pertama kali menggunakan sistem operasi. Rangkaian MCU STM32 mulai populer. Dengan fitur-fitur canggih, banyak orang menjalankan sistem operasi pada mereka. Saya kemudian menggunakan sistem operasi RT-Thread yang tersedia banyak komponen siap pakai. Dibandingkan dengan sistem operasi lain, saya merasa lebih nyaman dan telah mengembangkannya selama 10 tahun.
Berdasarkan pemahaman saya, saya ingin membahas kelebihan sistem operasi:
Modularitas
Dengan sistem operasi, seluruh perangkat lunak dapat dibagi menjadi beberapa tugas (dikenal sebagai utas), setiap utas memiliki ruang eksekusi independennya sendiri. Mereka independen satu sama lain, yang meningkatkan modularitas.
Konkurensi
Ketika sebuah utas memanggil fungsi penundaan, itu akan secara otomatis menghasilkan CPU ke utas lain yang membutuhkan, yang meningkatkan pemanfaatan seluruh CPU dan akhirnya konkurensi.
Waktu-Nyata
Sebuah RTOS dirancang dengan kemampuan real-time. Setiap utas diberi prioritas tertentu. Utas yang lebih penting diatur ke prioritas yang lebih tinggi, utas yang kurang penting diatur ke yang lebih rendah. Dengan cara ini, kinerja seluruh perangkat lunak secara real-time dijamin.
Efisiensi Pengembangan
Sistem operasi menyediakan lapisan antarmuka abstrak terpadu, yang memfasilitasi akumulasi komponen yang dapat digunakan kembali dan meningkatkan efisiensi pengembangan.
Sistem operasi adalah produk dari kebijaksanaan sekelompok geeks perangkat lunak. Banyak fungsi perangkat lunak yang umum, seperti semaphore, notifikasi acara, kotak surat, penyangga cincin, daftar rantai satu arah / daftar dua arah, dan sebagainya, dienkapsulasi dan diabstraksikan untuk membuat fungsi-fungsi ini siap digunakan.
Sistem operasi seperti Linux dan RT-Thread mengimplementasikan seperangkat standar antarmuka perangkat keras untuk perangkat keras yang terfragmentasi, yang dikenal sebagai kerangka kerja driver perangkat. Oleh karena itu, insinyur perangkat lunak hanya perlu fokus pada pengembangan dan tidak perlu lagi mengkhawatirkan perangkat keras yang mendasarinya, atau untuk membangun kembali roda.
Ekosistem Perangkat Lunak
Kekayaan ekosistem membawa proses perubahan kuantitatif menjadi kualitatif.
Peningkatan modularitas dan penggunaan kembali dengan sistem operasi memungkinkan kami untuk merangkum komponen berbasis sistem operasi yang dapat digunakan kembali yang ramah-embedded, yang tidak hanya dapat digunakan dalam proyek kami tetapi juga dapat dibagikan dengan lebih banyak pengembang tertanam yang membutuhkan—memaksimalkan nilai perangkat lunak.
Saya seorang geek open-source dan saya telah open source beberapa perangkat lunak tertanam di GitHub. Sebelum membuat perangkat lunak sumber terbuka, saya jarang berbicara dengan orang lain tentang proyek saya karena saya menganggap bahwa karena orang menggunakan chip atau platform perangkat keras yang berbeda, kode saya hampir tidak dapat berjalan di perangkat keras mereka. Dengan sistem operasi, penggunaan kembali perangkat lunak sangat meningkat, banyak ahli dapat berkomunikasi satu sama lain tentang proyek yang sama. Mereka bahkan berasal dari negara yang berbeda. Hal ini mendorong semakin banyak orang untuk berbagi dan membicarakan proyek mereka.