Misc

Pengoptimuman Kod dalam Pengawal Mikro

Pengarang: Laura McKinney
Tarikh Penciptaan: 4 April 2021
Tarikh Kemas Kini: 16 Mungkin 2024
Anonim
Tanda Apakah Ini!? Inilah Peraturan Baru Arab Saudi yang Kontroversi
Video.: Tanda Apakah Ini!? Inilah Peraturan Baru Arab Saudi yang Kontroversi

Kandungan

Penulis menyelesaikan projek kejuruteraan tahun terakhirnya dengan pengawal mikro dsPic, memperoleh pengetahuan yang luas mengenai peranti ini.

Kod bahasa C mikrokontroler mungkin memerlukan pengoptimuman dalam aplikasi lanjutan tertentu. Pengoptimuman kod ini diamalkan untuk mengurangkan dua perkara penting:

  1. Saiz Kod: Pengawal mikro dapat menyimpan data dan arahan terhad kerana saiz RAM mereka yang terhad. Oleh itu kod tersebut perlu dioptimumkan, agar instruksi dan memori data yang tersedia dapat digunakan dengan cara yang paling efisien.
  2. Masa Pelaksanaan Kod: Mikrokontroler adalah peranti berurutan yang melaksanakan satu arahan pada satu masa. Setiap arahan pemasangan menggunakan sebilangan kitaran jam untuk melaksanakannya sendiri. Oleh itu, kod tersebut mesti dioptimumkan untuk memastikan bahawa ia menjalankan tugas yang diperlukan dalam bilangan pusingan jam atau arahan pemasangan. Semakin kurang pusingan jam yang digunakan kod, semakin cepat ia berjalan. Ini bermakna aplikasi dapat berjalan lebih cepat kerana masa pemprosesan diminimumkan.

Artikel ini memaparkan petua dan trik yang boleh digunakan untuk mengurangkan ukuran dan masa pelaksanaan kod pengawal mikro.


IDE pengembangan MplabX Microchip akan digunakan untuk menunjukkan contoh jika sesuai.

Cara Mengukur Masa Pelaksanaan Kod Secara Eksperimen

Untuk mendapatkan idea mengenai berapa lama masa yang sebenarnya diperlukan oleh kod anda untuk dilaksanakan dalam masa nyata, anda perlu mengukurnya secara eksperimen. Penganalisis logik dapat digunakan dengan mudah untuk mengukur masa pelaksanaan kod dan mereka yang berminat boleh bertanya mengenai proses ini dari saya melalui e-mel. Di samping ini:

  • Sebilangan penyusun mempunyai kemampuan untuk mengira kitaran jam yang akan digunakan oleh kod.
  • Sebilangan debuger misalnya ICD 3 dari microchip secara langsung dapat mengukur masa pelaksanaan melalui jam randik.

1. Ketahui Kuasa Pemprosesan dan Saiz Memori Pengawal Mikro anda

Tidak selalu frekuensi jam (Mhz) yang memberikan gambaran sebenar kelajuan pemprosesan pengawal mikro, ukuran yang lebih realistik adalah MIPS (arahan mega sesaat) atau jumlah arahan yang dapat dilaksanakan MCU dalam sesaat.

MCU biasanya berkisar antara 60-70 MIPS dalam kategori kelas atas hingga 20 MIPS 8-bit AVR. Pengawal mikro MIPS tinggi mungkin lebih mahal daripada peranti kelas rendah, jadi di sini anda mempunyai pertukaran antara kos dan kelajuan pemprosesan.


Pengawal mikro mempunyai memori berasingan untuk menyimpan data dan kod program. Ukuran kedua-duanya boleh didapati dari lembaran data. Anda mungkin memerlukan MCU dengan saiz memori yang lebih besar jika kod anda besar.

2. Pilihan Pemboleh ubah untuk Pengoptimuman dalam Ukuran Kod

Pengawal mikro mempunyai memori data yang terhad, biasanya antara 1 hingga 4 Kbytes. Dalam kes ini, adalah bijak memilih jenis pemboleh ubah yang paling sesuai mengikut jangkaan tarikh yang disimpan. Jadual di bawah merangkum pemboleh ubah berikut:

Ringkasan pemboleh ubah yang digunakan dalam bahasa C.

Jenis PembolehubahSaiz dalam ByteJulat

bool

1

0 atau 1 sahaja

char

1


-128 hingga 127

int

2

-32,768 hingga 32,767

int tidak bertanda tangan

2

0 hingga 65,535

lama

4

-2,147,483,648 hingga 2,147,483,647

terapung

4

Tepat hingga 6 tempat perpuluhan

berganda

8

Tepat hingga 15 tempat perpuluhan

