Cara Menyiapkan Tolok Ukur Kinerja dan Profiling pada STM32 MCU
Dalam dunia mikrokontroler (MCU) yang serba cepat, khususnya dengan popularitas STM32 MCU, optimasi kinerja adalah hal terpenting. Memastikan kode Anda berjalan secara efisien dan menggunakan sumber daya secara optimal sangat penting untuk berbagai aplikasi, mulai dari sistem tertanam hingga perangkat IoT. Artikel ini adalah panduan komprehensif tentang cara menyiapkan tolok ukur kinerja dan profiling pada STM32 MCU. Kami akan membahas alat, teknik, dan praktik terbaik yang diperlukan untuk menganalisis dan mengoptimalkan kode Anda untuk kinerja maksimal.
Mengapa Tolok Ukur dan Profiling Penting?
Sebelum kita mempelajari detail teknis, mari kita pahami mengapa tolok ukur dan profiling sangat penting untuk pengembangan STM32.
- Identifikasi Hambatan: Tolok ukur dan profiling membantu Anda mengidentifikasi bagian spesifik dari kode Anda yang menghabiskan sumber daya paling banyak, seperti waktu pemrosesan atau memori.
- Optimasi Kinerja: Setelah Anda mengidentifikasi hambatan, Anda dapat memfokuskan upaya optimasi Anda pada area-area ini untuk meningkatkan kinerja secara keseluruhan.
- Penggunaan Daya: Dalam aplikasi bertenaga baterai, mengoptimalkan kinerja dapat secara langsung memengaruhi masa pakai baterai. Profiling membantu Anda menemukan dan mengurangi kode haus daya.
- Validasi: Tolok ukur menyediakan cara untuk memvalidasi bahwa optimasi Anda benar-benar meningkatkan kinerja. Anda dapat mengukur kinerja sebelum dan sesudah perubahan untuk melihat hasilnya.
- Pembandingan: Tolok ukur memungkinkan Anda membandingkan kinerja kode Anda di berbagai platform atau konfigurasi perangkat keras untuk membuat keputusan yang tepat.
Prasyarat
Sebelum Anda mulai menyiapkan tolok ukur dan profiling, pastikan Anda memiliki prasyarat berikut:
- STM32 MCU: Pilih STM32 MCU yang sesuai dengan kebutuhan proyek Anda. Seri F4, F7, dan H7 sangat populer karena kemampuannya berkinerja tinggi.
- Lingkungan Pengembangan: Siapkan lingkungan pengembangan dengan IDE seperti STM32CubeIDE, Keil MDK, atau IAR Embedded Workbench.
- Alat Debugging: Investasikan dalam alat debugging yang bagus, seperti ST-LINK/V2 atau J-Link, untuk terhubung ke MCU Anda untuk debugging dan profiling.
- Pemahaman C/C++: Keakraban yang kuat dengan pemrograman C/C++ sangat penting, karena ini adalah bahasa utama yang digunakan untuk pengembangan STM32.
Alat dan Teknik untuk Tolok Ukur dan Profiling
Beberapa alat dan teknik tersedia untuk tolok ukur dan profiling kode STM32 Anda. Mari kita jelajahi opsi yang paling umum:
1. Debugger dengan Profiling
Sebagian besar IDE menawarkan kemampuan debugging bawaan, termasuk fitur profiling. Alat-alat ini memungkinkan Anda untuk menjalankan kode Anda langkah demi langkah, menetapkan breakpoint, dan memeriksa variabel. Mereka juga dapat memberikan informasi tentang waktu eksekusi fungsi dan penggunaan memori.
Cara Menggunakan Debugger untuk Profiling:
- Atur Breakpoint: Tempatkan breakpoint di titik-titik strategis dalam kode Anda yang ingin Anda profilkan.
- Jalankan Debugger: Jalankan debugger dan biarkan kode Anda berjalan hingga mencapai breakpoint.
- Periksa Statistik: Gunakan debugger untuk memeriksa statistik waktu eksekusi fungsi, penggunaan memori, dan sumber daya relevan lainnya.
Contoh (STM32CubeIDE):
STM32CubeIDE menyediakan perspektif Debug dengan berbagai tampilan, termasuk:
- Tampilan Register: Memungkinkan Anda untuk memeriksa nilai-nilai register MCU.
- Tampilan Memori: Memungkinkan Anda untuk melihat konten memori.
- Tampilan Disassembly: Menampilkan kode yang di disassembled, berguna untuk analisis tingkat rendah.
Kelebihan:
- Mudah digunakan jika Anda sudah menggunakan debugger untuk pengembangan.
- Memberikan informasi real-time tentang eksekusi kode.
Kekurangan:
- Mungkin memperkenalkan overhead karena proses debugging, yang dapat memengaruhi akurasi pengukuran kinerja.
- Mungkin tidak cocok untuk profiling jangka panjang atau aplikasi waktu nyata.
2. Unit Trace CoreSight
Unit Trace CoreSight adalah fitur canggih yang tersedia di banyak STM32 MCU. Ini memungkinkan Anda untuk melacak eksekusi kode secara non-intrusif dan merekam data jejak untuk analisis selanjutnya. CoreSight sangat berguna untuk profiling aplikasi waktu nyata tanpa memengaruhi perilakunya.
Komponen CoreSight:
- Embedded Trace Macrocell (ETM): Melacak eksekusi instruksi.
- Instrumentation Trace Macrocell (ITM): Memungkinkan perangkat lunak untuk menghasilkan pesan jejak.
- Serial Wire Output (SWO): Mengirimkan data jejak ke alat debug.
Cara Menggunakan CoreSight untuk Profiling:
- Konfigurasikan CoreSight: Konfigurasikan modul CoreSight di kode Anda atau menggunakan alat konfigurasi, seperti STM32CubeMX.
- Aktifkan Pelacakan: Aktifkan pelacakan menggunakan ETM atau ITM.
- Kumpulkan Data Jejak: Jalankan kode Anda dan kumpulkan data jejak menggunakan alat debugging seperti ST-LINK/V3 atau J-Trace.
- Analisis Data Jejak: Analisis data jejak menggunakan alat jejak khusus untuk mengidentifikasi hambatan kinerja dan mengoptimalkan kode Anda.
Contoh (Keil MDK):
Keil MDK mendukung CoreSight dan menyediakan alat untuk mengumpulkan dan menganalisis data jejak.
- Konfigurasikan Pengaturan Jejak: Dalam pengaturan proyek Keil, konfigurasikan pengaturan jejak untuk mengaktifkan CoreSight dan menentukan opsi pelacakan.
- Gunakan Analisis Jejak: Keil MDK menawarkan tampilan “Analisis Jejak” yang menampilkan data jejak, termasuk hitungan fungsi, waktu eksekusi, dan grafik panggilan.
Kelebihan:
- Profiling non-intrusif, yang meminimalkan pengaruh pada perilaku kode.
- Informasi rinci tentang eksekusi kode, termasuk hitungan fungsi dan waktu eksekusi.
- Cocok untuk aplikasi waktu nyata.
Kekurangan:
- Membutuhkan alat debugging dan perangkat lunak analisis jejak khusus.
- Konfigurasi dan analisis data jejak bisa jadi kompleks.
3. Fungsi Waktu CPU
Salah satu metode paling mendasar untuk mengukur kinerja adalah dengan menggunakan fungsi waktu CPU. Teknik ini melibatkan pengukuran waktu yang dibutuhkan untuk mengeksekusi potongan kode tertentu dengan mengambil stempel waktu sebelum dan sesudah eksekusi. STM32 MCU menyediakan timer dan penghitung yang dapat Anda gunakan untuk keperluan ini.
Cara Menggunakan Fungsi Waktu CPU:
- Pilih Timer: Pilih timer yang sesuai di STM32 MCU Anda. Timer beresolusi tinggi seperti DWT (Data Watchpoint and Trace) counter sangat ideal untuk pengukuran yang akurat.
- Baca Counter: Sebelum dan sesudah potongan kode yang ingin Anda tolak ukur, baca nilai counter timer.
- Hitung Waktu yang Berlalu: Kurangi stempel waktu mulai dari stempel waktu akhir untuk mendapatkan waktu yang berlalu.
- Konversikan ke Unit Waktu: Konversikan waktu yang berlalu ke unit waktu yang bermakna, seperti mikrodetik atau milidetik.
Contoh (DWT):
DWT counter adalah peripheral yang kuat untuk fungsi waktu CPU di STM32 MCU.
#include "stm32f4xx_hal.h"
// Inisialisasi DWT
void DWT_Init(void) {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // Aktifkan tracing
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; // Aktifkan penghitung siklus
}
// Dapatkan jumlah siklus saat ini
uint32_t DWT_GetCycleCount(void) {
return DWT->CYCCNT;
}
int main(void) {
HAL_Init();
DWT_Init();
uint32_t start, end, cycles;
float time_us;
start = DWT_GetCycleCount();
// Potongan kode untuk diukur
HAL_Delay(100); // Contoh: Menunda selama 100 ms
end = DWT_GetCycleCount();
cycles = end - start;
// Hitung waktu dalam mikrodetik (asumsi: jam sistem 168 MHz)
time_us = (float)cycles / (SystemCoreClock / 1000000.0f);
// Gunakan variabel 'time_us' untuk output atau analisis
}
Kelebihan:
- Sederhana dan mudah diimplementasikan.
- Memberikan pengukuran yang akurat dari waktu eksekusi kode.
Kekurangan:
- Membutuhkan modifikasi kode.
- Mungkin memperkenalkan overhead karena pembacaan timer.
- Tidak memberikan informasi tentang penggunaan memori atau perilaku sistem lainnya.
4. Statis Analisis Kode
Alat analisis kode statis menganalisis kode Anda tanpa benar-benar menjalankannya. Alat-alat ini dapat membantu Anda mendeteksi masalah kinerja potensial, seperti kompleksitas yang tidak perlu, kebocoran memori, dan kesalahan pengkodean yang dapat memengaruhi kinerja.
Cara Menggunakan Analisis Kode Statis:
- Pilih Alat: Pilih alat analisis kode statis yang sesuai dengan lingkungan pengembangan Anda. Pilihan populer termasuk SonarQube, PClint, dan cppcheck.
- Konfigurasikan Alat: Konfigurasikan alat dengan aturan dan pemeriksa yang relevan untuk proyek Anda.
- Analisis Kode: Jalankan analisis pada basis kode Anda.
- Tinjau Hasil: Tinjau hasil dan atasi masalah kinerja potensial yang diidentifikasi oleh alat.
Contoh (SonarQube):
SonarQube adalah platform sumber terbuka yang kuat untuk analisis kode statis.
- Instal dan Konfigurasikan SonarQube: Siapkan server SonarQube dan konfigurasi dengan aturan dan profil kualitas yang sesuai.
- Analisis Proyek Anda: Integrasikan analisis SonarQube dengan build proyek Anda.
- Tinjau Laporan: SonarQube menghasilkan laporan terperinci yang menyoroti potensi masalah kinerja, kerentanan keamanan, dan pelanggaran standar pengkodean.
Kelebihan:
- Dapat mendeteksi masalah kinerja potensial di awal siklus pengembangan.
- Meningkatkan kualitas kode dan pemeliharaan.
Kekurangan:
- Mungkin menghasilkan positif palsu.
- Membutuhkan waktu untuk mengonfigurasi dan mengintegrasikan dengan alur kerja pengembangan Anda.
5. Analisis Memori
Penggunaan memori adalah aspek penting dari optimasi kinerja, terutama dalam sistem tertanam dengan sumber daya memori terbatas. Analisis memori membantu Anda memahami bagaimana kode Anda mengalokasikan dan menggunakan memori, memungkinkan Anda untuk mengidentifikasi kebocoran memori, fragmenasi, dan inefisiensi memori lainnya.
Cara Melakukan Analisis Memori:
- Gunakan Alat Profiling Memori: Gunakan alat profiling memori seperti Valgrind, Memcheck, atau alat khusus MCU yang disediakan oleh IDE Anda.
- Instrumentasi Kode Anda: Instrumentasi kode Anda untuk melacak alokasi dan dealokasi memori.
- Jalankan Kode Anda: Jalankan kode Anda dengan alat profiling memori yang diaktifkan.
- Analisis Laporan: Analisis laporan yang dihasilkan oleh alat untuk mengidentifikasi kebocoran memori, fragmenasi, dan masalah penggunaan memori lainnya.
Contoh (Valgrind):
Valgrind adalah alat profil memori sumber terbuka yang populer.
- Instal Valgrind: Instal Valgrind di sistem pengembangan Anda.
- Jalankan Kode Anda dengan Memcheck: Gunakan alat Memcheck Valgrind untuk menjalankan kode Anda dan mendeteksi kesalahan terkait memori.
- Analisis Output: Memcheck menghasilkan laporan yang menyoroti kebocoran memori, akses memori yang tidak valid, dan masalah memori lainnya.
Kelebihan:
- Membantu mengidentifikasi kebocoran memori dan masalah penggunaan memori lainnya.
- Meningkatkan stabilitas dan keandalan kode.
Kekurangan:
- Mungkin memperkenalkan overhead kinerja yang signifikan.
- Mungkin membutuhkan instrumentasi kode.
6. Sistem Operasi Real-Time (RTOS) Profiling
Jika Anda menggunakan RTOS di STM32 MCU Anda, profiling perilaku RTOS menjadi penting. Profiling RTOS membantu Anda memahami bagaimana tugas-tugas Anda menjadwalkan, menggunakan sumber daya, dan berinteraksi satu sama lain. Informasi ini dapat membantu Anda mengoptimalkan kinerja sistem Anda dan mencegah masalah terkait waktu nyata.
Cara Melakukan Profiling RTOS:
- Gunakan Alat Profiling RTOS: Banyak RTOS, seperti FreeRTOS dan Zephyr, menyediakan alat profiling bawaan atau mendukung alat pihak ketiga.
- Aktifkan Pelacakan RTOS: Aktifkan fitur pelacakan RTOS di konfigurasi RTOS Anda.
- Kumpulkan Data Pelacakan: Jalankan kode Anda dan kumpulkan data pelacakan menggunakan alat debugging.
- Analisis Data Pelacakan: Analisis data pelacakan untuk mengidentifikasi masalah penjadwalan tugas, konflik sumber daya, dan masalah terkait waktu nyata lainnya.
Contoh (FreeRTOS+Trace):
FreeRTOS+Trace adalah alat profiling komersial untuk FreeRTOS.
- Integrasikan FreeRTOS+Trace: Integrasikan FreeRTOS+Trace dengan proyek FreeRTOS Anda.
- Konfigurasikan Pelacakan: Konfigurasikan pengaturan pelacakan untuk menangkap peristiwa RTOS yang relevan.
- Visualisasikan Data Pelacakan: FreeRTOS+Trace menyediakan antarmuka visual untuk menganalisis data pelacakan, menampilkan penjadwalan tugas, penggunaan sumber daya, dan interaksi tugas.
Kelebihan:
- Memberikan wawasan tentang perilaku RTOS.
- Membantu mengoptimalkan penjadwalan tugas dan penggunaan sumber daya.
Kekurangan:
- Mungkin membutuhkan alat profiling khusus.
- Konfigurasi dan analisis data pelacakan bisa jadi kompleks.
Praktik Terbaik untuk Tolok Ukur dan Profiling
Berikut adalah beberapa praktik terbaik untuk tolok ukur dan profiling pada STM32 MCU:
- Rencanakan Pendekatan Anda: Sebelum Anda mulai, rencanakan apa yang ingin Anda ukur dan optimalkan. Tetapkan tujuan yang jelas dan identifikasi area spesifik dari kode Anda untuk difokuskan.
- Gunakan Alat yang Tepat: Pilih alat tolok ukur dan profiling yang sesuai dengan kebutuhan Anda dan berikan informasi yang relevan.
- Isolasi Potongan Kode: Saat melakukan tolok ukur, isolasi potongan kode yang ingin Anda ukur untuk memastikan pengukuran yang akurat.
- Minimalkan Overhead: Berhati-hatilah tentang overhead yang diperkenalkan oleh alat tolok ukur dan profiling Anda. Gunakan teknik non-intrusif jika memungkinkan.
- Lakukan Beberapa Pengukuran: Lakukan beberapa pengukuran dan ambil rata-rata hasilnya untuk mengurangi pengaruh variasi dan noise.
- Dokumentasikan Hasil Anda: Dokumentasikan hasil dan optimasi Anda untuk melacak kemajuan dan membagikan pembelajaran dengan orang lain.
- Optimalkan Iteratif: Optimalkan kode Anda secara iteratif, mengukur kinerja setelah setiap perubahan untuk memastikan bahwa Anda membuat perbaikan.
- Pertimbangkan Skenario Dunia Nyata: Tolok ukur dan profilkan kode Anda dalam skenario dunia nyata untuk memastikan bahwa Anda mengoptimalkan untuk penggunaan praktis.
- Validasi Optimasi: Validasi bahwa optimasi Anda benar-benar meningkatkan kinerja dengan mengukur kinerja sebelum dan sesudah perubahan.
Contoh Kasus: Mengoptimalkan Pengolahan Gambar
Mari kita pertimbangkan contoh kasus mengoptimalkan algoritma pengolahan gambar pada STM32 MCU.
Masalah:
Anda memiliki algoritma pengolahan gambar yang berkinerja lambat di STM32 MCU Anda. Anda perlu mengoptimalkan kinerjanya untuk memenuhi persyaratan waktu nyata.
Solusi:
- Profilkan Kode: Gunakan alat profil untuk mengidentifikasi hambatan kinerja dalam algoritma pengolahan gambar Anda. Anda mungkin menemukan bahwa operasi tertentu, seperti konvolusi, menghabiskan sumber daya paling banyak.
- Optimalkan Konvolusi: Optimalkan operasi konvolusi menggunakan teknik seperti:
- Mengurangi penggunaan floating point: Pertimbangkan menggunakan perhitungan fixed point
- Perluasan Loop: Perluas loop untuk mengurangi overhead loop.
- SIMD: Gunakan instruksi SIMD (Single Instruction, Multiple Data) untuk melakukan beberapa operasi secara paralel.
- Gunakan DMA: Gunakan Direct Memory Access (DMA) untuk mentransfer data antara memori dan periferal tanpa melibatkan CPU, membebaskan CPU untuk tugas-tugas lain.
- Pertimbangkan DMA2D: Beberapa STM32 MCU memiliki akselerator DMA2D yang dapat secara signifikan mempercepat operasi pengolahan gambar. Manfaatkan DMA2D jika tersedia.
- Tolok Ukur dan Validasi: Tolok ukur algoritma yang dioptimalkan untuk memvalidasi bahwa kinerja telah meningkat.
Kesimpulan
Tolok ukur kinerja dan profiling adalah keterampilan penting untuk pengembangan STM32. Dengan menggunakan alat dan teknik yang dibahas dalam artikel ini, Anda dapat secara efektif menganalisis dan mengoptimalkan kode Anda untuk kinerja maksimal, penggunaan daya, dan penggunaan sumber daya. Ingatlah untuk merencanakan pendekatan Anda, menggunakan alat yang tepat, dan mengoptimalkan secara iteratif untuk mencapai hasil terbaik. Dengan melakukan itu, Anda dapat membuka potensi penuh dari STM32 MCU Anda dan membuat aplikasi tertanam yang kuat dan efisien.
“`