Misc

Mikro nəzarətlərdə kod optimallaşdırması

Müəllif: Laura McKinney
Yaradılış Tarixi: 4 Aprel 2021
YeniləMə Tarixi: 16 BiləR 2024
Anonim
Mikro nəzarətlərdə kod optimallaşdırması - Misc
Mikro nəzarətlərdə kod optimallaşdırması - Misc

MəZmun

Müəllif son cihaz mühəndisliyi layihəsini dsPic mikro nəzarətçiləri ilə tamamlayaraq bu cihazlarda geniş məlumat əldə etdi.

Mikro nəzarətçinin C dili kodu müəyyən inkişaf etmiş tətbiqlərdə optimallaşdırma tələb edə bilər. Bu kod optimallaşdırması iki vacib şeyi azaltmaq üçün tətbiq olunur:

  1. Kod ölçüsü: Mikro nəzarətçilər RAM-in ölçüsü məhdud olduğundan məhdud məlumatları və təlimatları saxlaya bilər. Bu səbəbdən kodun optimallaşdırılması lazımdır ki, mövcud təlimat və məlumat yaddaşından ən səmərəli şəkildə istifadə edilsin.
  2. Kod İcra müddəti: Mikro nəzarətçilər bir dəfəyə bir təlimatı yerinə yetirən ardıcıl qurğulardır. Hər bir montaj təlimatı özünü icra etmək üçün müəyyən sayda saat dövrü sərf edir. Bu səbəbdən kod, ən azı saat dövrü və ya montaj təlimatında tələb olunan tapşırığı yerinə yetirməsini təmin etmək üçün optimallaşdırılmalıdır. Bir koddan nə qədər az saat dövrü istifadə edərsə, o qədər sürətli işləyir. Bu, tətbiq müddətlərinin minimuma endirildiyi üçün tətbiqlərin daha sürətli işləməsi deməkdir.

Bu məqalədə mikro nəzarətçi kodunun ölçüsünü və icra müddətini azaltmaq üçün istifadə edilə bilən tövsiyələr və tövsiyələr təqdim olunur.


Uyğun olduğu yerlərdə nümunələrin nümayişi üçün Microchip-in MplabX inkişaf IDE-si istifadə ediləcəkdir.

Kod İcrası Vaxtını Eksperimental olaraq necə ölçmək olar

Kodunuzun real vaxtda həyata keçirmək üçün əslində nə qədər vaxt apardığına dair bir fikir əldə etmək üçün onu eksperimental olaraq ölçməlisiniz. Kodun yerinə yetirilmə müddətini ölçmək üçün məntiqi analizatordan rahatlıqla istifadə edilə bilər və maraqlananlar bunun üçün prosesi e-poçt vasitəsilə məndən öyrənə bilərlər. Bunun yanında:

  • Bəzi tərtibçilər bir kodun istifadə edəcəyi saat dövrlərini sayma qabiliyyətinə malikdirlər.
  • Bəzi səhvlər, məsələn, mikroçipdən olan ICD 3 birbaşa saniyəölçən vasitəsilə icra müddətini ölçə bilər.

1. Mikro nəzarətçinizin işləmə gücünü və yaddaş ölçüsünü bilin

Mikro nəzarətçinin işləmə sürətinin həqiqi mənzərəsini verən həmişə saat tezliyi (Mhz) deyil, daha real bir ölçü MIPS (saniyədə meqa təlimat) və ya MCU-nun bir saniyədə yerinə yetirə biləcəyi təlimat sayıdır.

MCU'lar adətən yüksək səviyyəli kateqoriyada 60-70 MIPS ilə 20 MIPS 8 bit AVR arasında dəyişir. Yüksək bir MIPS mikro nəzarətçisinin, daha sonra aşağı səviyyəli bir cihazdan daha bahalı olması ehtimalı var, beləliklə burada maliyet və işləmə sürəti arasında mübadilə var.


