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

Memori Partisi di Nucleus SE: Konfigurasi, API, dan Praktik Terbaik

Memori Partisi di Nucleus SE: Konfigurasi, API, dan Praktik TerbaikLihat seri RTOS Revealed

Partisi memori diperkenalkan dalam artikel kami sebelumnya, di mana kami membandingkannya dengan fungsi C konvensional malloc(). Partisi adalah blok memori berukuran tetap yang berasal dari kolam partisi, menawarkan alokasi dan dealokasi deterministik yang dapat diandalkan tugas.

Menggunakan Partisi

Di Nucleus SE, kolam partisi didefinisikan pada waktu kompilasi. Maksimal 16 kolam dapat dikonfigurasi per aplikasi. Jika tidak ada kolam yang didefinisikan, semua struktur data dan kode API terkait dihilangkan dari build, menjaga footprint minimal.

Kolam adalah area memori kontigu yang dibagi menjadi sejumlah partisi identik. Aplikasi mengontrol ukuran dan jumlah setiap kolam. Tugas meminta partisi dan menerima pointer ke bloknya. Tanggung jawab pemanggil adalah untuk tetap dalam batas yang dialokasikan. Partisi dapat dikembalikan ke kolam oleh setiap tugas melalui API dealokasi. Jika kolam habis, panggilan dapat mengembalikan kesalahan atau menangguhkan tugas, tergantung pada parameter API dan opsi build.

Mengonfigurasi Partisi Memori

Jumlah Kolam Partisi

Kolam partisi diaktifkan melalui pernyataan #define dalam nuse_config.h. Simbol kunci adalah NUSE_PARTITION_POOL_NUMBER, yang menetapkan jumlah kolam. Default-nya 0, yang berarti tidak ada kolam aktif. Nilai yang valid berkisar dari 1 hingga 16; nilai tidak valid memicu #error waktu kompilasi yang dihasilkan oleh nuse_config_check.h.

Mengatur nilai non-nol mengaktifkan struktur data yang diperlukan dan menginisialisasikannya di ROM. Ini juga membuka kunci simbol enable API yang dijelaskan di bawah ini.

API Enables

Setiap panggilan layanan memiliki makro enable dalam nuse_config.h. Untuk partisi, simbol berikut ada:

Secara default semuanya diatur ke FALSE, menghilangkan implementasi dari build. Untuk menggunakan fitur, setel makro yang sesuai ke TRUE. Mengaktifkan API sementara tidak ada kolam yang didefinisikan (kecuali NUSE_Partition_Pool_Count()) menghasilkan kesalahan waktu kompilasi. Menggunakan API yang tidak diaktifkan menyebabkan kesalahan waktu link.

Memori Partisi di Nucleus SE: Konfigurasi, API, dan Praktik Terbaik

Panggilan Layanan Kolam Partisi

Nucleus RTOS menawarkan tujuh panggilan layanan untuk kolam partisi. Di Nucleus SE, hanya API alokasi dan dealokasi inti yang diimplementasikan. Tabel di bawah ini mencantumkan setiap panggilan, status implementasinya, dan deskripsi singkat:

APIImplementasiDeskripsi
NU_Allocate_Partition()DiimplementasikanAlokasikan partisi.
NU_Deallocate_Partition()DiimplementasikanBebaskan partisi.
NU_Partition_Pool_Information()DiimplementasikanAmbil metadata kolam.
NU_Established_Partition_Pools()DiimplementasikanHitung kolam aktif.
NU_Create_Partition_Pool()Tidak diimplementasikanPembuatan kolam dinamis.
NU_Delete_Partition_Pool()Tidak diimplementasikanPenghapusan kolam dinamis.
NU_Partition_Pool_Pointers()Tidak diimplementasikanKembalikan pointer kolam.

Perhatikan bahwa baik Nucleus RTOS maupun SE tidak menyediakan rutina reset untuk kolam partisi. Pilihan desain ini mencerminkan kasus penggunaan umum di mana sebuah tugas mengalokasikan partisi dan menyerahkan pointer-nya ke tugas lain yang akan akhirnya melepasnya. Mereset kolam akan secara diam-diam menandai semua partisi sebagai bebas, melanggar kontrak tingkat tugas.

Layanan Alokasi dan Dealokasi

Operasi inti adalah:

API Alokasi Nucleus RTOS

Prototipe:

STATUS NU_Allocate_Partition(NU_PARTITION_POOL *pool, VOID **return_pointer, UNSIGNED suspend); 

Nilai pengembalian termasuk NU_SUCCESS, NU_NO_PARTITION, NU_INVALID_POOL, NU_INVALID_POINTER, NU_INVALID_SUSPEND, NU_TIMEOUT, dan NU_POOL_DELETED.

API Alokasi Nucleus SE

Prototipe:

STATUS NUSE_Partition_Allocate(NUSE_PARTITION_POOL pool, ADDR *return_pointer, U8 suspend); 

Parameter:

Kode pengembalian mencerminkan yang RTOS tetapi diawali dengan NUSE_. Permintaan penangguhan yang tidak valid dari thread non-tugas atau ketika API pemblokiran dinonaktifkan menghasilkan NUSE_INVALID_SUSPEND.

Untuk walkthrough implementasi lengkap, lihat artikel berikutnya dalam seri RTOS Revealed.

Tertanam

  1. Baja Stainless Dijelaskan: Komposisi, Produksi, dan Dampak Global
  2. Dasar-Dasar Memori Digital: Alamat, Akses, dan Volatilitas
  3. Dasar-Dasar C#: Esensial Input dan Output
  4. Menguasai Manajemen Memori C++: Penggunaan Ahli new dan delete
  5. Kotak Surat dalam Nucleus SE: Panduan Praktis Konfigurasi dan Penggunaan
  6. Semafor dalam Nucleus RTOS: Layanan Utilitas & Struktur Data
  7. Semafor dalam Nucleus SE: Ringkasan, Konfigurasi, dan Esensial API
  8. Grup Flag Event di Nucleus SE: Panduan Pengantar untuk Konfigurasi dan Penggunaan API
  9. Antrian di Nucleus SE: Pengantar dan Panggilan Layanan Inti
  10. Rutronik Menjadi Distributor Eksklusif AP Memory IoT RAM di Eropa