Amaliyot №8. Mavzu: Freertosda navbatlarni boshqarish
Download 15.23 Kb.
|
- Bu sahifa navigatsiya:
- Cortex-M apparat tafsilotlari
- RTOS dan foydalanishda dolzarblik
AMALIYOT №8. Mavzu: FreeRTOSda navbatlarni boshqarish. Ko’plab ilovalar FreeRTOS-ni ARM Cortex-M yadrolarida ishlaydi. Ajablanarlisi shundaki, ushbu RTOS va ARM Cortex CPU yadro kombinatsiyasi uchun texnik yordam so'rovlari juda kam. Ro'y beradigan muammolarning aksariyati noto'g'ri uzilishning ustuvor sozlamalari natijasidir. Buni kutish mumkin, chunki ARM Cortex-M yadrosi tomonidan qo'llaniladigan uzilish modeli kuchli bo'lsa-da, u biroz noqulay va odatiy uzilish ustuvor sxemasiga o'rganib qolgan muhandislar uchun intuitivdir. Ushbu sahifa ARM Cortex-M uzilishning ustuvor mexanizmini tasvirlashga va undan RTOS yadrosi bilan qanday foydalanish kerakligini tasvirlashga qaratilgan. Esda tutingki, ARM Cortex-M3 yadrosi tomonidan o'rnatilgan ustuvorlik sxemasi murakkab ko'rinishi mumkin bo'lsa-da, har bir rasmiy FreeRTOS porti mos yozuvlar sifatida ishlatilishi mumkin bo'lgan to'g'ri tuzilgan demo ilovasi bilan birga keladi. Bundan tashqari, FreeRTOS V7.5.0 noto'g'ri sozlangan ARM Cortex-M uzilish kontrollerlarini (NVIC) ushlash uchun qo'shimcha configASSERT() qo'ng'iroqlarini taqdim etdi. Iltimos, ishlab chiqish jarayonida configASSERT() aniqlanganligiga ishonch hosil qiling. Cortex-M apparat tafsilotlari Bilish kerak bo'lgan birinchi narsa shundaki, mavjud ustuvorliklarning umumiy soni amalga oshirish aniqlangan, ya'ni ARM Cortex-M yadrosidan foydalanadigan mikrokontroller ishlab chiqaruvchisigacha. Natijada, barcha ARM Cortex-M mikrokontrollerlari bir xil sonli noyob uzilish ustuvorliklarini ta'minlamaydi. ARM Cortex-M arxitekturasining o'zi maksimal 256 xil ustuvorlikni ta'minlaydi (maksimal sakkizta ustuvor bit mavjud, shuning uchun 0 dan 0xff gacha bo'lgan ustuvorliklar mumkin), lekin ko'pchilik, agar hammasi bo'lmasa ham, ARM Cortex-M yadrosini o'z ichiga olgan mikrokontrollerlar. faqat ulardan bir qismiga kirishga ruxsat bering. Masalan, TI Stellaris Cortex-M3 va ARM Cortex-M4 mikrokontrollerlari uchta ustuvor bitni amalga oshiradi. Bu sakkizta yagona ustuvor qiymatni ta'minlaydi. Yana bir misol sifatida, NXP LPC17xx ARM Cortex-M3 mikrokontrollerlari beshta ustuvor bitni amalga oshiradi. Bu 32 ta noyob ustuvor qiymatlarni beradi. Agar loyihangizda CMSIS kutubxonasi sarlavhalari fayllari mavjud bo'lsa, qancha ustuvor bit mavjudligini ko'rish uchun __NVIC_PRIO_BITS ta'rifini tekshiring. RTOS dan foydalanishda dolzarblik Barcha ustuvor bitlarni ustunlik bitlari sifatida belgilash tavsiya etiladi, bunda ustunlik bitlari subpriority bit sifatida qolmaydi. Boshqa har qanday konfiguratsiya configMAX_SYSCALL_INTERRUPT_PRIORITY sozlamasi va alohida periferik uzilishlarga tayinlangan ustuvorlik o'rtasidagi aks holda to'g'ridan-to'g'ri munosabatni murakkablashtiradi. Ko'pgina tizimlar sukut bo'yicha kerakli konfiguratsiyaga mos keladi, STM32 drayverlar kutubxonasidan tashqari. Agar siz STM32 drayverlari kutubxonasi bilan STM32 dan foydalanayotgan bo'lsangiz, NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4) ga qo'ng'iroq qilib, barcha ustuvor bitlar oldindan ustunlik bitlari sifatida tayinlanganligiga ishonch hosil qiling; RTOS boshlanishidan oldin. /* LiquidCrystal kutubxonasi - Salom dunyo 16x2 LCD displeydan foydalanishni ko'rsatadi. LiquidCrystal kutubxona bilan mos keluvchi barcha LCD displeylar bilan ishlaydi Hitachi HD44780 uchun haydovchi. U erda ularning ko'plari bor va siz odatda 16 pinli interfeys orqali ularni aytishi mumkin. Bu ishda manitorga salom dunyo so'zni timer orqali chop etamiz The circuit:
*/ // kutubxonani chaqirib olish: #include //// kutubxonani interfeys pinlari raqamlari bilan ishga tushirish LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int customerCount = 0; int customer1 = 0; int customer2 = 0; int customer3 = 0; int ctr1 = 0; int ctr2 = 0; int ctr3 = 0; void setup() { // LCD displeyning ustunlar va qatorlar sonini o'rnatish: lcd.begin(16, 2); // LCD manitorga xabarni chop etish. lcd.print("CTR1 CTR2 CTR3"); pinMode(8,INPUT); pinMode(9,INPUT); pinMode(10,INPUT); } void loop() { ctr1 = digitalRead(10); ctr2 = digitalRead(9); ctr3 = digitalRead(8); if(ctr1 == HIGH) { customerCount++; customer1 = customerCount; } if(ctr2 == HIGH) { customerCount++; customer2 = customerCount; } if(ctr3 == HIGH) { customerCount++; customer3 = customerCount; } // kursorni 0-ustun, 1-qatorga qo'yish // (eslatma: 1-qator ikkinchi qatordir, chunki hisoblash 0 bilan boshlanadi): lcd.setCursor(0, 2); // amallar sonini chop eting: lcd.print(customer1); lcd.setCursor(6, 2); lcd.print(customer2); lcd.setCursor(12, 2); lcd.print(customer3); delay(100); } Download 15.23 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling