Seluruh kebenaran tentang RTOS. Artikel # 7. Nucleus SE: Pendahuluan



Dalam sisa seri "Seluruh kebenaran tentang RTOS", kami akan memeriksa secara rinci bagaimana RTOS diimplementasikan dan digunakan. Untuk melakukan ini, kami akan mempertimbangkan RTOS tertentu: Nucleus SE. Bahkan jika Anda tidak akan menggunakan inti khusus ini atau kernel lain yang terkait dengannya, memahami cara kerjanya akan memberikan landasan yang baik untuk bekerja dengan RTOS apa pun.

Untuk memahami mengapa Nucleus SE dirancang dengan cara ini, penting untuk menyoroti tugas dan tujuan inti yang saya ikuti di awal proyek ini.

Artikel sebelumnya dalam seri:
Artikel # 6. Layanan RTOS lainnya
Artikel # 5. Interaksi tugas dan sinkronisasi
Artikel # 4. Tugas, pengalihan konteks, dan interupsi
Artikel # 3. Tugas dan Perencanaan
Artikel # 2. RTOS: Struktur dan mode waktu-nyata
Artikel # 1. RTOS: pengantar.


Kesederhanaan

Kode kernel harus sederhana, langsung, berkomentar dengan baik, dan didokumentasikan. Nucleus SE dimaksudkan terutama untuk penggunaan pendidikan.

Ukuran

Ini harus berupa kernel kecil yang dapat diskalakan dengan baik (karena memori, terutama memori operasional (RAM), mungkin kekurangan pasokan).

Fungsionalitas

Kernel harus memiliki fungsionalitas tingkat tinggi yang mendukung layanan RTOS standar.

Dukungan 8/16 bit

Ini harus mendukung arsitektur 8- dan 16-bit: sedapat mungkin, gunakan data ukuran byte; struktur data seharusnya tidak memerlukan metode pengalamatan yang eksotis; data yang persisten tidak boleh disalin ke RAM jika tidak perlu.

Masa depan

Harus ada jalur pengembangan dari Nucleus SE ke Nucleus RTOS. Pengguna harus dapat dengan mudah mentransfer kode antar core. Lebih penting lagi, pengetahuan mereka juga harus ditransfer. Nucleus SE API secara efektif mengimplementasikan subset dari Nucleus RTOS API.

Biaya

Model bisnis harus menarik bagi semua pengguna potensial: pengembang perangkat 8/16-bit, mereka yang pertama kali menggunakan RTOS dan mereka yang baru mempelajari teknologinya sendiri. Dengan demikian, Nucleus SE tersedia secara bebas, benar-benar gratis untuk digunakan untuk tujuan komersial dan pendidikan; kode dapat digunakan dan dimodifikasi.

Target Pemirsa Inti SE

Hasil dari pendekatan ini adalah kernel yang dapat berguna untuk tiga jenis pengembang:

  • Pemrogram perangkat 8/16-bit yang membutuhkan kernel sederhana atau penjadwal tugas. Ini sangat menarik jika pengembang tertarik untuk memperoleh keterampilan tertentu untuk menggunakan RTOS atau dalam mengembangkan sistem yang menggunakan perangkat 32-bit lainnya di mana Nucleus RTOS dapat menjadi pilihan yang baik.
  • Pengembang aplikasi tertanam menggunakan perangkat 32-bit di mana kompleksitas perangkat lunak tidak sebanding dengan biaya RTOS komersial tradisional. Menggunakan Nucleus SE dapat bermanfaat dan akan memungkinkan pengembangan (hingga Nucleus RTOS) jika kompleksitas aplikasi meningkat.
  • Siswa dalam proses pembelajaran dapat menggunakan Nucleus SE sebagai dasar untuk belajar RTOS. Keterampilan yang diperoleh akan berguna nanti ketika mereka mulai bekerja.

Desain keputusan dan pertukaran

Untuk mencapai tujuan di atas, beberapa keputusan desain yang cermat harus dibuat. Detail akan dijelaskan nanti ketika kami mempertimbangkan fungsi tertentu, tetapi di sini adalah ringkasan singkat poin-poin utama.

Konfigurasi statis

Nucleus SE adalah RTOS statis, artinya semua keputusan konfigurasi dibuat saat membangun, bukan secara dinamis saat dijalankan. Ini memiliki banyak keuntungan, termasuk menyederhanakan struktur data dan mengurangi ukuran kode, sehingga tidak perlu memanggil fungsi create dan delete API. Untuk sebagian besar aplikasi, pembuatan objek dinamis tidak diperlukan.

Jumlah objek

Jumlah objek dari masing-masing jenis terbatas dalam aplikasi berbasis Nucleus SE. Itu bisa dari satu hingga enam belas tugas dan dari nol hingga enam belas jenis objek kernel. Ini menyederhanakan pengalamatan objek (lihat di bawah). Pembatasan ini tidak sulit untuk aplikasi kecil yang dimaksudkan untuk kernel.

Mengatasi objek

Objek ditangani menggunakan "indeks", yang dapat berkisar dari nol hingga lima belas. Dibandingkan dengan penggunaan pointer biasa, ini bisa lebih efisien pada prosesor yang lebih kecil dan memungkinkan lebih sedikit memori: indeks hanya membutuhkan 4 bit memori; Alamatnya 16-32 bit.

Perencana

Penjadwal milik area arsitektur kernel yang disederhanakan. Alih-alih menyediakan mekanisme yang fleksibel dengan kebijakan penjadwalan yang berbeda, empat jenis penjadwal terpisah tersedia di kernel; penjadwal khusus untuk aplikasi dipilih selama konfigurasi.

Fungsionalitas terbatas

Beberapa fitur yang tersedia di Nucleus RTOS tidak diimplementasikan di Nucleus SE. Dalam beberapa kasus, ini dilakukan untuk kesederhanaan. Dalam kasus lain, sedikit kehilangan fungsionalitas di satu area membuat fungsi lainnya lebih mudah diimplementasikan. Ketidakcocokan ini disorot dalam artikel yang relevan dalam seri.

Penggunaan memori

Karena Nucleus SE harus mendukung aplikasi memori yang terbatas, perhatian khusus telah diberikan kepada penggunaan memori. Seharusnya menggunakan "klasik" ROM dan RAM: ROM digunakan untuk kode dan data persisten; RAM - untuk menyimpan variabel, tumpukan, dll. Meskipun target tertentu mungkin memiliki skema yang berbeda, kode Nucleus SE cukup fleksibel; definisi (# definisi) ROM dan RAM digunakan untuk awalan semua struktur variabel dan data untuk menunjukkan lokasi mereka. Ini dapat dicapai dengan menggunakan alat.

Persyaratan utama adalah untuk menghindari penyalinan data yang tidak perlu dari ROM ke RAM, karena RAM mungkin tidak cukup. Mekanisme yang digunakan untuk mencapai hal ini dijelaskan di bagian Struktur Data pada artikel berikutnya.

Implementasi API

API untuk Nucleus SE diimplementasikan dengan cara tradisional: fungsi bahasa C mengimplementasikan setiap panggilan API. Panggilan-panggilan ini secara logis dikelompokkan. Meskipun panggilan API di Nucleus SE tidak persis sama dengan di Nucleus RTOS, fungsionalitas keseluruhan disimulasikan, dan pemetaan antara API mudah. Detail API Nucleus RTOS akan dimasukkan.

Bagian kritis

Kode untuk banyak panggilan fungsi API termasuk urutan instruksi yang memanipulasi data kernel. Secara umum, data mungkin dalam keadaan tidak valid selama pelaksanaan instruksi ini, jadi harus berhati-hati untuk menghindari gangguan. Atau, mungkin dilarang menjalankan kode dari tugas lain atau interrupt handler jika bisa mengakses data ini (saat ini tidak valid). Urutan instruksi seperti itu disebut bagian kritis.

Sepasang makro didefinisikan disebut NUSE_CS_Enter () dan NUSE_CS_Exit (). Semua kode fungsi Nucleus SE API menggunakannya untuk menjangkau bagian kritis, dengan demikian:

NUSE_CS_Enter ();
<kode tidak terputus>
NUSE_CS_Exit ();

Biasanya, makro ini akan diperluas menjadi instruksi penonaktifan instruksi interupsi dan masing-masing instruksi pengaktifan interupsi. Ini perlu diperiksa jika Nucleus SE diimplementasikan pada arsitektur prosesor yang berbeda. Informasi lebih lanjut tentang porting Nucleus SE akan dijelaskan dalam artikel berikutnya.

Skalabilitas

Seperti semua RTOS modern, Nucleus SE scalable. Untuk memastikan bahwa hanya komponen RTOS yang digunakan yang disertakan, semua fungsi API disajikan dalam bentuk pustaka. Dengan demikian, selama menghubungkan, fungsi yang direferensikan diekstraksi dan dimasukkan dalam gambar akhir aplikasi. Nucleus RTOS menggunakan pendekatan ini untuk kernel dan semua komponen OS lainnya. Nucleus SE menggunakan teknik yang berbeda.

Alih-alih mengandalkan perpustakaan di kotak alat yang dipilih, semua file sumber dalam distribusi Nucleus SE berisi arahan kompilasi bersyarat. Untuk mengkonfigurasi Nucleus SE untuk program ini, pengembang perlu menginstal beberapa karakter #define (lebih lanjut tentang ini di artikel berikutnya). Ini menentukan fungsi API mana yang dikompilasi dan karena itu termasuk dalam program.

Nucleus SE meningkatkan pendekatan ini dengan menawarkan objek yang saya sebut "skalabilitas ekstrim." Beberapa aspek fungsionalitas kernel dapat dihidupkan dan dimatikan, atau dikonfigurasi dengan cara lain menggunakan karakter #define yang serupa. Dengan demikian, pengembang memiliki titik kontrol atas penggunaan memori.

API yang mana?

Nucleus SE memiliki API sendiri, yang akan dijelaskan secara rinci di artikel mendatang. Bagi banyak pengguna, cukup memasukkan panggilan ini ke fungsi API dalam kode sudah cukup.

Beberapa pengguna mungkin lebih suka menggunakan API yang berbeda: baik standar atau yang mereka kenal. Nucleus SE API cukup fleksibel dan memungkinkan Anda membuat pembungkus yang mengubah antarmuka ke API lain.

Salah satu tujuan utama pengembangan Nucleus SE adalah tingkat kompatibilitas pengguna tingkat tinggi dengan Nucleus RTOS. Meskipun API berbeda, mereka dirancang agar mudah dicocokkan. Wrapper akan tersedia untuk memfasilitasi penggunaan Nucleus RTOS API pada Nucleus SE.

Pada artikel berikutnya, kami akan terus meninjau Nucleus SE dan fokus pada struktur internal dan penyebaran RTOS.

Source: https://habr.com/ru/post/id418601/


All Articles