Misc

Mikrodenetleyicilerde Kod Optimizasyonu

Yazar: Laura McKinney
Yaratılış Tarihi: 4 Nisan 2021
Güncelleme Tarihi: 16 Mayıs Ayı 2024
Anonim
Arduino Kartı Yerine Sadece Mikrodenetleyiciyi Kullanmak
Video: Arduino Kartı Yerine Sadece Mikrodenetleyiciyi Kullanmak

İçerik

Yazar, son yıl mühendislik projesini dsPic mikro denetleyicileri ile tamamlayarak bu cihazlarla ilgili kapsamlı bilgiler elde etti.

Bir mikro denetleyicinin C dili kodu, bazı gelişmiş uygulamalarda optimizasyon gerektirebilir. Bu kod optimizasyonu, iki önemli şeyi azaltmak için uygulanır:

  1. Kod Boyutu: Mikrodenetleyiciler, RAM'lerinin sınırlı boyutu nedeniyle sınırlı veri ve talimat depolayabilir. Bu nedenle, mevcut talimat ve veri belleğinin en verimli şekilde kullanılabilmesi için kodun optimize edilmesi gerekir.
  2. Kod Yürütme Süreleri: Mikrodenetleyiciler, her seferinde bir talimatı yürüten sıralı cihazlardır. Her bir montaj talimatı, kendisini yürütmek için belirli sayıda saat döngüsü kullanır. Bu nedenle kod, gerekli görevi en az sayıda saat döngüsü veya montaj talimatıyla gerçekleştirmesini sağlamak için optimize edilmelidir. Bir kodun kullandığı saat döngüsü ne kadar azsa, o kadar hızlı çalışır. Bu, işlem sürelerinin en aza indirilmesi nedeniyle uygulamaların daha hızlı çalışabileceği anlamına gelir.

Bu makale, bir mikro denetleyici kodunun boyutunu ve yürütme süresini azaltmak için kullanılabilecek ipuçları ve püf noktaları sunar.


Microchip'in MplabX geliştirme IDE'si, uygun olduğunda örnekleri göstermek için kullanılacaktır.

Kod Yürütme Süresi Deneysel Olarak Nasıl Ölçülür?

Kodunuzun gerçek zamanlı olarak çalıştırılmasının gerçekte ne kadar sürdüğüne dair bir fikir edinmek için, onu deneysel olarak ölçmeniz gerekir. Mantık analizörü, kod yürütme süresini ölçmek için rahatlıkla kullanılabilir ve ilgilenenler bunun için süreci benden e-posta yoluyla sorgulayabilir. Bunun yanında:

  • Bazı derleyiciler, bir kodun tüketeceği saat döngülerini sayma yeteneğine sahiptir.
  • Bazı hata ayıklayıcılar, örneğin mikroçipten gelen ICD 3, bir kronometre aracılığıyla yürütme süresini doğrudan ölçebilir.

1. Mikrodenetleyicinizin İşlemci Gücünü ve Bellek Boyutunu Öğrenin

Bir mikro denetleyicinin işlem hızının gerçek resmini veren her zaman saat frekansı (Mhz) değildir, daha gerçekçi bir ölçü MIPS'dir (saniye başına mega komutlar) veya MCU'nun bir saniyede uygulayabileceği talimat sayısıdır.

MCU'lar genellikle üst sınıf kategoride 60-70 MIPS'den 20 MIPS 8-bit AVR'ye kadar değişir. Yüksek bir MIPS mikro denetleyicisi muhtemelen düşük kaliteli bir cihazdan daha pahalıdır, bu nedenle burada maliyet ve işlem hızı arasında bir değiş tokuşunuz vardır.


Mikro denetleyiciler, verileri ve program kodunu depolamak için ayrı belleğe sahiptir. Her ikisinin de boyutu veri sayfasından bulunabilir. Kodunuz önemli ölçüde büyükse, daha büyük bellek boyutuna sahip bir MCU'ya ihtiyacınız olabilir.

2. Kod Boyutunda Optimizasyon İçin Değişken Seçimi

Mikro denetleyiciler, genellikle 1 ila 4 Kbayt arasında değişen sınırlı veri belleğine sahiptir. Bu durumda, kaydedilen tarihin beklenen aralığına göre en uygun değişken türünü seçmek akıllıca olacaktır. Aşağıdaki tablo bu değişkenleri özetlemektedir:

C dilinde kullanılan değişkenlerin özeti.

Değişken TipBayt cinsinden boyutAralık

bool

1

Sadece 0 veya 1

kömür

1


-128 ila 127

int

2

-32.768 ila 32.767

imzasız int

2

0 ile 65.535

uzun

4

-2.147.483.648 ile 2.147.483.647

şamandıra

4

6 ondalık basamağa kadar hassas

çift

8

15 ondalık basamağa kadar hassas

uzun çift

10

19 ondalık basamağa kadar hassas

Misal:

  • X ve Y iki değişken eklenecekse ve sonuç Z'de saklanacaksa ancak Z'nin değerinin toplamadan sonra 65.535'ten daha yüksek olması bekleniyorsa, Z uzun ve X ve Y işaretsiz olarak bildirilebilir. int, X ve Y değerlerinin de negatif olması beklenmez. Bu, aksi takdirde tüm değişkenler uzun süre açıklanacak olsaydı kullanılabilecek olan veri belleğine 04 bayt kaydedecektir.
  • Değerlerinin tam sayılar halinde olması beklenen iki X ve Y değişkeninin bölünmesi gerekir, ancak bölmenin sonucu bir ondalık verebilir, daha sonra X ve Y int olarak tanımlanabilir ve sonuç, şuna bağlı olarak bir float veya double olarak tanımlanabilir. gereken hassasiyet.

Çok sayıda öğe içeren dizileri bildirirken veri türü seçimi çok önemli olabilir.

3. Kod Yürütme Süresinde Optimizasyon için Değişkenlerin Seçimi

  • Kayan nokta hesaplamalarının sabit nokta hesaplamalarından daha uzun sürdüğü bilinen bir gerçektir. Ondalık değerin gerekli olmadığı bir kayan nokta değişkeni kullanmayın. Mümkün olan her yerde işaretsiz tamsayılarla çalışın.
  • Yerel değişkenler, global değişkenlere tercih edilir. Bir değişken yalnızca bir işlevde kullanılıyorsa, bu işlevde bildirilmelidir çünkü global değişkenlere erişim yerel değişkenlerden daha yavaştır.
  • 8 bitlik bir MCU, erişilmesi daha hızlı tek bayt boyutlu bir değişken bulacaktır ve 16 bitlik bir MCU, üretilen adresin uzunluğu nedeniyle erişimi daha kolay 2 baytlık bir değişken bulacaktır.

4. Aritmetik İşlemleri Optimize Etme

Aritmetik işlemler aşağıdaki şekillerde optimize edilebilir.

  1. Bir Sinüs veya başka bir trigonometrik işlevi veya sonucu önceden kodda bilinebilecek başka herhangi bir işlemi değerlendirmek yerine önceden hesaplanmış değerlerin arama tablolarını kullanın.
  2. Bir sinüs arama tablosunun bellekte zaten saklanması durumunda, dizi işaretçisinin 90 dereceye eşdeğer ilerletilmesiyle bir kosinüs değerlendirilebilir.
  3. Dört aritmetik işlem arasında bölme ve çarpma en fazla işlem süresini alır, pratikte kayan nokta değerleri durumunda yüzlerce mikro saniye aralığında olabilir.
  4. Bölme ve çarpma yerine bit kaydırma komutlarını kullanın. Sağ kaydırma talimatı 3, 2'ye bölmeye yarar3 Sol kaydırma talimatı olarak 1, 2 ile çarpmaya hizmet edecek1.

5. Yoğun Hesaplamalar için DSP Yetenekli Mikrodenetleyici kullanın

Bazı mikro denetleyiciler, mimarilerine yerleşik geleneksel ALU dışında bir DSP işlem birimine sahiptir. Bu DSP motoru, en az sayıda saat döngüsünde (çoğu durumda bir), ALU'dan çok daha hızlı aritmetik hesaplamalar yapmak üzere tasarlanmıştır.

Bir DSP işlemcisinin bir ALU'dan daha hızlı gerçekleştirebileceği talimatlar şunlardır:

  • Bit kaydırma ve döndürme talimatları.
  • Çarpmalar, Bölmeler ve diğer aritmetik işlemler.
  • Sinüsleri ve diğer trigonometrik fonksiyonları değerlendirme.
  • FFT, DFT, evrişim ve FIR filtreleme gibi tüm DSP işlemleri.

Bir mikro denetleyicinin DSP motorunu kullanmak şunları gerektirir:

  • Ayrı DSP kitaplıkları projeye dahil edilmiştir.
  • Fonksiyonların isimleri, C dilinin standart matematik kitaplığından farklıdır. Bu kitaplıkların ve işlevlerin dokümantasyonu, ilgili üreticilerin web sitesinden elde edilebilir.
  • DSP motoru, farklı bir değişken türü olan 'kesirli' kullanır. Dsp kitaplık işlevlerine geçmeden önce kesirli tür değişkenlerini nasıl kullanacağınızı öğrenin.

Standart matematik kitaplığı işlevlerinin, ALU montaj talimatlarına çevrildikleri için DSP motorunu çağırmayacağını unutmayın.

6. Kesintilerle Çalışın

Aşağıdakiler gibi belirli işlevleri gerçekleştirmek için kesintileri kullanın:

  • ADC değerleri okunuyor.
  • UART'tan gönderme ve alma.
  • PWM görev döngüsü kayıtlarını güncelleme.
  • CAN veya I2C iletişimi.

