Avr mikro kontrollerlarida o‘rnatilgan dasturiy ta’minot ishlab chiqish
Download 74.09 Kb.
|
Untitled 1
Visnovki
Tsiklning birinchi maqolasi yordami uchun o'quvchi FreeRTOS mikrokontrollerlarining operatsion tizimi bilan tanishdi. Robotning xususiyatlari ko'rsatilgan. FreeRTOS tarqatish to'plami uchun tavsif. Asosiy eskizlar bilan tanishtirdim, ulardan men ishlab chiqishni kengaytiraman, ular FreeRTOSni ishlab chiqish uchun ishlatiladi. Kelgusi nashrlarda boy topshiriq mexanizmiga va ushbu spivprogram menejerlariga hurmat ko'rsatiladi. Robot-planner Atmel AVR mikrokontrollerlari va WinAVR (GCC) kompilyatorlari ilovasi bilan tanishtiriladi. Eshitsangiz nima fikrga tushadi operatsion tizim? Chantly kvatirki, linux, makos .. aks holda bu shunday. To'g'ri va u oziq-ovqat uchun zarur, hamma narsa maslahat beriladi: musiqa tinglash, o'yin o'ynash (Internetda!), Skype-da do'stingiz bilan rouming. Shu bilan birga, qaragan, yorqin nur kabi, otrimavshi bayt z yuarta \u003d). Va agar siz chuqurroq qazsangiz, musiqa tinglash, Internet orqali ma'lumotlarni uzatish - barchasi bitta jarayon va bizda faqat bitta protsessor bor, keyin bir soat ichida siz faqat bitta vazifani yutib olishingiz mumkin. Aynan shuning uchun vazifalar kichik "qismlar" uchun kaltaklanadi, OS ishining mohiyati koristuvach uchun tanib bo'lmaydi: ovoz xirillamaydi va baytlar yuborildi va hamma narsa bir vaqtning o'zida ishladi. Agar shunday bo'lsa, kunlarning biri "osilgan", keyin hamma narsa ishlashda davom etdi. Agar siz barcha yaxshi narsalarni tashlab qo'ysangiz va maqsadni yo'qotib qo'ysangiz, unda OS - bu shunchaki taymer, bir soatlik nafas olishning bir turi, shuningdek, koristuvach ishtirokisiz, u vazifalar o'rtasida aralashadi, vikonu bir qismi sifatida. va qayta taqlid qiladi. Bundan tashqari, vrahuvat kerak, kattaroq vazifani bir soatning bir kvantida erishib bo'lmaydi, boshqasiga o'tish vaqtida vazifani saqlab qo'yish kerak va o'zgarish lagerini almashtirish uchun kelgusi vaqt. Menejer rejalashtirish menejeri bilan shug'ullanadi. OSning ikkita asosiy turi mavjud: vitisnyayucha va kooperativ. Birinchi tasodifda, rahbarlar o'rtasidagi suhbat zhorstky, tobto bo'ladi. agar soatning kvanti 1ms bo'lsa, keyingi safar vazifa aniq 1ms deb hisoblansa, boshqa vaqt 1ms ga teng bo'ladi va hokazo. Bunday soat haqiqiy soat (RTH) deb ataladi. Kooperativlar uchun bu osonroq, jarayonning o'zi "men shu yerdaman" deyishda aybdor va uni RTOSga etkazish mumkin emas. dríbny AVR haqida Vgamuvati vytysnyayuchu RAM kichik miqdorda orqali vide emas. Kooperativlar uchun eng so'nggi variantlardan men mRTOS tomonidan sharaflandim, siz tizimning tafsilotlarini muallifning veb-saytida o'qishingiz mumkin (google uchun oson). Farqning asosiy sababi - soddaligi, tushunish uchun CAVR ning tayyor versiyasining mavjudligi. asosiy tamoyillar o'zingiz. Otzhe, bosh oziq-ovqat yo'qolgan edi, agar siz hamma narsani to'xtatsangiz, bu kerak. Nazariy jihatdan, barchasi bir xil, siz shobi z víssyu, siz usiz yuklab olishingiz mumkin, ko'proq resurslarni o'zingiz o'zingiz. Loyihaga mos keladigan narsaga qarab, megahertzni kosmosga uchib ketmang, o'zingiz olish kifoya, bu erda resurslar mavjud. Buning uchun o'z ziravorlaringizni kuchga qo'ying: 1. Resurslarni oqilona boshqara olasizmi? 2. Chi vinoning proshivkasini yozish jarayonida o'tkazilmaydi va xuddi shu velosiped planerga o'xshaydimi? 3. Sizning kodingiz qanchalik o'qilishi mumkin? Pívroku-rik vídkriti yogo i vydrazu razíbratisya orqali sizga qanday yordam bera olasiz? 4. Siz yolg'izmisiz Guruh bo'lib yozasizmi? Birinchi kunida ta'minot berish qiyin, chunki hamma narsa chakana sotuvchining egri qo'li ko'rinishida qoladi. Boshqalar bilan hamma narsa tushunarli edi, chunki mustaqil zavdanlar juda ko'p va ularni bir soatlik qo'shiq oraliqlari orqali g'alaba qozonish rejalashtirilgan, balki Bik OS-ni hayratda qoldirish uchun. Uchinchidan, aniqroq bo'ldi, okremu zavodida saralash osonroq bo'ldi, asosiy tsiklda bo'shashgan erlarni pasaytiradi. Agar siz bir nechta yozsangiz, unda ortiqcha narsalar ham bor, chunki siz boshqalarni hurmat qilmasdan o'z vazifangizni yaxshi yozishingiz mumkin. Yuqorida aytib o'tilganlarga ko'ra, dosit uchun stosuvannya doirasi, xuddi oldingi kun kabi, o'ziga xosdir. Charm loyihasida varto phati vvy emas. Ko'pgina havaskor radio loyihalari uchun butun loyiha, hatto bu haqda ilgari e'lon qilingan bo'lsa ham, bir nechta loyihalarni qo'shib qo'yadi. Endi kaput ostida zazirnemo. Loyihadan oldin mRTOS-ni ishga tushirish uchun siz mrtos.c-ni qo'shishingiz va mrtos.h-ni tuzatishingiz kerak. Trocho koda tuzilishi ovozli kabi ko'rinadi
#o'z ichiga oladi Endi xabar bering. topshiriqning raqami mrtos.h da standart APPTASKS N ga ko'rsatilgan. Vazifa task1()(), task2()() o'rtasida juda yaxshi aytiladi, while(1) o'rtasida emas. biror narsa yozish kerak, funktsiyani chaqirish shart emas, siz uchun rejalashtiruvchi yaratish shart emas. Ko'rib turganingizdek, vazifa bitmas-tuganmas tsikldan yig'ilgan, ammo bu normal va shunday bo'lishi mumkin, ammo vazifaning o'rtasida obov'yazkovo rejalashtiruvchini boshqarish uchun zarur. Yoki WAIT funksiyasi yoki DISPATCH. Imkon qadar, keyin muqarrar vikonuvatimes vazifasi. Qanday ishlaysiz? Keling, yorug'lik bilan blimannya vazifasini yarataylik.
void task1() ( while(1) ( PORTB.0 = !PORTB.0; WAIT(100); ); ) WAIT faqat delay() ning analogi emas, bir soat davomida mikrokontroller hech narsani o'tkazib yubormaydi va bo'sh sikllarni bajaradi. Bir soat ichida WAIT boshqaruvi boshqa ishchilarga o'tkaziladi. Tobto. siz turli xil KUTISH bilan miltillovchi turli xil chiroqlarning bir nechta zarbalarini yaratishingiz mumkin va barcha badbo'y hid boshqa chastotada porlaydi. Agar zatrymki kerak bo'lmasa, u holda kintsi vikoristovuemo DISPATCH. WAIT boshqacha bo'lsa, butun tizimda minimal belgi (soat kvanti) mavjudligini tushunish kerak, shuning uchun biz WAIT (50) 50 millisekund emas, balki 50 tizim belgisini tekshiramiz. Shomilni birinchi navbatda yotishga o'rnatish, chunki taymer 0 tez-tez chaqiriladi, tobto. Biz uzilishni 1ms ga sozlaganimizdek, bizning harakatimiz 1ms davom etishiga ruxsat berishimiz mumkin. Hozirgacha biz 16 MGts soat tezligida tizim belgisini ~20 mks gacha o'zgartirish mumkinligini ko'rsatdik. Taymerni sozlash ilgari hech qanday tarzda hisobga olinmaydi, chunki taymerni faqat qayta tartiblash mumkin, barcha sozlamalar narxga bog'liq. CAVR ning boshqa versiyalarida siz avtomatik ravishda yaratiladigan vaqt talablarini qo'lda yozishingiz mumkin.
yaratish_topshiriq(1,1,faol); Hamma narsaga ustuvorliklar bilan erishish oson emas. Har xil ustuvorlikka ega ikkita vazifa va yuqori ustuvor vazifa doimiy ravishda kurash olib borsa ham, u holda past ustuvor vazifa hech qanday vosita bilan kiritilmaydi. Shuning uchun robotni ma'murlar kirishni rad etadigan tarzda tashkil qilish kerak. Biz hech kimga hurmat ko'rsata olmaymiz, hujum vaqtini tejaymiz. Starter Mill, Faol – ishlayotgan, StopTask zupinena. Otzhe, tayyor bo'lganlar uchun yorug'lik bilan miltillang:
#o'z ichiga oladi Bonus sifatida men "Doktor Mario chill" polifonik (ikki ovozli) ohangini sinab ko'rdim. G'oya shundan iboratki, boshqaruvchining terisi doimiy ravishda haqiqiy ishtiyoqga aylanadi va shu bilan chastotaning o'zini yaratadi. Yamoqni o'zgartirish orqali siz eslatma balandligini o'zgartirishingiz mumkin.
void task2(void) ( while(1) ( if(mute == 0) //oʻynashga ruxsat berish kerakmi ( if(note_ch2 == 0) //pauzani tekshirish kerak boʻlsa, hech narsani oʻchirib boʻlmaydi ( PORTB.4) = 0; WAIT( 5);) else ( PORTB.4 = !PORTB.4; //agar pauza bo'lmasa, u holda biz oyoqni kerakli chastota bilan harakatlantiramiz WAIT(note_ch2); ) ) ) ) Men bu fikr bilan aldaganim yo'q, 1 vazifada yakkaxon qism uchun notaning chastotasidan meander hosil bo'ladi, ikkinchisida bass uchun. Teri yozuvining balandligi massivlardan olinadi. Vazifada uchlik, soqol olish va soqol olish3.
Void task3 (bekor) (hozirda (1) (KUTISH (1500); // eslatma saqlang (ovoz = 0; ovozsiz)< 500; mute++) //обрываем ноту, чтобы не сливались { PORTB.3 = 0; PORTB.4 = 0; }; mute = 0; //выставляем флаг, что можно воспроизводить звук n_n++; //переходим на следующую ноту if(n_n == n_max) //если сыграли все то идем по кругу { n_n = 0; } } } Oddiy sxemani burish orqali ikkita kanalni o'zgartirish uchun. Bir vaqtning o'zida kichik bo'lak
Men doimo o'zimdan nima qilishim kerakligini so'rayman, bir soat davomida sevimli mashg'ulotim bilan shug'ullanaman - 16 bitli mikrokontrollerga asoslangan kichik uy avtomatik boshqaruv tizimi (aqlli stend) - bu qanday to'g'ri fikr? Ikkinchi oy oldin, men o'z blogimda "Mikrokontrollerlar va chiplardagi tizimlar" mavzusida allaqachon yozgan edim. Shunday qilib, eksa, men bu haqda yana yozishga tayyorlanyapman. Men tez-tez Stellaris Launchpad va Arduino Due sotuvidan hayratda qoldim. Xushbo'y hid 32-bitli mikrokontrollerlar asosida xafa bo'ladi va ko'p jihatdan ular o'xshashdir. Men texnik xususiyatlardan (ma'lumotlar varag'i) xabardorman va narxni yomonlashni xohlayman, hidlar bitta maqsadli auditoriya uchun olinadi. Men MSP430-dan Stellaris-ga fikrimni o'zgartira oladiganlar haqida o'yladim va men tizimimga o'tishim, Raspberry Pi-ga o'tishim, mikrokontrollerlarni almashtirishim mumkin edi. Obidva, Stellaris Launchpad va Arduino Due, bundan ham qiyinroq, lekin Linuxni ishlatish uchun tan olinmagan. Noxush hid ular uchun vositachisiz yozilgan ikonik kodda yoki real vaqt rejimidagi operatsion tizim (RTOS) boshqaruvida ishlaydi - minimalistik OT, qo'ng'iroqlarga hatto qisqa soatlik reaksiyaga ega. Shunday qilib, badbo'y hid, shubhasiz, katlanabilir, pastroq MSP430 yoki 8-bitli AVR. Boshqa tomondan, haqiqiy hayotda (Internetdan tashqari) men bilgan ko'pchilik odamlar Raspberry Pi yoki Linuxda ishlaydigan boshqa tizimlarni ishlatishadi. Vykoristannya o'zi mikrokontrollerlar, men o'rgangan sokin orasida nodir vipadok dosit. Navit Arduino, bir oz kamroq mashhur, mening hoved, pastki Linux, qaysi aqlga keladi. Men tushunganimdek, Arduino sotib olishga arziydi, agar siz Raspberry Pi-ni olishingiz mumkin bo'lsa, qaysi biri boyroq va qaysi biri kichikroq? Linuxda tayyor dasturiy ta'minot yo'q va unda siz harakat qilish uchun oddiy skriptlardan foydalangan holda dasturlashingiz mumkin. Ayniqsa, men uchun buning sababi shundaki, men g'olib Linux haqida qayg'urmayman, chunki men bugun robotda vicor yoga bilan shug'ullanyapman va uyga qaytsam, Linuxga o'xshash tizimlarda qayta mashq qilish zaruratidan mamnun emasman. . Menda linux hacklari bilan juda ko'p muammolar yo'q, lekin bu meni bo'g'ib, chirish uchun juda ko'p. Men 8/16-bitli mikrochiplarga asoslangan oddiy elektron qurilmalar bilan qulayroqman. Prote Men haqiqatga aylanmayman. Haqiqiy dunyo bilan yolg'iz qolishni xohlayotganim sababli, men haqiqiy dunyo bilan g'alaba qozonish kabi bu asboblar ustidan g'alaba qozona olaman. Aks holda, bug 'dvigatelli mashinani haydashga o'xshaydi, kamroq, chunki ichki yonish dvigateli ajoyib, men bunday darajadagi post-jangchiman. Agar zamonaviyroq texnologiyaga o'tish kerak bo'lsa, uni o'zlashtirish, men kabi bo'lish kerak. Ayniqsa, mening blogim odamlarga tegishli bo'lishini va dolzarb bo'lishini xohlayman. Aqlli stend loyihasida men haqiqatan ham bu muammoga duch keldim. Men MSP430 da boshqaruv tizimi uchun mahalliy tarmoq drayverini allaqachon qurganman va hamma narsa yaxshi ko'rinadi. Aslida, men MSP430 da avtomatlashtirish tizimi uchun kerak bo'lgan hamma narsani qila olaman. Tim kichikroq emas, men hayronman, qaysilari to'g'ri, buni qanday qilishim mumkin? Men kontrabanda qilmayman, arra bilan osh nima, agar u qoshiq bo'lsa? Ehtimol, Linux shunga o'xshash tizimdir? Menga tushuntirib bering. 2012 yilgi tosh kuzida texnologik yutuqlar uchun hozirgi vaziyatga qarashga arziydi. Men o'zimdan so'rayman: hozirgi mikrokontrollerlar chipdagi tizimlar bilan solishtirganda nima foydali, Linux nimada yutadi? Tizimdagi loyihalarni qanday qayta ishlash kerak, xayolimga qanday kelishi mumkin, tse: dronlar, robotlar, uy avtomatizatsiyasi, motor kontrollerlari, sensorlar, bilak yilnomasi, 3D printerlar va boshqalar. Ushbu turdagi Linux, scho vbudovuetsya, ko'proq, pastki mikrokontrollerlarga mos keladimi? Nega? Men, albatta, mikrokontroller eng yaxshi tanlov bo'lsa, uchta vaziyat borligini qadrlayman: u erda, de muhim bo'lgan bir lahzali (real vaqtda) sub reaktsiya; u erda juda kam energiya kerak; Va u erda iloji boricha pastroq mikrosxemalardan foydalanish kerak. Kob uchun arzon mikrosxemalardan foydalanish men uchun unchalik muhim emas. Men o'zim uchun sevimli mashg'ulotim bilan shug'ullanaman va raqobatbardosh mahsulotlarni chiqarishni tanlamayman. Men rozroblyaet kabi, bu boshqa loyihalar uchun raqobatbardosh narxni ta'minlash uchun, bir turdagi g'olib qul mehnati bo'lgan zavodga ishlab chiqarishni o'tkazishga taslim bo'lishim shart emas. Men xursandman, yakby zmíg kuniga bir martadan ko'proq to'lash, sizning qulayliklarga zavdyak! Masalan, aqlli stend loyihasi uchun men vimikachni masofadan boshqarishni ishlab chiqa olaman. Vín yorug'likni yoqishi / o'chirishi yoki boshqasi mumkin. Shu bilan birga, men mahalliy elektr do'konimga borib, Xitoyda ishlab chiqarilgan 20 dollarga sotib olaman. Chi vlasny vimikachni sotishga urinib, narxni o'ldirsa bo'ladimi? Menimcha, bu mumkin emas. Ko'proq o'ylangan bo'lish uchun uyni avtomatlashtirish uchun zarur bo'lgan boshqa nutqlarning boyligiga erishish kerak. Harorat sensorlari, dima, ruhu va boshqalar, men mustaqil ravishda bino qurishim mumkin, ammo moliyaviy foyda olishingiz mumkin emas. Davlat molidan 20 dollarga topib olishsa, mendan bunday nutqlarni 75 dollarga sotib olish kimning fikriga? Agar siz o'zingizning sevimli mashg'ulotlaringizga g'amxo'rlik qilish haqida o'ylayotgan bo'lsangiz, unda qimmatroq va katlanadigan mahsulotlarga hurmat qozonish yaxshiroqdir. Masalan, uyni avtomatlashtirish boshqaruvchisi yoki termostat, ovoz narxi 100 dollardan oshadi va individual ijodkorlik uchun ko'proq erkinlik beradi, siz uni rag'batlantirishingiz, pulingizni sotishingiz va o'zingiz pul ishlashingiz mumkin. Ale bazhannya, qoldiq biriktirmaning eng yuqori narxiga etib borishi, Yerda topilgan mikrokontrollerni urish kerakligini anglatmaydi. Haqiqatan ham yomon fikr, chunki rozrobki soati o'shalar g'olib detallar kabi ko'p qirralilikka ega bo'lishlari mumkin. Ehtimol, mikrokontroller arzon, ammo boshqarish uchun kodni yozish uchun bir soatdan ko'proq vaqt ketadi. Bir soat - bu bir tiyin va agar siz aqlliroq mashq qilsangiz, ko'proq erishishga erishasiz. Baribir, meni visnovkaga olib kelish haqida o'ylab ko'ring, Linuxda aqlli kabina tizimini kengaytirish yaxshiroq, mikrokontrollerlarda pastroq, mening maxsus mahoratimdan qat'i nazar, Linuxni mag'lub qilmang (men past darajadagi dasturlashim kerak, ko'proq pastki skriptlar, Linux kamroq skriptlarga muhtoj). Agar siz ushbu mavzularga, mikrokontrollerlarning narxiga murojaat qilsangiz, u yangi mahsulotni ishlab chiqarishni tanlagan buyuk korporatsiyalar uchun muhim omil bo'lishi mumkin, ammo individual darajada, go'yo siz Kickstarter uslubida biznes qilishni xohlasangiz, bu omil endi unchalik ahamiyatli emas, aslida, shved , Eng muhimi, komponentlarning past farqi. Boshqa tomondan, agar past energiya kerak bo'lsa, mikrokontrollerlar yaxshiroq tanlov bo'lishi mumkin, agar tizim chipda past bo'lsa. Bunday tizimlar ikkita momentga ega: bir soatlik ish uchun sxemaning o'zini o'zi kam ta'minlashi va qisqa boshlanish soati. Boshqa yordamchi binolar uchun batareyalarni tejashning odatiy usuli - o'z-o'zidan ulanish (o'chirish). Agar siz Linuxda kompyuterni taqlid qilsangiz, ishlashga, ba'zan dekilkoh hvilinga qaytish uchun sizga munosib soat kerak bo'ladi. Bunday soatni o'ziga jalb qilish kerak bo'lgan tizimlar uchun qabul qilib bo'lmaydi. Agar siz MSP430 kabi mikrokontrollerni olsangiz, ba'zida bitta batareyadan foydalanishingiz mumkin. Stellaris Launchpad va Arduino Due, printsipial jihatdan, xuddi shu binoda, MSP430 dan ko'ra ko'proq energiyani hidlaydi, ammo baribir Raspberry Pi ga teng. Shunga qaramay, MSP430, uni o'chirganingizdan so'ng darhol boshlashingiz mumkin. Ushbu darajadagi men mutlaqo aminmanki, past kuchlanishli operatsiyalar zarur bo'lgan barcha holatlarda mikrokontrollerlarda g'alaba tuyg'usi mavjud. Batareyalarda ishlaydigan juda ko'p turli xil binolar mavjud, bu esa bunday ehtiyojning sababidir. Uchinchi tur uchun, avval aytganimdek, bir lahzada javob berishni talab qiladigan operatsiyalarda (real vaqtda javob) Linuxga qaraganda mikrokontrollerdan foydalanish ko'proq tushuniladi. Men 3D printerlar va CNC terish kabi qo'shimchalardan foydalanishim mumkin, men nima haqida gapirayotganimni bilaman, to'yimga ko'p vaqt ajrataman. O'zining tabiatiga ko'ra, hid robotlarda yuqori aniqlikni talab qiladi, chunki buyruqlarga reaktsiya soatida yotish ehtimoli kamroq. Misol uchun, agar sizda aylana fayl ishlayotgan bo'lsa, go'yo ma'lum bir vaqtda yog'och yoki metall bo'laklari kesilayotgandek, siz jarayonni kompyuterda pauza qilish kerak bo'lgan arsalar orqali boshlay olmaysiz, shunda ma'lumotlar to'liq bo'lishi mumkin. xotiradan diskka o'tkaziladi, aks holda bir xil ruhda. Shaxsiy kompyuterni yutgan, vipadkovy podvisannya haqida biladigan, vaqti-vaqti bilan ajoyib ish soatini ayblaydigan odam bo'ling. Va endi menga xabar bering, sizda kompyuter sarlavhasi ostida ajoyib burg'ulash ish jarayoni bor, u raptom Windows uchun yangilanishni o'zgartira boshlaydi, bir soat ishlaydi va po'latni burg'ulash, burg'ulash, qaysi biri ustida turish kerak, chunki. . kompyuter uning ustidan nazoratni qo'lga kiritdi. Shaxsiy kompyuterlar va chip-on-a-chip real vaqt rejimida ishlash uchun mo'ljallanmagan, na Windows, na Linux, lekin o'z-o'zidan yoqimsiz hid sizga yaqinlashmoqda. Misol tariqasida, men Linux yadrosi uchun real vaqt rejimida yamoq va maxsus CNC dasturiy ta'minotidan foydalanaman, bu turdagi robotlar uchun yaratilgan. Men cim Linux yamog'i haqida ko'p narsa bilmayman va real vaqtni yaxshiroq boshqarish uchun bu biroz gnuchky yoki yo'qligini bilmayman. Lekin yaxshiroq muqobil bormi, deb hayronman, tk. Linux, garchi yamalar unga osib qo'yilmagan bo'lsa ham, mikrokontrollerlar ushbu oynada o'z tizimlarini buza olmaydi. Nasamkinets, shuni aytmoqchimanki, ko'p vaqt sarflaganimdan so'ng, loyihalarimda mikrokontrollerlar o'rnatilgan hududlarni bilishga harakat qilsam, men g'alaba qozonishim mumkin. Va hamma narsa Raspberry Pi va Beaglebonesning engil hukmronligi davri kelganga o'xshaydi. Bu DIY shpallari uchun hozirgi holat. U ko'proq imkoniyatlarga ega, bu tizimlarda ishlab chiqish tezroq va osonroq, shuning uchun u ko'proq loyihalar uchun eng yaxshi tanlovdir. Mikrokontrollerlar uchun past kuchlanishli qo'shimchalar, real vaqtda operatsiyalar va past kuchlanishli qo'shimchalar uchun boshqa joylar yo'q. Mikrokontrollerlar pastroq shaxsiy kompyuterlarni "kulgili" qilishlari mumkinligi haqida yolg'on gapira olmaysiz. Tasodifan yarashganlaringizga e'tibor bering. Asl postning inglizcha filmidan tarjima qilingan Download 74.09 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling