Xotinning

Mikrokontrollarda kodni optimallashtirish

Muallif: Laura McKinney
Yaratilish Sanasi: 4 Aprel 2021
Yangilanish Sanasi: 16 Mayl 2024
Anonim
Mikrokontrollarda kodni optimallashtirish - Xotinning
Mikrokontrollarda kodni optimallashtirish - Xotinning

Tarkib

Muallif so'nggi yilgi muhandislik loyihasini dsPic mikro-tekshirgichlari bilan yakunlab, ushbu qurilmalarda keng tushunchaga ega bo'ldi.

Mikrokontrollerning C tilidagi kodi ba'zi bir ilg'or dasturlarda optimallashtirishni talab qilishi mumkin. Ushbu kodni optimallashtirish ikkita muhim narsani kamaytirish uchun qo'llaniladi:

  1. Kod hajmi: Mikrokontrollerlar operativ xotirasining hajmi cheklanganligi sababli cheklangan ma'lumotlar va ko'rsatmalarni saqlashi mumkin. Shuning uchun kodni optimallashtirish kerak, shunda mavjud ko'rsatmalar va ma'lumotlar xotirasidan eng samarali tarzda foydalanish mumkin.
  2. Kodni bajarish vaqti: Mikrokontrollerlar ketma-ket qurilmalar bo'lib, ular bir vaqtning o'zida bitta buyruqni bajaradilar. Har bir montaj ko'rsatmasi o'zini bajarish uchun ma'lum bir soat tsiklini sarf qiladi. Shuning uchun kod eng kam soat tsikllarida yoki yig'ilish ko'rsatmalarida kerakli vazifani bajarishini ta'minlash uchun optimallashtirilgan bo'lishi kerak. Kod ishlatadigan soat sikllari qancha kam bo'lsa, shuncha tez ishlaydi. Bu shuni anglatadiki, dasturlar tezroq ishlashi mumkin, chunki ishlov berish vaqtlari minimallashtirilgan.

Ushbu maqolada mikrokontrolder kodining hajmi va bajarilish vaqtini qisqartirish uchun ishlatilishi mumkin bo'lgan maslahatlar va tavsiyalar keltirilgan.


Microchip-ning MplabX ishlab chiqish IDE-si, kerak bo'lganda misollarni namoyish qilish uchun ishlatiladi.

Kodni bajarish vaqtini eksperimental tarzda qanday o'lchash mumkin

Sizning kodingiz real vaqt rejimida bajarilishi uchun qancha vaqt ketishi haqida tasavvurga ega bo'lish uchun siz uni eksperimental ravishda o'lchashingiz kerak. Kodni bajarish vaqtini o'lchash uchun mantiqiy analizatordan qulay foydalanish mumkin va qiziquvchilar bu jarayonni elektron pochta orqali mendan so'rashlari mumkin. Buning yonida:

  • Ba'zi kompilyatorlar kod ishlatadigan soat tsikllarini hisoblash qobiliyatiga ega.
  • Ba'zi nosozliklarni tuzatuvchilar, masalan, mikrochipdan ICD 3 to'g'ridan-to'g'ri sekundomer orqali ishlash vaqtini o'lchashlari mumkin.

1. Mikrokontrolleringizning ishlash kuchi va xotira hajmini biling

Mikro-tekshirgichni qayta ishlash tezligining haqiqiy tasvirini beradigan har doim ham soat chastotasi (MHz) emas, aniqroq o'lchov MIPS (sekundiga mega ko'rsatmalar) yoki MCU ning bir soniyada bajarishi mumkin bo'lgan ko'rsatmalar soni.

MCU odatda yuqori darajadagi toifadagi 60-70 MIPS dan 20 MIPS 8 bitli AVRgacha o'zgaradi. Yuqori MIPS mikrokontrolderi arzonroq narxga ega bo'lishi mumkin, shuning uchun bu erda narx va ishlov berish tezligi o'rtasida kelishuv mavjud.


Mikro-kontrollerlarda ma'lumotlar va dastur kodlarini saqlash uchun alohida xotira mavjud. Ularning ikkalasining ham hajmini ma'lumotlar sahifasidan topish mumkin. Agar sizning kodingiz katta bo'lsa, sizga katta xotira hajmiga ega MCU kerak bo'lishi mumkin.

2. Kod hajmida optimallashtirish uchun o'zgaruvchilarni tanlash

Mikro-kontrollerlar cheklangan ma'lumotlar xotirasiga ega, odatda 1 dan 4 Kbaytgacha. Bunday holda, saqlanadigan sana kutilayotgan oralig'iga ko'ra eng mos o'zgaruvchilar turini tanlash oqilona bo'ladi. Quyidagi jadvalda ushbu o'zgaruvchilar umumlashtirilgan:

C tilida ishlatiladigan o'zgaruvchilarning qisqacha mazmuni.

O'zgaruvchan turiHajmi baytlardaOraliq

bool

1

Faqat 0 yoki 1

char

1


-128 dan 127 gacha

int

2

-32,768 dan 32,767 gacha

unsigned int

2

0 dan 65,535 gacha

uzoq

4

-2,147,483,648 dan 2,147,483,647 gacha

suzmoq

4

6 ta kasrgacha aniqlik

ikki baravar

8

15 ta kasrgacha aniqlik

uzun er-xotin

10

19 ga qadar aniqlik

Misol:

  • Agar ikkita o'zgaruvchi X va Y qo'shilishi kerak bo'lsa va natija Z da saqlanishi kerak bo'lsa, lekin Z qiymati qo'shilganidan keyin 65,535 dan yuqori bo'lishi kutilmoqda, keyin Z uzun va X va Y imzosiz deb e'lon qilinishi mumkin int, X va Y qiymatlari ham salbiy bo'lishi kutilmaydi. Bu ma'lumotlar xotirasida 04 baytni tejashga imkon beradi, aks holda barcha o'zgaruvchilar uzoq e'lon qilinishi kerak bo'lganda ishlatilgan bo'lar edi.
  • Qiymatlari butun sonda bo'lishi kutilgan ikkita o'zgaruvchi X va Y bo'linishi kerak, lekin bo'linish natijasi o'nli kasrga ega bo'lishi mumkin, keyin X va Y int deb e'lon qilinishi va natijaga qarab float yoki ikki baravar e'lon qilinishi mumkin. talab qilinadigan aniqlik.

Ko'p sonli elementlarni o'z ichiga olgan massivlarni e'lon qilishda ma'lumotlar turini tanlash juda muhim bo'lishi mumkin.

3. Kodni bajarish vaqtidagi optimallashtirish uchun o'zgaruvchilarni tanlash

  • Suzuvchi nuqta hisob-kitoblari sobit nuqtali hisob-kitoblarga qaraganda ko'proq vaqt talab qilishi aniq dalil. O'nli qiymat talab qilinmaydigan suzuvchi nuqta o'zgaruvchisini ishlatmang. Mumkin bo'lgan joyda imzosiz tamsayılar bilan ishlash.
  • Mahalliy o'zgaruvchilar global o'zgaruvchilardan afzalroq. Agar biror funktsiyada o'zgaruvchidan foydalanilsa, u holda bu funktsiyada e'lon qilinishi kerak, chunki global o'zgaruvchilarga kirish mahalliy o'zgaruvchilarga qaraganda sekinroq.
  • 8-bitli MCU bitta bayt o'lchamdagi o'zgaruvchini tezroq topadi va 16-bitli MCU hosil qilingan manzil uzunligi tufayli 2-baytli o'zgaruvchini osonroq topadi.

4. Arifmetik amallarni optimallashtirish

Arifmetik amallarni quyidagi usullar bilan optimallashtirish mumkin.

  1. Sinusni yoki boshqa har qanday trigonometrik funktsiyani yoki natijasi kodda oldindan ma'lum bo'lishi mumkin bo'lgan boshqa operatsiyani baholash o'rniga oldindan hisoblangan qiymatlarning qidirish jadvallaridan foydalaning.
  2. Sinuslarni qidirish jadvali allaqachon xotirada saqlangan bo'lsa, kosinusni 90 darajaga teng qator ko'rsatkichi bilan baholash mumkin.
  3. To'rt arifmetik amallar orasida bo'linish va ko'paytirish eng ko'p ishlov berish vaqtini oladi, amalda u o'zgaruvchan qiymatlar yuzlab mikro-soniyalar oralig'ida bo'lishi mumkin.
  4. Bo'linish va ko'paytirish o'rniga bitni almashtirish ko'rsatmalaridan foydalaning. To'g'ri siljish ko'rsatmasi 3 2 ga bo'linishga xizmat qiladi3 bu erda chap siljish buyrug'i sifatida 1 2 ga ko'paytiriladi1.

5. Intensiv hisob-kitoblar uchun DSP quvvatli mikrokontrollerdan foydalaning

Ba'zi bir mikro-kontrollerlarda DSP protsessori mavjud, boshqasida ularning me'morchiligida o'rnatilgan an'anaviy ALU mavjud. Ushbu DSP dvigateli arifmetik hisob-kitoblarni ALUdan keyin eng kam soat sikllarida (ko'p hollarda bitta) juda tez bajarishga qaratilgan.

DSP protsessorining ko'rsatmalari ALUdan keyin tezroq bajarilishi mumkin:

  • Bitni almashtirish va aylantirish bo'yicha ko'rsatmalar.
  • Ko'paytirish, bo'linish va boshqa arifmetik amallar.
  • Sinuslarni va boshqa trigonometrik funktsiyalarni baholash.
  • FFT, DFT, konvolutsiya va FIR filtrlash kabi barcha DSP operatsiyalari.

Mikrokontrollerning DSP dvigatelidan foydalanish quyidagilarni talab qiladi.

  • Loyihaga alohida DSP kutubxonalari kiritilgan.
  • Funksiyalar nomlari C tilidagi standart matematik kutubxonadan farq qiladi. Ushbu kutubxonalar va funktsiyalarni hujjatlashtirishni tegishli ishlab chiqaruvchilar veb-saytidan olish mumkin.
  • DSP dvigatelida "fraksiyonel" o'zgaruvchisi ishlatiladi. DSP kutubxonasi funktsiyalariga o'tishdan oldin kasr turi o'zgaruvchilaridan qanday foydalanishni bilib oling.

E'tibor bering, matematik kutubxonaning standart funktsiyalari DSP dvigatelini chaqirmaydi, chunki ular ALU yig'ish ko'rsatmalariga tarjima qilinadi.

6. Interruptlar bilan ishlash

Muayyan funktsiyalarni bajarish uchun uzilishlardan foydalaning:

  • ADC qiymatlarini o'qish.
  • UART-dan yuborish va qabul qilish.
  • PWM ish tsikli registrlarini yangilash.
  • JON yoki I2C aloqasi.

Interruptlar ushbu funktsiyalarni asosiy qismda funktsiya chaqiruvi yoki ichki kod orqali bajarish bilan taqqoslaganda tezda xizmat qiladi.

To'siqlar faqat kerak bo'lganda ishga tushiradi, agar asosiy qismda kodlangan bo'lsa, kod while (1) tsiklining har bir takrorlanishida bajariladi.

7. Mavjud bo'lgan eng yaxshi kompilyatorlardan foydalaning

To'g'ri tuzilgan bo'lsa, kompilyatorlar kodni C-tilidan yig'ilish tiliga tarjima qilishda yuqorida muhokama qilingan ba'zi optimallashtirishlarni avtomatik ravishda amalga oshirishi mumkin. O'zingizning kompilyatoringizdan optimallashtirish variantlarini qidirib toping va iloji bo'lsa kompilyatorlarning professional versiyalariga o'ting, chunki ular yanada kuchliroq kod optimizatorlari.

8. Shartli bayonotlardan aql bilan foydalaning

  • Bir qator if-else bayonotlarini ishlatishda birinchi navbatda eng ehtimoliy shartni saqlang. Shunday qilib, MCU haqiqiy holatni topgandan keyin barcha shartlarni tekshirib chiqishga majbur bo'lmaydi.
  • Switch-case bayonoti odatda if-else tezroq bo'ladi.
  • Bir qator bayonotlar o'rniga nested if-else iboralaridan foydalaning. Ko'pgina bayonotlarga ega bo'lgan if-else bloki eng yomon (oxirgi) holatga optimallashtirish uchun kichik kichik tarmoqlarga bo'linishi mumkin.

9. Inline funktsiyalaridan foydalaning

Kodda faqat bir marta ishlatilishi kerak bo'lgan funktsiyalar statik deb e'lon qilinishi mumkin. Bu kompilyatorni ushbu funktsiyani ichki funktsiyani optimallashtirishga olib keladi va shuning uchun funktsiya chaqiruvi uchun yig'ilish kodi tarjima qilinmaydi.

  • Funksiyani "statik" kalit so'zidan foydalangan holda inline deb e'lon qilish mumkin.

10. Qisqartirilgan ko'chadan foydalaning

Kamaytirilgan tsikl ortib boruvchi tsikl bilan taqqoslaganda kamroq yig'ilish kodini hosil qiladi.

Buning sababi shundaki, o'sish tsiklida tsikl indeksining maksimal qiymatiga etganligini tekshirish uchun tsikl indeksini har bir tsikldagi maksimal qiymat bilan taqqoslash uchun taqqoslash ko'rsatmasi zarur. Aksincha, pasayish tsiklida bu taqqoslash endi kerak emas, chunki pastadir indeksining natija nolga etgan taqdirda SREG-da nol bayrog'ini o'rnatadi.

Agar tsikl yuz marta takrorlanishi kerakligini hisobga olsak, tsikldan bitta ko'rsatmani kamaytirish uni yuz marta bajarilishining oldini oladi, shuning uchun tsikl ko'p marta takrorlanishi kerak bo'lganda ta'sir yanada ahamiyatli bo'ladi.

Saralash

Ushbu maslahatlar foydali bo'lishi mumkin, ammo ularning haqiqiy qo'llanilishi va kuchi dasturchining mahoratiga va uning kodidagi buyruqqa bog'liq. Esingizda bo'lsin, dasturning hajmi har doim ham bajarilish vaqtini belgilamaydi, ba'zi ko'rsatmalar ko'proq soat tsikllarini sarf qilishi mumkin, ikkinchisi esa yana bir bor dasturning ko'nikmalari o'z rolini o'ynashi kerak.

Ushbu maqola aniq va muallifning eng yaxshi bilimlariga mos keladi. Tarkib faqat axborot yoki ko'ngilochar maqsadlar uchun mo'ljallangan va biznes, moliyaviy, yuridik yoki texnik masalalarda shaxsiy maslahat yoki professional maslahat o'rnini bosmaydi.

Bugun Mashhur

Saytda Mashhur

Java misollari: Ragged Array
Kompyuterlar

Java misollari: Ragged Array

Men da tur muhandi iman. Men 15 yildan beri C ++, MFC va .net texnologiyalari bilan i hlayman. Menga video o'yinlar va kitob o'qi h yoqadi.Java-da "yirtiq qator" bu "ma iv qator...
Urikar Pro 3 zarbli massajchini ko'rib chiqish
Kompyuterlar

Urikar Pro 3 zarbli massajchini ko'rib chiqish

Uolter hillington o'zi bilgan mah ulotlar haqida yozadi. Uning maqolalari og'liqni aqla h, elektronika, oatlar va uy-ro'zg'or buyumlariga bag'i hlangan.Bir necha oy oldin men Urika...