Toshkent axborot texnologiyalari universiteti samarqand filiali kompyuter tizimlari kafedrasi


Sinxronizatsiya uchun ishlatiladigan ikkilik semaforlar



Yüklə 153,03 Kb.
səhifə12/13
tarix26.04.2023
ölçüsü153,03 Kb.
#102908
1   ...   5   6   7   8   9   10   11   12   13
mus ish

Sinxronizatsiya uchun ishlatiladigan ikkilik semaforlar
Agar uzilishni qayta ishlash juda muhim bo'lsa, ishlov beruvchi vazifasi har doim tizimd

Ishlovchi vazifasi hodisa sodir bo'lishini kutish uchun Bloklangan holatga kirish vositasi sifatida semaforga blokirovka qiluvchi "qabul qilish" chaqiruvidan foydalanadi. Voqea sodir bo'lganda, ISR vazifani blokdan chiqarish uchun xuddi shu semaforda "berish" operatsiyasidan foydalanadi, shunda kerakli hodisani qayta ishlash davom etadi.
© 2009 Richard Barry. Har qanday shaklda tarqatish yoki nashr etish qat'iyan man etiladi.
Machine Translated by Google
FreeRTOS 70
http://www.FreeRTOS.org
Mikrokontrollerlar uchun mo'ljallangan;
2
© 2009 Richard Barry. Har qanday shaklda tarqatish yoki nashr etish qat'iyan man etiladi.
vSemaphoreCreateBinary() API funktsiyasi
Tavsif
xSemaphore Yaratilayotgan semafor.
FreeRTOS semaforining barcha turlari uchun tutqichlar xSemaphoreHandle tipidagi o'zgaruvchida saqlanadi.
Esda tutingki, vSemaphoreCreateBinary() aslida makros sifatida amalga oshiriladi, shuning uchun semafor o'zgaruvchisi havola orqali emas, balki to'g'ridan-to'g'ri uzatilishi kerak. Ushbu bobdagi misollar vSemaphoreCreateBinary() ga qo'ng'iroqlarni o'z ichiga oladi, ular havola sifatida ishlatilishi va nusxalanishi mumkin.


