Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Tertanam

Kotak Surat dalam Nucleus SE: Panduan Praktis Konfigurasi dan Penggunaan

Kotak Surat dalam Nucleus SE: Panduan Praktis Konfigurasi dan Penggunaan
Lihat seri RTOS Revealed

Kotak surat diperkenalkan dalam artikel sebelumnya sebagai salah satu mekanisme komunikasi antar tugas paling sederhana dalam Nucleus SE—tepat setelah sinyal. Mereka menawarkan cara yang hemat biaya dan sangat fleksibel untuk mentransfer data sederhana antara tugas.

Menggunakan Kotak Surat

Dalam Nucleus SE, kotak surat didefinisikan pada waktu build. Maksimal 16 kotak surat dapat dikonfigurasi per aplikasi. Jika Anda mengonfigurasi nol kotak surat, compiler menghilangkan semua struktur data dan kode API terkait, menjaga binary tetap ringan.

Sebuah kotak surat esensialmente adalah slot penyimpanan yang dapat menampung satu variabel tipe ADDR. Hanya satu tugas yang dapat menulis ke kotak surat pada satu waktu. Setelah penuh, upaya menulis berikutnya akan gagal sampai kotak surat dibaca atau di-reset. Bergantung pada opsi API, upaya menulis ke kotak surat yang penuh mungkin mengembalikan kesalahan atau menunda tugas sampai ruang tersedia.

Kotak Surat vs Antrian

Beberapa sistem operasi mengganti kotak surat dengan antrian satu entri. Sementara antrian dapat meniru perilaku kotak surat, itu membawa overhead tambahan—pointer head dan tail, struktur data yang lebih besar, dan lebih banyak jalur kode—yang mengarah pada penggunaan memori dan waktu eksekusi yang lebih tinggi.

Dalam Nucleus SE, Anda dapat memilih antara kotak surat atau antrian. Jika desain Anda menggunakan banyak antrian tetapi hanya beberapa kotak surat, menukar kotak surat dengan antrian akan meningkatkan ukuran data sedikit tetapi menghapus kode API khusus kotak surat, menyederhanakan pemeliharaan. Mudah untuk menguji kedua konfigurasi untuk membandingkan jejak memori dan kinerja.

Antrian akan dibahas dalam artikel mendatang.

Mengonfigurasi Kotak Surat

Jumlah Kotak Surat

Makro kunci dalam nuse_config.h adalah NUSE_MAILBOX_NUMBER. Nilai default adalah 0, yang berarti tidak ada kotak surat yang diaktifkan. Anda dapat menetapkannya ke bilangan bulat antara 1 dan 16. Pemeriksaan waktu kompilasi dalam nuse_config_check.h akan memicu kesalahan jika nilai di luar rentang.

Menetapkan nilai non-nol mengaktifkan subsistem kotak surat: struktur data diukur, dan simbol yang mengaktifkan API diproses.

API Enables

Setiap panggilan API kotak surat memiliki #define yang sesuai dalam nuse_config.h:

Secara default semuanya diatur ke FALSE, menonaktifkan panggilan dan implementasinya. Untuk menggunakan API, aktifkan makro yang sesuai dengan mengatur ke TRUE. Mengaktifkan API tanpa ada kotak surat yang dikonfigurasi akan menyebabkan kesalahan waktu kompilasi (kecuali NUSE_Mailbox_Count(), yang selalu tersedia). Menggunakan API yang dinonaktifkan akan menghasilkan kesalahan waktu link.

/* Jumlah kotak surat dalam sistem – 0-16 */ #define NUSE_MAILBOX_NUMBER 0 /* Pengaktif panggilan layanan: */ #define NUSE_MAILBOX_SEND FALSE #define NUSE_MAILBOX_RECEIVE FALSE #define NUSE_MAILBOX_RESET FALSE #define NUSE_MAILBOX_INFORMATION FALSE #define NUSE_MAILBOX_COUNT FALSE 

Panggilan Layanan Kotak Surat

Nucleus SE menawarkan sembilan panggilan layanan terkait kotak surat. Yang diimplementasikan dalam SE adalah:

Fungsi lain seperti pembuatan, penghapusan, pengambilan massal, dan siaran tidak diimplementasikan dalam SE.

Operasi Tulis dan Baca

Kotak surat mendukung dua operasi inti: mengirim (menulis) dan menerima (membaca). Keduanya API tersedia dalam Nucleus RTOS dan Nucleus SE, dengan beberapa perbedaan dalam fleksibilitas dan penanganan kesalahan.

Mengirim ke Kotak Surat

Dalam Nucleus RTOS panggilan NU_Send_To_Mailbox mendukung penangguhan tidak terbatas atau bertimed jika kotak surat penuh. Nucleus SE menawarkan versi yang disederhanakan: penangguhan opsional dan timeout tidak didukung.

Contoh prototipe untuk Nucleus SE:

STATUS NUSE_Mailbox_Send(NUSE_MAILBOX mailbox, ADDR *message, U8 suspend);

Parameter:

Nilai kembali termasuk NUSE_SUCCESS, NUSE_INVALID_MAILBOX, NUSE_MAILBOX_FULL, dan NUSE_MAILBOX_WAS_RESET.

Ringkasan Implementasi

Ketika blokir dinonaktifkan, rutin memeriksa flag status kotak surat. Jika kotak surat kosong, ia menulis data dan menandai kotak surat sebagai penuh; jika tidak, ia mengembalikan NUSE_MAILBOX_FULL.

Dengan blokir diaktifkan, kode berulang sampai pesan berhasil diposting atau tugas dibangunkan oleh operasi terima. Jika tugas tertunda pada kotak surat, ia akan segera dilanjutkan setelah pengiriman yang berhasil.

Cuplikan berikut menunjukkan logika inti saat blokir diaktifkan (disederhanakan untuk keterbacaan):

do { if (!NUSE_Mailbox_Status[mailbox]) { // Kotak surat kosong – simpan data dan bangun tugas yang menunggu jika ada. } else if (suspend == NUSE_NO_SUSPEND) { return NUSE_MAILBOX_FULL; } else { // Menunda tugas sampai kotak surat menjadi kosong. } } while (suspend == NUSE_SUSPEND); 

Dalam rangkuman, API kotak surat menyeimbangkan kesederhanaan dan fleksibilitas, memungkinkan pengembang untuk memilih antara kegagalan segera atau penangguhan tugas berdasarkan kebutuhan waktu aplikasi mereka.

Tertanam

  1. Cam Locks Dijelaskan: Cara Mengamankan Lemari dengan Discret
  2. Apa Itu Eye Screws? Panduan Profesional tentang Desain dan Penggunaan
  3. Memahami Grommet: Jenis, Penggunaan, dan Cara Melindungi Peralatan Anda
  4. Baja Stainless Dijelaskan: Komposisi, Produksi, dan Dampak Global
  5. COVID-19 dan Cloud: Bagaimana Penyedia Utama Memberdayakan Bisnis Selama Pandemi
  6. Dasar-Dasar C#: Esensial Input dan Output
  7. Semafor dalam Nucleus RTOS: Layanan Utilitas & Struktur Data
  8. Semafor dalam Nucleus SE: Ringkasan, Konfigurasi, dan Esensial API
  9. Menguasai Grup Flag Event: Layanan Utilitas & Struktur Data di Nucleus RTOS/SE
  10. Grup Flag Event di Nucleus SE: Panduan Pengantar untuk Konfigurasi dan Penggunaan API