Mikro nəzarətçilər məlumatları və proqram kodlarını saxlamaq üçün ayrıca yaddaşa malikdirlər. Hər ikisinin ölçüsü məlumat səhifəsindən tapıla bilər. Kodunuz olduqca böyükdürsə, daha böyük yaddaş ölçüsü olan bir MCU-ya ehtiyacınız ola bilər.

2. Kod ölçüsündə optimallaşdırma üçün dəyişənlərin seçimi

Mikro kontrollerlər adətən 1 ilə 4 Kbayt arasında dəyişən məhdud yaddaş yaddaşına malikdirlər. Bu vəziyyətdə, saxlanılan tarixin gözlənilən aralığına görə ən uyğun dəyişən növünü seçmək ağıllıdır. Aşağıdakı cədvəldə bu dəyişənlər ümumiləşdirilmişdir:

C dilində istifadə olunan dəyişənlərin xülasəsi.

Dəyişən növüBoyut ölçüsüMenzil

bool

1

Yalnız 0 və ya 1

char

1


-128-dən 127-ə qədər

int

2

-32,768-dən 32,767-ə qədər

imzasız int

2

0-dan 65.535-ə qədər

uzun

4

-2,147,483,648 ilə 2,147,483,647 arasında

sal

4

6-ya qədər dəqiqliklə

ikiqat

8

15-ə qədər dəqiqlik

uzun ikiqat

10

19-a qədər dəqiqlik

Misal:

  • İki dəyişən X və Y əlavə edilərsə və nəticə Z-də saxlanılsa da Z-nin dəyərinin 65.535-dən daha yüksək olacağı gözlənilirsə, əlavə edildikdən sonra Z uzun və X və Y imzasız elan edilə bilər int, X və Y dəyərlərinin də mənfi olacağı gözlənilmir. Bu, bütün dəyişənlərin uzun müddət elan olunacağı təqdirdə istifadə oluna bilən məlumatların yaddaşında 04 bayta qənaət edəcəkdir.
  • Dəyərlərinin tam ədədə olması gözlənilən iki dəyişən X və Y bölünməlidir, lakin bölünmənin nəticəsi ondalık verə bilər, sonra X və Y int elan edilə bilər və nəticə asılı olaraq float və ya ikiqat elan edilə bilər. dəqiqlik tələb olunur.

Çox sayda element olan massivləri elan edərkən məlumat növünün seçimi həlledici ola bilər.

3. Kodun İcrası Zamanında Optimizasiya üçün Dəyişənlərin Seçimi

  • Üzən nöqtəli hesablamaların sabit nöqtəli hesablamalara nisbətən daha uzun sürdüyü müəyyən bir həqiqətdir. Ondalık dəyərin tələb olunmadığı yerdə üzən nöqtəli dəyişən istifadə etməyin. İmkan daxilində imzasız tam ədədlərlə işləyin.
  • Yerli dəyişənlərə qlobal dəyişənlərə üstünlük verilir. Bir funksiyada yalnız bir dəyişən istifadə olunursa, o zaman bu funksiyada elan edilməlidir, çünki qlobal dəyişənlərə giriş yerli dəyişənlərdən daha yavaşdır.
  • 8 bitlik bir MCU əldə etmək üçün daha sürətli bir bayt ölçülü dəyişən tapacaq və 16 bitlik bir MCU, yaradılan ünvanın uzunluğu səbəbindən 2 baytlıq dəyişəni asanlıqla tapacaqdır.

4. Hesab əməllərinin optimallaşdırılması