4 RESURSLARNI BOSHQARISh
Agar bitta vazifa resursga kirishni boshlasa, lekin Ishlayotgan holatdan o'tishdan oldin unga kirishni tugatmasa, ko'p vazifali tizimda ziddiyat yuzaga kelishi mumkin. Agar vazifa resursni nomuvofiq holatda qoldirgan bo'lsa, boshqa har qanday vazifa yoki uzilish orqali bir xil manbaga kirish ma'lumotlarning buzilishi yoki boshqa shunga o'xshash xatolikka olib kelishi mumkin.
• A topshirig'i oldindan topshirilgan nuqtadan davom etadi va chiqishni tugatadi
• A vazifasi bajariladi va LCD displeyga “Salom dunyo” qatorini yozishni boshlaydi.
Quyida ba'zi misollar keltirilgan:
qolgan belgilar - "orld".
Endi LCD displeyda "Hello wAbort, Retry, Fail?orld" buzilgan qator ko'rsatiladi.
• A topshirig‘i satrning faqat boshini chiqargandan so‘ng B topshirig‘i bilan oldindan bajariladi – “Salom
1. Periferik qurilmalarga kirish
2. O'qish, o'zgartirish, yozish operatsiyalari
w”.
Machine Translated by Google
FreeRTOS 98
Mikrokontrollerlar uchun mo'ljallangan;
http://www.FreeRTOS.org
• B vazifasi PORTA qiymatini yangilaydi, keyin Bloklangan holatga kiradi.
Bu "atom bo'lmagan" operatsiya, chunki uni bajarish uchun bir nechta ko'rsatmalar talab qilinadi va uni to'xtatib qo'yish mumkin. Quyidagi stsenariyni ko'rib chiqing, unda ikkita vazifa PORTA deb nomlangan xotira xaritasi registrini yangilashga harakat qiladi:
3. O'zgaruvchilarga atomsiz kirish
• Vazifa A PORTA qiymatini registrga yuklaydi - operatsiyaning o'qilgan qismi.
Strukturaning bir nechta a'zolarini yangilash yoki arxitekturaning tabiiy so'z hajmidan kattaroq bo'lgan o'zgaruvchini yangilash (masalan, 16 bitli mashinada 32 bitli o'zgaruvchini yangilash) ikkalasi ham atom bo'lmagan operatsiyalarga misoldir. Agar ular uzilib qolsa, ular ma'lumotlarning yo'qolishiga yoki buzilishiga olib kelishi mumkin.
• A topshiriq oldindan topshirilgan nuqtadan davom etadi. U yangilangan qiymatni PORTAga yozishdan oldin
registrda mavjud bo'lgan PORTA qiymatining nusxasini o'zgartiradi.
• A topshirig'i B topshirig'ining o'zgartirish va yozish qismlarini bajarishdan oldin oldindan topshiriladi
4. Funktsiyani qayta kiritish
Agar funktsiyani bir nechta vazifalardan yoki ikkala vazifa va uzilishlardan chaqirish xavfsiz bo'lsa, funktsiya qayta kiradi.
Vazifa A PORTA uchun yangilangan va eskirgan qiymatni yozgan. B vazifasi PORTA qiymatining nusxasini olish va A topshirig'i uning o'zgartirilgan qiymatini PORTA registriga yozish o'rtasida PORTA ni o'zgartirdi. Vazifa A PORTA ga yozganda, u B vazifasi tomonidan allaqachon bajarilgan modifikatsiyani qayta yozadi va bu PORTA registr qiymatini samarali ravishda buzadi.
bir xil operatsiya.
Har bir vazifa o'z stekini va o'zining asosiy registr qiymatlarini saqlaydi. Agar funktsiya stekga ajratilgan yoki registrda saqlanadigan ma'lumotlardan boshqa hech qanday ma'lumotlarga kira olmasa, funktsiya qayta kiritiladi. Ro'yxat 58 reentrant funktsiyasiga misoldir. Ro'yxat 59 - bu reentrant bo'lmagan funktsiyaga misol.
Ushbu misolda periferik registrdan foydalaniladi, lekin global o'zgaruvchilarda o'qish, o'zgartirish, yozish amallarini bajarishda xuddi shu printsip qo'llaniladi.
/* Funksiyaga parametr uzatiladi. Bu stekga yoki CPU registriga uzatiladi. Ikkala usul ham xavfsizdir, chunki har bir vazifa o'z stackini va o'ziga xos registr qiymatlarini saqlaydi. */ long lAddOneHundered( long lVar1 ) { /* Ushbu funksiya doirasi o‘zgaruvchisi kompilyator va optimallashtirish darajasiga qarab stek yoki registrga ham ajratiladi. Ushbu
funktsiyani chaqiradigan har bir vazifa yoki uzilish o'z lVar2
nusxasiga ega bo'ladi. */ uzun lVar2;
hol 0 : lReturn = lVar1 + 10; lState = 1; sindirish;
lVar2 = lVar1 + 100;
1-holat: lQaytish = lVar1 + 20; lState = 0; sindirish;
/* Bunday holda lVar1 global o'zgaruvchidir, shuning uchun funktsiyani chaqiradigan har bir vazifa o'zgaruvchining bir xil nusxasiga kirish huquqiga ega bo'ladi. */ uzun lVar1;
/* Qaytish qiymati protsessor registriga joylashtirilishi mumkin, lekin u ham stekga joylashtirilishi mumkin. */ lVar2 ni qaytarish;
}
long lNonsenseFunction( void ) { /* Bu o'zgaruvchi
statik, shuning uchun stekda ajratilmagan. Funktsiyani chaqiradigan har bir vazifa o'zgaruvchining bir xil nusxasiga kirish huquqiga ega bo'ladi. */ statik uzun lState = 0; uzoq lQaytish;



Yüklə 153,03 Kb.

Dostları ilə paylaş:
1   ...   5   6   7   8   9   10   11   12   13




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin