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

Semaphores:layanan utilitas dan struktur data


Lihat seri Terungkap RTOS

Artikel ini melanjutkan pembahasan tentang semaphore.

Layanan Utilitas Semaphore

Nucleus RTOS memiliki empat panggilan API yang menyediakan fungsi utilitas yang terkait dengan semaphore:reset semaphore, mengembalikan informasi tentang semaphore, mengembalikan nomor semaphore dalam aplikasi dan mengembalikan pointer ke semua semaphore dalam aplikasi. Tiga yang pertama diimplementasikan di Nucleus SE.

Menyetel Ulang Semafor

Panggilan API ini mengembalikan semaphore ke keadaan awal yang tidak digunakan. Fungsi API ini tidak biasa, dibandingkan dengan yang tersedia untuk objek kernel lainnya, karena, meskipun ini adalah reset, ia tidak hanya menginisialisasi penghitungnya ke nilai awal; hitungan awal baru disediakan dalam panggilan. Setiap tugas yang ditangguhkan pada semaphore dilanjutkan dan menerima kode pengembalian NUSE_SEMAPHORE_WAS_RESET (di Nucleus SE, atau NU_SEMAPHORE_RESET dengan Nucleus RTOS).

Panggilan Nucleus RTOS API untuk Menyetel Ulang Semaphore

Prototipe panggilan layanan:

STATUS NU_Reset_Semaphore(NU_SEMAPHORE  *semaphore,
jumlah_inisial TIDAK DITANDATANGANI);

Parameter:

semafor – penunjuk ke blok kontrol semaphore yang disediakan pengguna

jumlah_awal – nilai di mana penghitung semaphore akan disetel

Pengembalian:

NU_SUCCESS – panggilan berhasil diselesaikan

NU_INVALID_SEMAPHORE – penunjuk semaphore tidak valid

Panggilan Nucleus SE API untuk Menyetel Ulang Semaphore

Panggilan API ini mendukung fungsionalitas utama dari Nucleus RTOS API.

Prototipe panggilan layanan:

STATUS NUSE_Semaphore_Reset(NUSE_SEMAPHORE semaphore,
U8 initial_count);

Parameter:

semafor – indeks (ID) semaphore yang akan direset

jumlah_awal – nilai di mana penghitung semaphore akan disetel

Pengembalian:

NUSE_SUCCESS – panggilan berhasil diselesaikan

NUSE_INVALID_SEMAPHORE – indeks semaphore tidak valid

Implementasi Nucleus SE dari Semaphore Reset

Tugas utama NUSE_Semaphore_Reset() Fungsi API – setelah pemeriksaan parameter – adalah dengan menyetel entri yang sesuai di NUSE_Semaphore_Counter[] ke nilai awal yang diberikan.

Saat pemblokiran diaktifkan, kode lebih lanjut diperlukan untuk membuka blokir tugas:

sementara (NUSE_Semaphore_Blocking_Count[semaphore] !=0){ indeks U8; /* periksa apakah ada tugas yang diblokir */ /* pada semaphore ini */ for (index=0; index 

Setiap tugas yang ditangguhkan di semaphore ditandai sebagai "siap" dengan kode pengembalian penangguhan NUSE_SEMAPHORE_WAS_RESET . Setelah proses ini selesai, jika penjadwal Prioritas sedang digunakan, panggilan dilakukan ke NUSE_Reschedule() , karena satu atau beberapa tugas dengan prioritas lebih tinggi mungkin telah disiapkan dan perlu diizinkan untuk dijalankan.

Informasi Semafor

Panggilan layanan ini memperoleh pilihan informasi tentang semaphore. Implementasi Nucleus SE berbeda dari Nucleus RTOS dalam hal mengembalikan lebih sedikit informasi, karena penamaan objek dan penangguhan pemesanan tidak didukung dan penangguhan tugas mungkin tidak diaktifkan.

Panggilan API Nucleus RTOS untuk Informasi Semaphore

Prototipe panggilan layanan:

STATUS NU_Semaphore_Information(NU_SEMAPHORE *semaphore,
CHAR *nama, UNSIGNED *current_count, OPTION *suspend_type,
UNSIGNED *tasks_waiting, NU_TASK **first_task);

Parameter:

semafor – pointer ke atas blok kontrol semaphore tentang informasi mana yang diminta

nama – penunjuk ke area tujuan 8 karakter untuk nama semaphore; ini termasuk ruang untuk terminator nol

jumlah_saat ini – penunjuk ke variabel, yang akan menerima nilai penghitung semaphore saat ini

suspend_type – penunjuk ke variabel yang menyimpan tipe penangguhan tugas; jenis penangguhan tugas yang valid adalah NU_FIFO dan NU_PRIORITY

tugas_menunggu – penunjuk ke variabel yang akan menerima jumlah tugas yang ditangguhkan pada semaphore ini

tugas_pertama – penunjuk ke variabel bertipe NU_TASK yang akan menerima penunjuk ke blok kontrol dari tugas pertama yang ditangguhkan

Pengembalian:

NU_SUCCESS – panggilan berhasil diselesaikan

NU_INVALID_SEMAPHORE – penunjuk semaphore tidak valid

Panggilan API Nucleus SE untuk Informasi Semaphore

Panggilan API ini mendukung fungsionalitas utama dari Nucleus RTOS API.

Prototipe panggilan layanan:

STATUS NUSE_Semaphore_Information(NUSE_SEMAPHORE semaphore,
U8 *jumlah_saat ini, U8 *tugas_menunggu, NUSE_TASK *tugas_pertama);

Parameter:

semafor – indeks semaphore tentang informasi mana yang diminta

jumlah_saat ini – penunjuk ke variabel, yang akan menerima nilai penghitung semaphore saat ini

tugas_menunggu – penunjuk ke variabel yang akan menerima jumlah tugas yang ditangguhkan pada semaphore ini (tidak ada yang dikembalikan jika penangguhan tugas dinonaktifkan)

tugas_pertama – penunjuk ke variabel bertipe NUSE_TASK yang akan menerima indeks tugas yang ditangguhkan pertama (tidak ada yang dikembalikan jika penangguhan tugas dinonaktifkan)

Pengembalian:

NUSE_SUCCESS – panggilan berhasil diselesaikan

NUSE_INVALID_SEMAPHORE – indeks semaphore tidak valid

NUSE_INVALID_POINTER – satu atau lebih parameter penunjuk tidak valid

Implementasi Nucleus SE dari Informasi Semaphore

Implementasi panggilan API ini cukup mudah:

NUSE_CS_Enter(); *current_count =NUSE_Semaphore_Counter[semaphore];#jika NUSE_BLOCKING_ENABLE *tasks_waiting =NUSE_Semaphore_Blocking_Count[semaphore]; if (NUSE_Semaphore_Blocking_Count[semaphore] !=0) { indeks U8; for (indeks=0; indeks

Fungsi mengembalikan status semaphore. Kemudian, jika pemblokiran panggilan API diaktifkan, jumlah tugas menunggu dan indeks yang pertama akan dikembalikan (jika tidak, kedua parameter ini disetel ke 0).

Mendapatkan Jumlah Semaphore

Panggilan layanan ini mengembalikan jumlah semaphore yang dikonfigurasi dalam aplikasi. Sementara di Nucleus RTOS ini akan bervariasi dari waktu ke waktu dan nilai yang dikembalikan akan mewakili jumlah semaphore saat ini, di Nucleus SE nilai yang dikembalikan diatur pada waktu pembuatan dan tidak dapat diubah.

Panggilan API Nucleus RTOS untuk Jumlah Semaphore

Prototipe panggilan layanan:

UNSIGNED NU_Established_Semaphores(VOID);

Parameter:

Tidak ada

Pengembalian:

Jumlah semaphore yang dibuat dalam aplikasi

Panggilan API Nucleus SE untuk Jumlah Semaphore

Panggilan API ini mendukung fungsionalitas utama dari Nucleus RTOS API.

Prototipe panggilan layanan:

U8 NUSE_Semaphore_Count(void);

Parameter:

Tidak ada

Pengembalian:

Jumlah semaphore yang dikonfigurasi dalam aplikasi

Implementasi Nucleus SE dari Hitung Semaphore

Implementasi panggilan API ini hampir sederhana:nilai #define simbol NUSE_SEMAPHORE_NUMBER dikembalikan.

Lanjut ke halaman dua:“Struktur Data”>>


Tertanam

  1. Pro Dan Kontra Layanan Cloud Versus In House
  2. Token Blockchain dan Layanan Manajemen Data Microsoft Azure
  3. Istilah dan Konsep Memori Digital
  4. Variabel C# dan Tipe Data (Primitif)
  5. Struktur dan kelas dalam C++
  6. Kotak Surat:pengenalan dan layanan dasar
  7. Semaphores:pengenalan dan layanan dasar
  8. Grup tanda peristiwa:layanan utilitas dan struktur data
  9. Grup bendera acara:pengenalan dan layanan dasar
  10. Antrian:pengenalan dan layanan dasar