Grup flag event menyediakan mekanisme ringan dan fleksibel untuk komunikasi antar-tugas di Nucleus SE, mirip dengan sinyal tetapi dengan fungsionalitas yang lebih kaya.
Menggunakan Flag Event
Di Nucleus SE, flag event dikonfigurasi pada waktu build. Maksimal 16 grup dapat didefinisikan. Jika tidak ada yang dikonfigurasi, RTOS menghilangkan semua struktur data dan kode API terkait.
Mengonfigurasi Grup Flag Event
Jumlah Grup Flag Event
Konfigurasi dikendalikan oleh direktif #define dalam nuse_config.h. Makro kunci NUSE_EVENT_GROUP_NUMBER menentukan berapa banyak grup yang akan digunakan aplikasi (default 0). Nilai di atas 16 atau nilai negatif memicu #error waktu kompilasi yang dihasilkan oleh nuse_config_check.h.
Mengatur nilai non-nol mengaktifkan subsistem flag-event: struktur data dialokasikan dan enable API dipertimbangkan.
API Enables
Setiap panggilan layanan memiliki makro enable dalam nuse_config.h:
Secara default semuanya FALSE, menonaktifkan fungsi yang sesuai. Untuk menggunakan API, setel makro yang diinginkan ke TRUE. Ketidakcocokan (mengaktifkan API sementara NUSE_EVENT_GROUP_NUMBER adalah 0) menyebabkan kesalahan waktu kompilasi, kecuali untuk NUSE_Event_Group_Count(), yang selalu tersedia.
Contoh cuplikan dari nuse_config.h default:
#define NUSE_EVENT_GROUP_NUMBER 0 /* Jumlah grup event – 0-16 */ #define NUSE_EVENT_GROUP_SET FALSE /* Enabler panggilan layanan */ #define NUSE_EVENT_GROUP_RETRIEVE FALSE /* Enabler panggilan layanan */ #define NUSE_EVENT_GROUP_INFORMATION FALSE /* Enabler panggilan layanan */ #define NUSE_EVENT_GROUP_COUNT FALSE /* Enabler panggilan layanan */
Jika kode Anda merujuk ke API yang tidak diaktifkan, pem-link akan menghasilkan kesalahan karena implementasi dihilangkan.
Panggilan Layanan Flag Event
Nucleus SE menawarkan tujuh panggilan layanan terkait flag event, meskipun hanya empat yang diimplementasikan:
NUSE_Event_Group_Set() – mengatur atau menghapus flag.
NUSE_Event_Group_Retrieve() – membaca status flag saat ini.
NUSE_Event_Group_Information() – kueri status grup.
NUSE_Event_Group_Count() – memperoleh jumlah grup yang dikonfigurasi.
Pembuatan, penghapusan, dan enumerasi grup tidak diimplementasikan di SE.
Tidak ada fungsi reset khusus; grup dapat di-reset ke semua nol menggunakan NUSE_Event_Group_Set() dengan operasi OR pada mask flag nol.
Operasi Set dan Retrieve
Karena flag event adalah bit, mereka paling baik diekspresikan sebagai nilai biner. Nucleus SE menyediakan nuse_binary.h, yang mendefinisikan makro seperti b01010101 untuk setiap pola 8-bit.
Mengatur Flag Event
Kedua RTOS dan SE mengekspos API yang serupa. Prototipe RTOS adalah:
STATUS NU_Set_Events(NU_EVENT_GROUP *group, UNSIGNED event_flags, OPTION operation);
Parameter:
group – pointer ke blok kontrol flag-event.
event_flags – bitmask flag yang akan dimanipulasi.
operation – NU_OR (set) atau NU_AND (clear).
Nilai pengembalian:
NU_SUCCESS
NU_INVALID_GROUP
NU_INVALID_OPERATION
Setara SE adalah:
STATUS NUSE_Event_Group_Set(NUSE_EVENT_GROUP group, U8 event_flags, OPTION operation);
Parameter dan kode pengembalian mencerminkan versi RTOS, dengan NUSE_SUCCESS, NUSE_INVALID_GROUP, dan NUSE_INVALID_OPERATION.
Highlight Implementasi
Rutina inti memeriksa operation dan menerapkan mask:
Ketika pemblokiran diaktifkan (NUSE_BLOCKING_ENABLE), fungsi mengulang semua tugas, membangunkan yang tertangguhan pada grup ini, dan memperbarui counter pemblokiran. Setelah itu, reschedule dapat terjadi jika scheduler prioritas aktif.
Tugas yang tertangguhan melanjutkan setelah status flag berubah, memungkinkan mereka mengevaluasi kondisi tunggu mereka.