در برنامهنویسی سیستمهای نهفته، اندازهگیری دقیق زمان اجرای توابع یکی از عوامل کلیدی برای بهینهسازی عملکرد و پاسخگویی سیستم است. خوشبختانه در بسیاری از میکروکنترلرهای سری STM32، یک ابزار بسیار قدرتمند به نام DWT (مخفف Data Watchpoint and Trace) وجود دارد که به ما اجازه میدهد با دقت بالا زمان اجرای کد را محاسبه کنیم، بدون نیاز به تایمرهای خارجی یا ایجاد وقفه.
در این مقاله قصد داریم با ساختار DWT، نحوه فعالسازی و یک مثال عملی برای استفاده از آن در STM32 آشنا شویم.
DWT چیست؟
DWT یکی از زیرسیستمهای داخلی هستهی ARM Cortex-M است که در بسیاری از میکروکنترلرهای STM32 پیادهسازی شده است (مثلاً STM32F1، F4، F7، H7 و ...). این ماژول بخشی از Core Debug Unit است و به منظور فراهمسازی قابلیتهای اشکالزدایی (debugging)، ردیابی (trace) و پروفایل کردن اجرای برنامه طراحی شده است.
قابلیتهای کلیدی DWT:
Cycle Counter (CYCCNT):
شمارندهی سختافزاری تعداد سیکلهای کلاک، بسیار مفید برای اندازهگیری زمان اجرای کد.Watchpoints:
امکان نظارت بر دسترسی خواندن یا نوشتن به آدرسهای خاص از حافظه.Event Counters:
شمارش تعداد load/store، branch و دیگر دستورالعملها برای تحلیل دقیقتر عملکرد CPU.Instruction Trace:
امکان نمونهبرداری از برنامهشمار (PC) در حین اجرای کد (در صورت وجود ITM/ETM فعال).
در این مقاله ما فقط روی Cycle Counter تمرکز میکنیم، چرا که کاربردیترین بخش DWT در پروژههای روزمره به شمار میرود.
فعالسازی DWT در STM32
برای استفاده از شمارندهی سیکل DWT، ابتدا باید آن را فعال کنیم. خوشبختانه این کار بهسادگی از طریق CMSIS انجام میشود.
اندازهگیری زمان اجرای یک تابع
فرض کنید میخواهید بدانید تابع some_function
چند سیکل زمان میبرد:
حال اگر فرکانس کلاک CPU را بدانید (مثلاً 72MHz)، میتوانید مدت زمان اجرای کد را نیز حساب کنید:
مزایای استفاده از DWT برای تایمینگ
✅ بسیار دقیق و مستقل از وقفهها
✅ بدون نیاز به تایمر سختافزاری
✅ مناسب برای اندازهگیری توابع کوچک و پرکاربرد
✅ مناسب برای پروفایلکردن کد در فاز توسعه و بهینهسازی
نکات مهم
برخی مدلهای ارزانتر STM32 ممکن است DWT را نداشته باشند یا بخشی از آن غیرفعال شده باشد.
DWT برای استفاده از شمارندهی CYCCNT نیازی به دیباگر فعال ندارد؛ این ویژگی حتی در حالت Release هم قابل استفاده است.
این روش برای اندازهگیری زمانهای بسیار کوتاه (در حد چند میکروثانیه یا حتی کمتر) نیز مناسب است.
جمعبندی
ماژول DWT در STM32 یک ابزار قدرتمند برای توسعهدهندگان سیستمهای نهفته است. با استفاده از آن میتوانید بدون نیاز به ابزارهای خارجی، عملکرد کد خود را دقیق تحلیل کرده و بخشهایی که نیاز به بهینهسازی دارند را شناسایی کنید. اگر به دنبال روشهای دقیق، سریع و آسان برای اندازهگیری زمان در پروژههای STM32 خود هستید، DWT میتواند یکی از بهترین گزینهها باشد.
امیدواریم از این آموزش استفاده برده باشید!
دانلود سورس کد
با سایر آموزش های اصفهان درایو همراه باشید!