Нормативно-правовое регулирование в сфере защиты информации


Ko‘rsatkichlar ustida amallar


Download 0.53 Mb.
bet2/3
Sana06.11.2023
Hajmi0.53 Mb.
#1751913
1   2   3
Bog'liq
Amaliy-7. Mikrokontrollerlarda ko‘rsatkich va ssilkalar

Ko‘rsatkichlar ustida amallar.
  • Ko‘rsatkich bu nima? Bu ma’lumotlar maydoni adresini o‘z ichiga olgan o‘zgaruvchi (o‘zgaruvchi/struktura/ob’ekt/funksiya va boshqalar.) mikrokontroller xotirasida, aniqrog‘i, uning birinchi bloki, bayt. Biz barcha ma’lumotlar bayt iborat, deb bilamiz, ularning bir xil qator, ma’lumotlar blokda joylashtirish birinchi bayt manzilini bilish, agar bu manzilda ma’lumotlar ustidan nazorat olish mumkin, lekin siz bu blok hajmini bilishiz kerak. Aslida, bir ko‘rsatkich yaratishda, biz u ishora qaysi ma’lumotlar turini belgilash, ko‘rsatkich har qanday ma’lumotlar turiga ishora qiladi. O‘z-o‘zidan ko‘rsatkich adresni saqlaydi, ko‘rsatkichga 1 ni qo‘shib keyingi xotira blokining adresini olamiz. Ko‘rsatkichlar bilan ishlash imkonini beruvchi operatorlarga o‘tamiz.
  • Ko‘rsatkichlar ustida amallar.
  • "Manzil" operatorlari
  • Bizda ko‘pgina operatorlar yo‘q, lekin ular eng kuchli "chiplar" C++ tilidan biri:
  • & - xotiradagi ma’lumotlar manziliga qaytaradi (birinchi ma’lumotlar blokining manzili);
  • *- ko‘rsatilgan manzildagi qiymatni qaytaradi;
  • >- a’zolari va usullari bilvosita kirish operatori (tuzilmalari va sinflar uchun mayoqlar uchun). A pointer orqali qurish qisqa rekord hisoblanadi: a - >b teng (*a).b.
  • Qanday ishlaydi? Biz bu tarzda kerakli ma’lumotlar turiga bir namoyishchi yaratishingiz mumkin:
  • ma’lumot turi* ko‘rsatkich_nami;
  • ma’lumot turi * ko‘rsatkich_nami;
  • ma’lumot turi * ko‘rsatkich_nami;
  • Ko‘rsatkichlar ustida amallar.
  • Ko‘rsatkichlar uchun "normal" o‘zgaruvchilar. Ko‘rsatkichlar bilan ishlash o‘zgaruvchining qiymatini uning adresi orqali o‘qish/o‘zgartirish imkonini beradi. Izoh bilan misolga qarang:
  • byte b; // faqat bayt tipidagi o‘zgaruvchi
  • b = 10; // b faqat 10
  • byte* ptr; // ptr – o‘zgaruvchi "turi bir ob’ektga pointer bayt"ptr = &b; // ptr ko‘rsatkichi b o‘zgaruvchining manzilini saqlaydi
  • *ptr = 24; // b yendi 24 ga teng (manzilda yozamiz &b)
  • byte s; // o‘zgaruvchi s
  • s = *ptr; // s hozir ham 24 ga teng (o‘qimiz at &b)
  • Misol uchun:
  • int value = 7; // o‘garuvchi yaratdik
  • square(&value); //Bu yondashuv yaxshiligi nima? Funksiyalar haqida darsda qilinganidek o‘zgaruvchi:
  • void setup() {
  • int value = 7; // o‘garuvchi yaratdik
  • value = square(value); // tut value uje == 49}
  • int square(int val) {
  • return val*val;}
  • Ko‘rsatkichlar ustida amallar.
  • Massiv ko‘rsatkichlar
  • Massiv belgilangan turdagi "o‘zgaruvchilar" bilan to‘lgan bir xotira maydoni, va biz ularni kiritshimiz mumkin! Kvadrat qavs yordamida bir qator bilan ishlash bo‘yicha misollar bir juftlik:
  • void setup() {
  • Serial.begin(9600);
  • int myArray[] = {1, 2, 3, 4, 5, 6};// massiv to‘ldirishi
  • Serial.println(sumArray(myArray));}
  • int sumArray(int* arrayPtr) { int sum = 0; for (byte i = 0; i < 6; i++) sum += arrayPtr[i]; return sum; }
  • Ssilka aslida bir xil ko‘rsatkichlar bilan, lekin bir xil sintaksisi bor.
  • A ko‘rsatkich farqli o‘laroq, bir sslka yaratishda boshlash kerak.
  • Dastur ishlashi davomida o‘zgartirib bo‘lmaydi.
  • ma’lumot turi & ssilka_nami = ma’lumotlar;
  • Ko‘rsatkich ssыlka bir xil hollarda ishlashi mumkin:
  • Ma’lumotlarni boshqarishni to‘xtatish uchun, taxallus deb ataladigan havola orqali siz o‘qishingiz va yozishingiz mumkin. Funksiyalarda argument bo‘lishi ma’lumotlarga yanada qulay kirishni ta’minlaydi. 
  • 2. Ssilkalar bilan ishlash.
  • Ma’lumot sslkalar turlari
  • byte b; // faqat bayt tipidagi o‘zgaruvchi
  • b = 10; // b endi 10
  • byte &link = b; // havola - o‘zgaruvchi "bayt turidagi ob'ektga havola"
  • link = 24; // b hozir 24 (havola orqali yozing)
  • byte s; // o‘zgaruvchi s
  • s = link; // s endi 24 ga teng (havoladan o‘qing)
  • Satr satriga ssilka
  • void setup() {
  • Serial.begin(9600);
  • String myString = "hello world! Hello again!";
  • printString(myString);
  • }
  • void printString(String string) {
  • Serial.println(string);
  • }
  • void loop() {}
  • 2. Ssilkalar bilan ishlash.
  • Bunday ssenariyni optimallashtirish juda oson: butun satrni ko‘chirmaslik, uning nusxasini yaratish, faqat manzilni ssыlka orqali o‘tkazish:
  • oid setup() {
  • Serial.begin(9600); // dlya otladki
  • String myString = "hello world! Hello again!";
  • printString(myString);}
  • void printString(String &string) {
  • Serial.println(string);}
  • Tuzilish ssilkalar. Havolalardan foydalanish ichki tuzilmalarga kirishni osonlashtiradi:
  • struct Values { int value1;
  • float value2; }
  • struct BigStruct {
  • Values values;
  • int otherValue; }
  • BigStruct myStruct;
  • float &link = myStruct.values.value2;
  • link = 3.14;
  • 2. Ssilkalar bilan ishlash.
  • #include
  • #define _LCD_TYPE 1 // 12C display bilan ishlash
  • #include
  • LiquidCrystal_I2C lcd(0x27, 16, 2);
  • void setup() {
  • lcd.init();
  • lcd.backlight();
  • lcd.setCursor(0, 0);
  • lcd.print("SALOM Do‘STLAR!"); }
  • Arduino bazasida display ekraniga yozuvini kiritish qurilmasini yig’ish:

Download 0.53 Mb.

Do'stlaringiz bilan baham:
1   2   3




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