panjang berganda

10

Tepat hingga 19 tempat perpuluhan

Contoh:

  • Sekiranya dua pemboleh ubah X dan Y akan ditambahkan dan hasilnya disimpan dalam Z tetapi nilai Z dijangka lebih tinggi daripada 65,535 setelah penambahan maka Z boleh dinyatakan sebagai panjang dan X dan Y boleh dinyatakan sebagai tidak ditandatangani int, nilai X dan Y juga tidak dijangka menjadi negatif. Ini akan menjimatkan 04 bait dalam memori data yang sebaliknya akan habis jika semua pemboleh ubah dinyatakan sebagai panjang.
  • Dua pemboleh ubah X dan Y, yang nilainya diharapkan dalam bilangan bulat akan dibahagi, tetapi hasil pembahagian boleh menghasilkan perpuluhan, maka X dan Y dapat dinyatakan int dan hasilnya dapat dinyatakan sebagai pelampung atau ganda bergantung pada ketepatan yang diperlukan.

Pilihan jenis data mungkin penting ketika menyatakan susunan yang mengandungi sebilangan besar elemen.

3. Pilihan Pemboleh ubah untuk Pengoptimuman dalam Waktu Pelaksanaan Kod

  • Ini adalah fakta yang pasti bahawa pengiraan titik terapung mengambil masa lebih lama daripada pengiraan titik tetap. Jangan gunakan pemboleh ubah floating-point di mana nilai perpuluhan tidak diperlukan. Bekerja dengan bilangan bulat yang tidak ditandatangani sedapat mungkin.
  • Pemboleh ubah tempatan lebih disukai daripada pemboleh ubah global. Sekiranya pembolehubah digunakan dalam fungsi hanya maka ia mesti dinyatakan dalam fungsi itu kerana mengakses pemboleh ubah global lebih lambat daripada pemboleh ubah tempatan.
  • MCU 8-bit akan mencari pemboleh ubah bersaiz bait tunggal lebih cepat untuk diakses dan MCU 16-bit akan mencari pemboleh ubah 2-bait lebih mudah diakses kerana panjang alamat yang dihasilkan.

4. Mengoptimumkan Operasi Aritmetik

Operasi aritmetik dapat dioptimumkan dengan cara berikut.

  1. Gunakan jadual mencari nilai pra-perhitungan dan bukannya menilai sinus atau fungsi trigonometri lain atau operasi lain yang hasilnya dapat diketahui sebelumnya dalam kod.
  2. Sekiranya jadual mencari sinus sudah tersimpan dalam memori kosinus dapat dinilai dengan memajukan penunjuk array bersamaan dengan 90 darjah.
  3. Di antara empat operasi aritmetik, pembahagian dan pendaraban memerlukan masa pemprosesan yang paling banyak, dalam praktiknya boleh berada dalam jarak beratus-ratus detik mikro sekiranya berlaku nilai titik terapung.
  4. Gunakan arahan peralihan bit dan bukannya pembahagian dan pendaraban. Arahan peralihan kanan 3 berfungsi untuk membahagi dengan 23 di mana sebagai arahan shift kiri 1 akan berfungsi untuk mengalikan dengan 21.

5. Gunakan Pengawal Mikro Berkeupayaan DSP untuk Pengiraan Intensif

Beberapa pengawal mikro mempunyai unit pemprosesan DSP yang lain daripada ALU konvensional yang dibina mengikut seni bina mereka. Enjin DSP ini diarahkan untuk melakukan pengiraan aritmetik dengan sangat cepat dalam bilangan pusingan jam paling sedikit (satu dalam kebanyakan kes) berkali-kali lebih cepat daripada ALU.

Arahan yang boleh dijalankan oleh pemproses DSP lebih pantas daripada ALU adalah:

  • Arahan bit dan putar.
  • Pendaraban, Pembahagian dan operasi aritmetik lain.
  • Menilai sinus dan fungsi trigonometri lain.
  • Semua operasi DSP seperti FFT, DFT, konvolusi dan penapisan FIR.

Menggunakan mesin DSP mikrokontroler memerlukan:

  • Perpustakaan DSP berasingan dimasukkan ke dalam projek.
  • Nama fungsi berbeza dari perpustakaan matematik standard C-language. Dokumentasi perpustakaan dan fungsi ini boleh didapati dari laman web pengeluar masing-masing.
  • Enjin DSP menggunakan jenis pemboleh ubah yang berbeza 'pecahan'. Ketahui cara menggunakan pemboleh ubah jenis pecahan sebelum meneruskan fungsi perpustakaan dsp.

Perhatikan bahawa fungsi pustaka matematik standard tidak akan menggunakan enjin DSP kerana ia diterjemahkan ke dalam arahan pemasangan ALU.

6. Bekerja dengan Gangguan

Gunakan gangguan untuk melaksanakan fungsi tertentu seperti:

  • Membaca nilai ADC.
  • Menghantar dan menerima dari UART.
  • Mengemas kini daftar kitaran tugas PWM.
  • Komunikasi CAN atau I2C.

Gangguan akan menjalankan fungsi ini dengan cepat berbanding dengan menjalankannya di badan utama melalui panggilan fungsi atau kod sebaris.

Gangguan juga akan memicu hanya apabila diperlukan, sedangkan jika dikodkan di badan utama, kod tersebut akan dijalankan dalam setiap lelaran gelung sementara (1).

7. Gunakan Penyusun yang Terbaik

Penyusun dapat secara automatik melaksanakan beberapa pengoptimuman yang dibincangkan di atas sambil menerjemahkan kod dari bahasa-C ke bahasa pemasangan jika dikonfigurasikan dengan betul. Cari pilihan pengoptimuman dalam penyusun anda dan jika boleh naik taraf ke versi kompilator profesional kerana mereka adalah pengoptimum kod yang lebih kuat.

8. Gunakan Pernyataan Bersyarat dengan bijak

  • Semasa menggunakan siri pernyataan if-else, simpan dahulu keadaan yang paling mungkin. Dengan cara ini MCU tidak perlu mengimbas semua keadaan setelah menemui keadaan yang sebenarnya.
  • Pernyataan case-case biasanya lebih cepat jika if-else.
  • Gunakan penyataan bersarang if-else sebagai ganti rangkaian penyataan. Blok if-else yang mempunyai banyak penyataan boleh dibahagikan kepada sub-cabang yang lebih kecil untuk mengoptimumkan keadaan terburuk (terakhir).

9. Gunakan Fungsi Sebaris

Fungsi yang hanya boleh digunakan sekali dalam kod boleh dinyatakan sebagai statik. Ini akan menjadikan pengkompil mengoptimumkan fungsi tersebut ke fungsi sebaris dan oleh itu tidak ada kod pemasangan yang akan diterjemahkan untuk panggilan fungsi.

  • Fungsi boleh dinyatakan sebaris dengan menggunakan kata kunci 'statik' dengannya.

10. Gunakan Gelung Berkurang

Gelung yang diturunkan akan menghasilkan lebih sedikit kod pemasangan berbanding dengan gelung yang bertambah.

Itu kerana dalam gelung kenaikan, instruksi perbandingan diperlukan untuk membandingkan indeks gelung dengan nilai maksimum di setiap gelung untuk memeriksa apakah indeks gelung mencapai nilai maksimum. Sebaliknya dalam gelung penurunan, perbandingan ini tidak diperlukan lagi kerana hasil penurunan indeks gelung akan menetapkan bendera sifar di SREG jika mencapai sifar.

Memandangkan gelung harus berulang kali seratus kali, mengurangkan satu arahan dari gelung akan menghindarkannya dilaksanakan seratus kali sehingga impaknya cenderung menjadi lebih signifikan ketika gelung harus berulang kali.

Mengakhiri

Petua ini mungkin bermanfaat tetapi aplikasi dan potensi sebenarnya bergantung pada kemahiran pengaturcara dan perintah yang ada pada kodenya. Ingat, ukuran program tidak selalu menentukan masa pelaksanaan, beberapa arahan mungkin menggunakan lebih banyak kitaran jam daripada yang lain jadi sekali lagi kemahiran program harus memainkan peranan mereka.

Artikel ini tepat dan benar sepanjang pengetahuan penulis. Kandungan hanya untuk tujuan maklumat atau hiburan dan tidak menggantikan nasihat peribadi atau nasihat profesional dalam urusan perniagaan, kewangan, undang-undang, atau teknikal.

Popular

Disyorkan Oleh Kami

Cara Menjual Item di Facebook Marketplace
Internet

Cara Menjual Item di Facebook Marketplace

Max memegang B. . dalam komunika i ma a dari IU, M.A. dalam komunika i dari U of I, dan edang mengikuti MBA dari Web ter Univer ity.Pada bulan Oktober 2016, Facebook melancarkan Marketplace, di mana p...
40 Perkara yang Digantikan oleh iPhone
Telefon

40 Perkara yang Digantikan oleh iPhone

Linda (Kaywood) Bilyeu adalah pengarang yang diterbitkan endiri. Buku-bukunya boleh didapati di Amazon. Dia menuli dari hati - tidak ada cara lain.Memiliki iPhone eperti mempunyai geniu di tangan, eti...