Hesab əməlləri aşağıdakı yollarla optimallaşdırıla bilər.

  1. Sine və ya hər hansı digər trigonometric funksiyanı və ya nəticəsi kodda əvvəlcədən bilinən hər hansı bir əməliyyatı qiymətləndirmək əvəzinə əvvəlcədən hesablanmış dəyərlərin axtarış cədvəllərindən istifadə edin.
  2. Sinus axtarış cədvəlinin artıq yaddaşda saxlanması halında, kosinus 90 dərəcəyə bərabər olan bir sıra göstəricisini irəliləyərək qiymətləndirilə bilər.
  3. Dörd hesab əməliyyatı arasında bölmə və vurma ən çox işləmə vaxtını alır, praktikada yüzlərlə nöqtə dəyərində yüzlərlə mikro saniyə aralığında ola bilər.
  4. Bölmə və vurma yerinə bit sürüşmə təlimatından istifadə edin. Sağ növbəli təlimat 3 2-yə bölünməyə xidmət edir3 burada bir yerdəyişmə əmri 1 olaraq 2 ilə çoxalmağa xidmət edəcəkdir1.

5. Güclü Hesablamalar üçün DSP Qabiliyyətli Mikro nəzarətçi istifadə edin

Bəzi mikro nəzarətçilər DSP işləmə vahidinə sahibdirlər, digərlərindən sonra ənənəvi ALU-nun arxitekturasına daxil edilmişdir. Bu DSP mühərriki hesablama hesablamalarını ALU-dan sonra ən çox saat dövriyyəsində (əksər hallarda biri) çox tez bir şəkildə yerinə yetirməyə yönəldilmişdir.

DSP prosessorunun ALU-dan sonra daha sürətli həyata keçirə biləcəyi təlimatlar bunlardır:

  • Təlimatları bit dəyişdirin və döndərin.
  • Çarpma, Bölmə və digər hesab əməliyyatları.
  • Sinələrin və digər trigonometrik funksiyaların qiymətləndirilməsi.
  • FFT, DFT, qarışıqlıq və FIR süzgəci kimi bütün DSP əməliyyatları.

Mikro nəzarətçinin DSP mühərrikinin istifadəsi aşağıdakıları tələb edir:

  • Ayrı-ayrı DSP kitabxanaları layihəyə daxil edilmişdir.
  • Funksiyaların adları C dilinin standart riyaziyyat kitabxanasından fərqlənir. Bu kitabxanaların və funksiyaların sənədləşdirilməsi müvafiq istehsalçıların veb saytından əldə edilə bilər.
  • DSP mühərriki fərqli bir dəyişən tip 'fraksiya' istifadə edir. DSP kitabxana funksiyalarına başlamazdan əvvəl kəsr tipli dəyişənlərin necə istifadə ediləcəyini öyrənin.

Standart riyaziyyat kitabxanası funksiyalarının DSP mühərrikini işə salmayacağını, çünki ALU montaj təlimatlarına çevrildiklərini unutmayın.

6. Interrupts ilə işləyin

Xüsusi funksiyaları yerinə yetirmək üçün fasilələrdən istifadə edin:

  • ADC dəyərlərinin oxunması.
  • UART-dan göndərmə və qəbul.
  • PWM vəzifə dövrü qeydlərinin yenilənməsi.
  • CAN və ya I2C rabitə.

Kesintiler, bu funksiyaları bir əsas çağırış və ya daxili kod yolu ilə yerinə yetirməklə müqayisədə tez bir zamanda xidmət göstərəcəkdir.

Fasilələr yalnız tələb olunduqda tetikleyecek, halbuki ana gövdədə kodlaşdırıldığı təqdirdə, while (1) dövrünün hər təkrarında icra ediləcəkdir.

7. Mümkün olan ən yaxşı tərtibçilərdən istifadə edin

Kompilyatorlar kodu düzgün tərtib edildiyi halda C dilindən məclis dilinə tərcümə edərkən yuxarıda müzakirə olunan bəzi optimallaşdırmaları avtomatik olaraq həyata keçirə bilər. Kompilyatorunuzda optimallaşdırma seçimlərinə baxın və mümkünsə daha güclü kod optimizatorları olduqları üçün kompilyatorların peşəkar versiyalarına keçin.

