Amaliy ish №4 Mavzu: idle vazifasi va Freertos



Download 383,73 Kb.
Sana28.05.2022
Hajmi383,73 Kb.
#613091
Bog'liq
real vaqt 4


MUXAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
SAMARQAND FILIALI

KOMPYUTER TIZIMLARI KAFEDRASI

5330501- Kompyuter injiniring ta'lim yo'nalishi

Real vaqt tizimlari” fanidan



AMALIY ISH № 4

Mavzu: IDLE vazifasi va FreeRTOS da timerga bog’liq masalalar.


Bajardi: Isayev I.
Qabul qildi: Bo’riboyev A.S.
Ishni bahosi: ___________ ball


Samarqand – 2022
LABORATORIYA ISHI №4.
IDLE vazifasi va FreeRTOS da timerga bog’liq masalalar.


Ishning maqsadi. Real vaqt operatsion tizimlarda dasturiy ta'minot taymerlari muayyan vaqt oralig'idan keyin vazifa yoki funktsiyani bajarish uchun funksionallikni ta'minlash.
Idle bu - rejalashtiruvchi ishga tushganda bo'sh turgan vazifa avtomatik ravishda yaratiladi.
Agar CPU uchun hech qanday vazifa mavjud bo'lmasa, bu vazifa bajariladi.
Vazifa o'chirilganda, u tomonidan ishlatiladigan xotira darhol bo'sh bo'lmaydi. Bu bo'sh ishda amalga oshiriladi.
Misol. Ushbu misolda biz turli xil ustuvorliklarga ega 2-vazifa yaratmoqchimiz.
Har bir vazifa bir muncha vaqt ishlaydi va keyin boshqa vazifalarni bajarishga ruxsat beruvchi bloklangan holatga o'tadi. Kutish vaqti tugagandan so'ng, rejalashtiruvchi vazifani tayyor holatga keltiradi va oxir-oqibat, agar uning ustuvorligi hozirgi bajarilayotgan vazifaga nisbatan yuqoriroq bo'lsa, uni ishga tushirish holatiga keltiradi. Loop() funktsiyasi protsessor ishlamay qolganda ishlaydi.
#include
void setup()
{
Serial.begin(9600);
Serial.println(F("In Setup function"));
/* Create two tasks with priorities 1 and 2.
* Enable the Idle Task Hook by setting configUSE_IDLE_HOOK to 1, by this the loop function can be used as Idle task*/
xTaskCreate(MyTask1, "Task1", 100, NULL, 1, NULL);
xTaskCreate(MyTask2, "Task2", 100, NULL, 2, NULL);
}
void loop()
{
// Hooked to IDle task, it will run whenever CPU is idle
Serial.println(F("Loop function"));
delay(50);
}
/* Task1 with priority 1 */
static void MyTask1(void* pvParameters)
{
while(1)
{
Serial.println(F("Task1"));
vTaskDelay(100/portTICK_PERIOD_MS);
}
}
/* Task2 with priority 2 */
static void MyTask2(void* pvParameters)
{
while(1)
{
Serial.println(F("Task2"));
vTaskDelay(150/portTICK_PERIOD_MS);
}
}
Natija. Tekshirish moslamasi o'rnatish funktsiyasidan bajarishni boshlaydi. Seriya port 9600 bod tezligida ishga tushiriladi va sozlash xabari chop etiladi.
Keyinchalik 2,1,0 ustuvorliklari bo'yicha 3-Tasks (Vazifa 1, Vazifa 2 va Ishsiz) yaratiladi. O'rnatish funksiyasining oxirida, rejalashtiruvchi/yadro boshqaruvni oladi.
Tayyor holatda 3 ta vazifa mavjud va Vazifa 2 eng yuqori ustuvorlikka ega bo'lgani uchun u birinchi bo'lib ishga tushadi va 150 ms uchun blokirovka holatiga o'tadi.
Endi 2 ta vazifa rejalashtiruvchi uchun mavjud va u Vazifa 1 ni tanlaydi, chunki u mavjud yuqoriroq vazifa hisoblanadi.
Endi Task1 biroz vaqt ishlaydi va keyin 100ms uchun bloklangan holatga o'tadi.
Protsessor Kutish vazifasidan tashqarida qoladi va u ishlay boshlaydi.
Vazifa 2 bloklangan holatda 150 ms va vazifa 1 100 ms bo'ladi. Shunday qilib, vazifa 1 avval bloklangan holatdan chiqadi.
Task1 kutish vaqti tugagandan so'ng, u Tayyor holatga keladi. Ishlamaslik vazifasi bilan solishtirganda u ko'proq ustuvorlikka ega bo'lganligi sababli, u Bekor bo'lgan vazifani oldini oladi va ishlay boshlaydi. U yana 100ms uchun bloklangan holatga o'tadi.
Endi CPU IDLE vazifasidan tashqarida qoldi va u uni ishga tushira boshlaydi.
Task2 kutish vaqti tugagandan so'ng, u Tayyor holatiga keladi. Ishlamaslik vazifasi bilan solishtirganda u ko'proq ustuvorlikka ega bo'lganligi sababli, u Bekor bo'lgan vazifani oldini oladi va ishlay boshlaydi. U yana 150ms uchun bloklangan holatga o'tadi.



Dastur kodi:

#include


void setup()
{
Serial.begin(9600);
Serial.println(F("In Setup function"));
/* Create two tasks with priorities 1 and 2.
* Enable the Idle Task Hook by setting configUSE_IDLE_HOOK to 1, by this the loop function can be used as Idle task*/
xTaskCreate(MyTask1, "Javlon", 100, NULL, 1, NULL);
xTaskCreate(MyTask3, "Oxun", 100, NULL, 1, NULL);
xTaskCreate(MyTask2, "Xusniddin", 100, NULL, 2, NULL);
}
void loop()
{
// Hooked to IDle task, it will run whenever CPU is idle
Serial.println(F("Loop function"));
delay(50);
}
/* Task1 with priority 1 */
static void MyTask1(void* pvParameters)
{
while(1)
{
Serial.println(F("Javlon"));
vTaskDelay(300/portTICK_PERIOD_MS);
}
}
static void MyTask3(void* pvParameters)
{
while(1)
{
Serial.println(F("Oxun"));
vTaskDelay(300/portTICK_PERIOD_MS);
}
}
/* Task2 with priority 2 */
static void MyTask2(void* pvParameters)
{
while(1)
{
Serial.println(F("Xusniddin"));
vTaskDelay(1000/portTICK_PERIOD_MS);
}
}


Natija




Download 383,73 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish