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

Grup bendera acara:pengenalan dan layanan dasar


Lihat seri Terungkap RTOS

Grup bendera acara diperkenalkan di artikel sebelumnya. Di Nucleus SE, mereka agak mirip dengan sinyal, tetapi dengan fleksibilitas yang lebih besar. Mereka menyediakan sarana berbiaya rendah, tetapi fleksibel, untuk menyampaikan pesan sederhana di antara tugas-tugas.

Menggunakan Bendera Acara

Di Nucleus SE, flag event dikonfigurasi pada waktu build. Mungkin ada maksimum 16 grup bendera peristiwa yang dikonfigurasi untuk suatu aplikasi. Jika tidak ada grup bendera peristiwa yang dikonfigurasi, tidak ada struktur data atau kode panggilan layanan yang terkait dengan grup bendera peristiwa yang disertakan dalam aplikasi.

Grup bendera peristiwa hanyalah satu set delapan bendera 1-bit, akses yang dikontrol sehingga dapat digunakan dengan aman oleh banyak tugas. Satu tugas dapat mengatur atau menghapus kombinasi tanda peristiwa apa pun. Tugas lain dapat membaca grup bendera acara kapan saja atau mungkin menunggu (melakukan polling atau ditangguhkan) untuk pola bendera tertentu.

Mengonfigurasi Grup Bendera Acara

Jumlah Grup Bendera Acara

Seperti sebagian besar aspek Nucleus SE, konfigurasi grup bendera peristiwa terutama dikendalikan oleh #define pernyataan di nuse_config.h . Setelan kuncinya adalah NUSE_EVENT_GROUP_NUMBER , yang menentukan berapa banyak grup bendera peristiwa yang dikonfigurasi untuk aplikasi. Pengaturan default adalah 0 (yaitu tidak ada grup bendera peristiwa yang digunakan) dan Anda dapat mengaturnya ke nilai apa pun hingga 16. Nilai yang salah akan menghasilkan kesalahan waktu kompilasi, yang dihasilkan oleh pengujian di nuse_config_check. h (ini termasuk dalam nuse_config.c dan karenanya dikompilasi dengan modul ini) menghasilkan #error pernyataan sedang dikompilasi.

Memilih nilai bukan nol adalah "pengaktifan utama" untuk grup bendera peristiwa. Ini menghasilkan beberapa struktur data yang ditentukan dan ukurannya sesuai, yang lebih banyak lagi nanti dalam seri ini. Ini juga mengaktifkan pengaturan pengaktifan API.

API Diaktifkan

Setiap fungsi API (panggilan layanan) di Nucleus SE memiliki #define enabling yang memungkinkan simbol di nuse_config.h . Untuk grup bendera acara, ini adalah:

NUSE_EVENT_GROUP_SET NUSE_EVENT_GROUP_RETRIEVE NUSE_EVENT_GROUP_INFORMATION NUSE_EVENT_GROUP_COUNT 

Secara default, semua ini disetel ke FALSE , sehingga menonaktifkan setiap panggilan layanan dan menghambat penyertaan kode implementasi apa pun. Untuk mengonfigurasi grup tanda peristiwa untuk aplikasi, Anda harus memilih panggilan API yang ingin Anda gunakan dan menyetel simbol pengaktifnya ke TRUE .

Berikut ini adalah ekstrak dari nuse_config.h default berkas.

#define NUSE_EVENT_GROUP_NUMBER 0 /* Jumlah grup acara  dalam sistem - 0-16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Pengaktif panggilan layanan */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Pengaktif panggilan layanan */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Pengaktif panggilan layanan */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Pengaktif panggilan layanan */ 

Kesalahan waktu kompilasi akan terjadi jika fungsi API grup bendera peristiwa diaktifkan dan tidak ada grup bendera peristiwa yang dikonfigurasi (kecuali untuk NUSE_Event_Group_Count() yang selalu diizinkan). Jika kode Anda menggunakan panggilan API, yang belum diaktifkan, kesalahan waktu tautan akan terjadi, karena tidak ada kode implementasi yang disertakan dalam aplikasi.

Panggilan Layanan Bendera Acara

Nucleus RTOS mendukung tujuh panggilan layanan yang terkait dengan flag peristiwa, yang menyediakan fungsionalitas berikut:

Implementasi dari setiap panggilan layanan ini diperiksa secara mendetail.

Perlu dicatat bahwa tidak ada fungsi reset yang disediakan (baik di Nucleus RTOS atau Nucleus SE). Ini disengaja. Reset menyiratkan kondisi khusus yang berlaku. Untuk grup bendera peristiwa, satu-satunya kondisi "khusus" adalah semua nol, yang dapat diatur dengan NUSE_Event_Group_Set() .

Pengaturan Grup Bendera Acara dan Layanan Pengambilan

Operasi fundamental, yang dapat dilakukan pada grup flag event, adalah mengatur satu atau lebih flag dan mengambil status flag saat ini. Nucleus RTOS dan Nucleus SE masing-masing menyediakan dua panggilan API dasar untuk operasi ini, yang akan dibahas di sini.