8. Şərti ifadələrdən ağıllı şəkildə istifadə edin

  • Bir sıra if-else ifadələrindən istifadə edərkən ilk ehtimal olunan şərti əvvəlcə saxlayın. Bu şəkildə MCU həqiqi vəziyyəti tapdıqdan sonra bütün şərtləri nəzərdən keçirməli olmayacaqdır.
  • Switch-case ifadəsi ümumiyyətlə if-else-dən daha sürətli olur.
  • Bir sıra ifadələrin yerinə nested if-else ifadələrini istifadə edin. Bir çox ifadəyə sahib bir if-else bloku ən pis vəziyyətə (son) vəziyyəti optimallaşdırmaq üçün daha kiçik alt qollara bölünə bilər.

9. İnline funksiyaları istifadə edin

Kodda yalnız bir dəfə istifadə ediləcək funksiyalar statik elan edilə bilər. Bu, tərtibçinin həmin funksiyanı bir sıra funksiyasına optimallaşdırmasını təmin edəcək və bu səbəbdən funksiya çağırışı üçün heç bir montaj kodu tərcümə olunmayacaqdır.

  • Bir funksiya 'statik' açar sözündən istifadə edərək satır daxilində elan edilə bilər.

10. Azaldılmış Döngələrdən istifadə edin

Azaldılmış döngə, artırılmış döngə ilə müqayisədə daha az montaj kodu yaradacaqdır.

Bunun səbəbi bir artım döngəsində, loop indeksinin maksimum dəyərə çatdığını yoxlamaq üçün hər bir dövrədəki dövr indeksini maksimum dəyəri ilə müqayisə etmək üçün bir müqayisə təlimatı lazımdır. Əksinə bir azalma döngəsində bu müqayisə artıq lazım deyil, çünki döngü indeksinin azalmış nəticəsi sıfıra çatsa SREG-də sıfır bayrağı təyin edəcəkdir.

Döngünün yüz dəfə təkrarlanması lazım olduğunu nəzərə alsaq, döngədən bir təlimatı azaltmaq onun yüz dəfə yerinə yetirilməsinin qarşısını alacaq, beləliklə döngənin dəfələrlə təkrarlanması lazım olduqda təsir daha əhəmiyyətli olacaqdır.

Qablaşdırma

Bu tövsiyələr faydalı ola bilər, lakin onların həqiqi tətbiqi və gücü proqramçı bacarığından və kodundakı əmrdən asılıdır. Unutmayın, proqramın ölçüsü hər zaman icra müddətini müəyyənləşdirmir, bəzi təlimatlar daha çox saat dövrü istehlak edə bilər, sonra digərinə görə bir daha proqramın bacarıqları öz rolunu oynamalıdır.

Bu məqalə müəllifin bildiyi qədər dəqiq və doğrudur. Məzmun yalnız məlumat və ya əyləncə məqsədi daşıyır və iş, maliyyə, hüquqi və ya texniki məsələlərdə şəxsi məsləhət və ya peşəkar məsləhət əvəz etmir.

Portalın MəQaləLəRi

Tövsiyə Edirik

Daha yaxşı və daha oxunaqlı kod yazmaq üçün 7 göstəriş
Kompüter

Daha yaxşı və daha oxunaqlı kod yazmaq üçün 7 göstəriş

Müxtəlif layihələr üçün ən yaxşı kodu necə yazacağım barədə mə ləhət verməyi evirəm.İn anlar ilk dəfə proqramlaşdırma öyrənməyə başladıqda, çox vaxt onun məntiqi hi ə i c...
Podkastın marketinqi və podkastlarla marketinq: hər ikisinin problemi
Internet

Podkastın marketinqi və podkastlarla marketinq: hər ikisinin problemi

Heidi Thorne, məşqçilər, mə ləhətçilər və oloprenlər üçün atış və marketinq mövzularında ixti a laşmış bir müəllif və iş adamıdır.Bu günlərdə marketinq mantrala...