Kesmeler, ana gövdede bir işlev çağrısı veya satır içi kod yoluyla gerçekleştirmeye kıyasla bu işlevlere daha hızlı hizmet verir.

Kesmeler ayrıca yalnızca gerektiğinde tetiklenir, oysa ana gövdede kodlanırsa kod while (1) döngüsünün her yinelemesinde çalıştırılır.

7. Mevcut En İyi Derleyicileri Kullanın

Derleyiciler, uygun şekilde yapılandırılmışsa, kodu C dilinden derleme diline çevirirken yukarıda tartışılan optimizasyonlardan bazılarını otomatik olarak uygulayabilir. Derleyicinizdeki en iyileştirme seçeneklerini arayın ve mümkünse derleyicilerin profesyonel sürümlerine yükseltin, çünkü bunlar daha güçlü kod iyileştiricileridir.

8. Koşullu İfadeleri Akıllıca Kullanın

  • Bir dizi if-else ifadesini kullanırken en olası koşulu ilk önce koruyun. Bu şekilde, MCU gerçek koşulu bulduktan sonra tüm koşulları taramak zorunda kalmayacaktır.
  • Switch-case ifadesi genellikle if-else'ten daha hızlıdır.
  • Bir dizi ifade yerine iç içe geçmiş if-else ifadeleri kullanın. Birçok ifadeye sahip bir if-else bloğu, en kötü durum (son) koşulu optimize etmek için daha küçük alt dallara bölünebilir.

9. Satır İçi İşlevleri Kullanın

Kodda yalnızca bir kez kullanılacak işlevler statik olarak bildirilebilir. Bu, derleyicinin bu işlevi bir satır içi işlev için optimize etmesini sağlar ve dolayısıyla işlev çağrısı için hiçbir derleme kodu çevrilmez.

  • Bir işlev, onunla birlikte 'statik' anahtar sözcüğü kullanılarak satır içi olarak bildirilebilir.

10. Azaltılmış Döngüler Kullanın

Azaltılmış bir döngü, artırılmış bir döngü ile karşılaştırıldığında daha az montaj kodu üretecektir.

Bunun nedeni, bir artış döngüsünde, döngü indeksinin maksimum değere ulaşıp ulaşmadığını kontrol etmek için döngü indeksini her döngüdeki maksimum değerle karşılaştırmak için bir karşılaştırma talimatına ihtiyaç duyulmasıdır. Aksine, bir azaltma döngüsünde, bu karşılaştırmaya artık gerek yoktur, çünkü döngü indeksinin azaltılmış sonucu, sıfıra ulaşırsa SREG'de sıfır bayrağını ayarlayacaktır.

Döngünün yüzlerce kez yinelenmesi gerektiği göz önüne alındığında, döngüden bir talimatı azaltmak, onun yüzlerce kez yürütülmesini önleyecektir, bu nedenle döngü birçok kez yinelemek zorunda kaldığında etki muhtemelen daha önemli olacaktır.

Sarma

Bu ipuçları yardımcı olabilir ancak bunların gerçek uygulama ve gücü, programcının becerisine ve kodunda sahip olduğu komuta bağlıdır. Unutmayın, programın boyutu her zaman yürütme sürelerini belirlemez, bazı komutlar diğerinden daha fazla saat döngüsü tüketebilir, bu nedenle bir kez daha programın becerileri kendi rolünü oynamak zorundadır.

Bu makale doğru ve yazarın bildiği kadarıyla doğrudur. İçerik yalnızca bilgilendirme veya eğlence amaçlıdır ve ticari, mali, hukuki veya teknik konularda kişisel danışmanlık veya profesyonel tavsiyelerin yerini almaz.

Sitede Popüler

Portalda Popüler

Ürün İncelemesi: iClever USB-C Duvar Şarj Cihazı (18W Güç Dağıtımı)
Bilgisayarlar

Ürün İncelemesi: iClever USB-C Duvar Şarj Cihazı (18W Güç Dağıtımı)

Krzy ztof, Apple, am ung, Google ve Amazon gibi şirketlerin en on hikayelerini araştıran ömür boyu ürecek bir teknoloji bağımlı ıdır.İClever 18 W U B-C Duvar Tipi Şarj Cihazı w / PD, U ...
Başlamanıza Yardımcı Olacak En İyi On Windows 7 Komut Satırı "CMD İstemi" Komutu
Bilgisayarlar

Başlamanıza Yardımcı Olacak En İyi On Windows 7 Komut Satırı "CMD İstemi" Komutu

En İyi Window 7 cmd'leri (komut kon olu aracılığıyla) genellikle PC kullanıcıları tarafından atlanır. Belki onlara na ıl ulaşacaklarını, ne olduklarını veya ne yapabileceklerini bilmiyorlardır. Be...