برنامه نویسی
نحوه تنظیم معیار و پروفایل عملکرد در STM32 MCU

هدف
زمان اجرای را اندازه گیری کنید و عملکرد کد را در یک میکروکنترلر STM32 (STM32؟) بهینه کنید:
- شمارنده
- پین GPIO PIN
- Profiler داخلی STM32Cubeide (SWV/SWO)
ابزارهای مورد نیاز
روش 1: شمارش چرخه با استفاده از DWT (WatchPoint Data & Trace)
پیشخوان چرخه DWT را فعال کنید (برای Cortex-M3/M4/M7)
c
#include "core_cm4.h" // Adjust to your core type
void DWT_Init(void) {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // Enable trace
DWT->CYCCNT = 0; // Reset cycle counter
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; // Enable counter
}
استفاده از مثال
c
DWT_Init();
uint32_t start = DWT->CYCCNT;
myFunction();
uint32_t end = DWT->CYCCNT;
printf("Cycles: %lu\n", end - start);
برای تبدیل چرخه ها به زمان 1 / systemcoreclock ضرب کنید.
روش 2: ضامن GPIO + اسیلوسکوپ/آنالایزر
نمونه
c
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Start timing
myFunction();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // Stop timing
می توانید پین را روی یک آنالایزر منطق مشاهده کنید تا مدت زمان عملکرد به میکرو ثانیه یا کمتر باشد.
روش 3: پروفایل STM32Cubeide SWV/SWO
الزامات:
- MCU با پین SWO
- از اشکال زدایی st-link یا j-link استفاده کنید
- پین SWO (اغلب در PB3 یا مشابه ، بسته به MCU خود را وصل کنید)
مراحل:
-
فعال کردن SWV I/O در STM32CubEmx (تحت SYS> اشکال زدایی> سیم سریال)
-
در تنظیمات پروژه> پیکربندی اشکال زدایی:
- به تنظیمات SWV بروید
- ردیابی و پروفایل را فعال کنید
- Debugger را راه اندازی کنید و باز کنید:
- کنسول SWV
- ردیابی داده SWV / آنالایزر عملکرد
نماهای پروفایل:
- زمان اجرای تابع
- شمارش دستورالعمل
- استفاده از CPU با گذشت زمان
نکات بهینه سازی بر اساس پروفایل
اختیاری: از معیارهای Coremark یا Dhrystone استفاده کنید
- این معیارهای صنعت به مقایسه عملکرد MCU کمک می کنند.
- می توانید Coremark را روی STM32 اجرا کنید و DMIPS/MHz را ببینید.
- ST گاهی اوقات نمونه های Coremark بهینه شده را در repos STM32Cube ارائه می دهد.
خلاصه