Karena flag event adalah bit, mereka paling baik divisualisasikan sebagai bilangan biner. Karena standar C tidak mendukung representasi konstanta biner (hanya oktal dan heksadesimal), distribusi Nucleus SE menyertakan file header yang berguna – nuse_binary.h – yang berisi #define simbol bentuk b01010101 untuk semua 256 nilai 8-bit.

Menyetel Bendera Acara

Panggilan Nucleus RTOS API untuk menyetel tanda peristiwa sangat fleksibel, memungkinkan Anda menyetel dan menghapus tanda peristiwa menggunakan DAN dan ATAU operasi. Nucleus SE menyediakan layanan yang sama, kecuali penangguhan tugas bersifat opsional.

Panggilan API Nucleus RTOS untuk Pengaturan Bendera

Prototipe panggilan layanan:

STATUS NU_Set_Events(NU_EVENT_GROUP *grup, event_flags UNSIGNED,
                     operasi OPSI);

Parameter:

grup – penunjuk ke blok kontrol grup bendera peristiwa yang disediakan pengguna

event_flags – nilai bit dari pola flag yang akan dioperasikan

operasi - operasi yang akan dilakukan; mungkin NU_OR (untuk menyetel bendera) atau NU_AND (untuk menghapus bendera)

Pengembalian:

NU_SUCCESS – panggilan berhasil diselesaikan

NU_INVALID_GROUP – penunjuk grup bendera acara tidak valid

NU_INVALID_OPERATION – operasi yang ditentukan bukan NU_OR atau NU_AND

Panggilan API Nucleus SE untuk Pengaturan Bendera

Panggilan API ini mendukung fungsionalitas utama dari Nucleus RTOS API.

Prototipe panggilan layanan:

STATUS NUSE_Event_Group_Set(grup NUSE_EVENT_GROUP,
U8 event_flags, operasi OPTION);

Parameter:

grup – indeks (ID) grup acara di mana flag akan disetel/dihapus

event_flags – nilai bit dari pola flag yang akan dioperasikan

operasi - operasi yang akan dilakukan; mungkin NUSE_OR (untuk menyetel tanda) atau NUSE_AND (untuk menghapus bendera)

Pengembalian:

NUSE_SUCCESS – panggilan berhasil diselesaikan

NUSE_INVALID_GROUP – indeks grup bendera acara tidak valid

NUSE_INVALID_OPERATION – operasi yang ditentukan bukan NUSE_OR atau NUSE_AND

Implementasi Nucleus SE dari Bendera Peristiwa yang Ditetapkan

Kode awal NUSE_ Event_Group_Set() Fungsi API – setelah pemeriksaan parameter – adalah umum, baik dukungan untuk memblokir (penangguhan tugas) panggilan API diaktifkan atau tidak. Logikanya cukup sederhana:

NUSE_CS_Enter();if (operasi ==NUSE_OR){ NUSE_Event_Group_Data[group] |=event_flags;}else /* NUSE_AND */{ NUSE_Event_Group_Data[group] &=event_flags;} 

Pola bit, event_flags , hanya ORed atau AND ke grup flag event yang ditentukan.

Kode yang tersisa hanya disertakan jika pemblokiran tugas diaktifkan:

#jika NUSE_BLOCKING_ENABLE  while (NUSE_Event_Group_Blocking_Count[group] !=0)  {  indeks U8; /* periksa apakah ada tugas yang diblokir */  /* di grup acara ini */  untuk (indeks=0; indeks  {  jika ((LONIB(NUSE_Task_Status[index]) ==  NUSE_EVENT_SUSPEND)  &&(HINIB(NUSE_Task_Status[index]) ==grup))  {  NUSE_Task_Blocking_Return[indeks] =NUSE_SUCCESS;  NUSE_Task_Status[index] =NUSE_READY;  istirahat;  }  }  NUSE_Event_Group_Blocking_Count[group]--;  }  #jika NUSE_SCHEDULER_TYPE ==NUSE_PRIORITY_SCHEDULER  NUSE_Reschedule(NUSE_NO_TASK);  #endif #endif NUSE_CS_Exit(); kembalikan NUSE_SUCCESS; 

Jika ada tugas yang ditangguhkan pada (mengambil dari) grup bendera acara ini, semuanya akan dilanjutkan. Ketika mereka memiliki kesempatan untuk mengeksekusi, yang bergantung pada penjadwal, mereka dapat menentukan apakah persyaratan pengembalian mereka telah dipenuhi – lihat Mengambil Bendera Peristiwa di bawah.

Lanjutkan ke halaman dua>>


Tertanam

  1. Pengantar Kunci Cam dan Cara Kerjanya
  2. Pengantar Sekrup Mata dan Cara Kerjanya
  3. Pengantar Grommet dan Cara Kerjanya
  4. Pengantar Baja Tahan Karat dan Cara Pembuatannya
  5. C# Input dan Output Dasar
  6. Kotak Surat:pengenalan dan layanan dasar
  7. Semaphores:layanan utilitas dan struktur data
  8. Semaphores:pengenalan dan layanan dasar
  9. Grup tanda peristiwa:layanan utilitas dan struktur data
  10. Antrian:pengenalan dan layanan dasar