Amaliyot №8. Mavzu: Freertosda navbatlarni boshqarish


Download 15.23 Kb.
Sana17.06.2023
Hajmi15.23 Kb.
#1527610

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:
* LCD RS pinidan raqamli pin 12 ga
* LCD pinni raqamli pin 11 ga yoqing
* LCD D4 pinidan raqamli pinga 5
* LCD D5 pinidan raqamli pin 4ga
* LCD D6 pinidan raqamli pin 3 ga
* LCD D7 pinidan raqamli pin 2 ga
* LCD R/W pinini erga
* LCD VSS pinini erga ulash
* 5V ga LCD VCC pin
* 10K qarshilik:
* +5V ga tugaydi va tuproq
* LCD VO piniga artgich (3-pin)

*/

// 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