Bisakah kita menggunakan static dan volatile bersama di C?
Bisakah kita menggunakan static dan volatile bersama di C?

Video: Bisakah kita menggunakan static dan volatile bersama di C?

Video: Bisakah kita menggunakan static dan volatile bersama di C?
Video: Can We Use Volatile and Const Together | Embedded C FAQ Interview Questions 2024, April
Anonim

Statis variabel mempertahankan nilainya di antara pemanggilan fungsi. Lincah variabel (yang bukan kebalikan dari statis ) adalah digunakan ketika sebuah variabel adalah digunakan baik di dalam ISR (interrupt service routine) maupun di luarnya. Lincah memberitahu kompiler untuk selalu memuat variabel dari RAM daripada menyimpannya di CPUregister.

Demikian pula orang mungkin bertanya, dapatkah kita menggunakan static dan volatile bersama-sama?

Bahkan jika Anda akses ke statis nilai melalui beberapa utas, setiap utas bisa memiliki salinan cache lokalnya! Untuk menghindari ini kamu bisa mendeklarasikan variabel sebagai volatil statis dan ini akan memaksa utas untuk membaca setiap kali nilai global. Namun, lincah bukan pengganti sinkronisasi yang tepat!

Demikian pula, mengapa kita menggunakan volatile di C? C tidak stabil kata kunci adalah kualifikasi yang diterapkan ke variabel saat dideklarasikan. Ini memberi tahu kompiler bahwa nilai variabel dapat berubah setiap saat - tanpa tindakan apa pun yang diambil oleh kode yang ditemukan kompiler di dekatnya. Implikasinya cukup serius.

Mempertimbangkan ini, apa artinya static volatile dalam C?

statis mengacu pada ruang lingkup variabel. Jika variabel bersifat global, artinya ruang lingkupnya terbatas pada file sumber yang dideklarasikan. Jika variabel bersifat lokal untuk suatu fungsi, maka itu berarti memori yang digunakan untuk menyimpan variabel ini ada di memori aplikasi yang dialokasikan secara statis.

Bisakah kita menggunakan const dengan volatile di C?

Ya. Sebuah variabel bisa dinyatakan sebagai keduanya lincah dan konstan di dalam C . konstanta pengubah tidak mengizinkan perubahan nilai variabel oleh program internal. Namun bukan berarti nilai konstan variabel tidak boleh diubah oleh kode eksternal.

Direkomendasikan: