برد STM ترفند

نحوه دیباگ میکروکنترلرهای STM32 در نرم افزار KEIL

نوشته شده توسط علی زاهدی

فرایند انجام پروژه های برنامه نویسی دارای مراحل مشخصی است. یکی از اخرین مراحل طراحی و ساخت یک دستگاه انجام عملیات Debug یا اشکال زدایی است. این مرحله پروژه به قدری مهم است که نرم‌افزار های مختلفی برای دیباگ کردن پروژه مختلف طراحی شده است. نرم افزار KEIL که یکی از قدرتنمند ترین کامپایلر های موجود برای میکروکنترلر های ARM است. بخشی برای انجام عملیات دیباگ دارد که در ادامه با آن آشنا خواهیم شد. پیش از این در آموزش های مختلفی به آموزش میکروکنترلر های STM32 پرداختیم که از طریق این لینک می‌توانید به آموزش های قبلی دسترسی داشته باشید. در این پست قصد داریم تا نحوه دیباگ کردن کد در میکروکنترلر های STM32 و نرم افزار KEIL را آموزش دهیم.  در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.

 


شناخت دیباگ یا رفع عیب


در فرایند توسعه نرم افزارها، همیشه دارای نقص ها و خطاهایی دیده می‌شود. به این نقص و خطاها اصتلاحاً باگ (Bug) می‌گویند. حتی در طول توسعه سیستم عامل های بزرگ مثل ویندوز، اندروید و IOS نیز ممکن است باگ ها وجود داشته باشند. توسعه دهنده‌گان همواره در تلاش هستند تا نرم افزار هایی با کمترین خطا را به کابران ارائه دهند. عملیات رفع این نقص و خطا ها را در فرایند انجام پروژه های برنامه نویسی دیباگ (Debug) نامگذاری کرده اند.دیباگ کردن جزو مراحل اصلی و جدا نشدنی توسعه یک نرم افزار است.

 


انواع باگ ها


در طول کدنویسی یک پروژه ممکن است که با باگ های مختلفی مواجه شوید. باگ ها انواع مختلفی دارند. برای اشکال زدایی کد بایستی ابتدا منشا باگ را تشخیص داده و سپس به اشکال زدایی کد بپردازید. متداول‌ترین باگ‌ها و روش‌های اشکال زدایی آن‌ها در کدنویسی به صورت زیر است.

  • خطاهای نوشتاری (Syntax)

به قوائد و نوع نوشتار کدهای یک زبان برنامه نویسی Syntax گفته می‌شود. یکی از بیشتری باگ هایی که برنامه نویس ها با آن مواجه می‌شوند. اما دیباگ کردن این نوع خطا بسیار ساده است. عموم کامپایلر هایی که برای کد نویسی استفاده می شود این نوع خطا را تشخیص داده و به برنامه نویس اعلام می‌کند. برای مثال ممکن است فراموش کنید که در اخر دستور ; را قرار دهید. این مشکل توسط کامپایلر تشخیص داده شده و به برنامه نویس اعلام می‌شود.

  • خطاهای معنایی (Semantics)

بررخی خطا ها از نظر نوشتاری اشتباه نیستند و کامپایلر نمیتواند آنها را به عنوان خطا تشخیص دهد. اما پس از پروگرام کد متوجه می‌شوید که نتجیه آن چیزی نیست که بایستی باشد. این نوع خطا ها یا به صورت Warning به برنامه نویس اعلام می‌شود. و یا اصلا هیچ خطایی تشخیص داده نمی‌شود. برای مثال تصور کنید که قرار است دو جمله را بر روی LCD کاراکتری نمایش دهید. اما فراموش می‌کنید که برای جمله دوم سطر LCD را بر روی ۱ قرار دهید. این خطا توسط کامپایلر تشخیص داده نمی‌شود. اما زمان تست پروژه مشاهده می‌کنید که هر دو جمله بر روی یک خط چاپ شده است.

  • خطاهای منطقی (Logic)

این دسته از خطاها جزو سخت‌ترین خطاهای برنامه نویسی محسوب می‌شوند. برنامه نویسان زمان زیادی را باید برای رفع خطاهای منطقی صرف کنند. زمانی که کدهای نوشته شده از نظر نوشتاری کاملا صحیح هستند، اما نرم افزار به درستی اجرا نمی‌شود و یا در حالی که اجرا می‌شود خروجی آن اشتباه است، باید به دنبال یک خطایی منطقی بود. خطاهای منطقی از خود نشانه ای بر جای نمی‌گذارند و معمولا توسط Debugger ‌ها شناسایی نمی‌شوند. گاهی برای رفع چنین خطاهایی برنامه نویس راهی جز خواندن خط به خط کدهای نوشته شده ندارد.

 

 


دیباگ میکروکنترلر های STM32


برای دیباگ میکروکنترلر های STM32 ابزار های مختلفی وجود دارد. عموم کامپایلر ها قابلیت دیباگ کد را دارند. برای مثال میتوان به نرم افزار هایی مثل KEIL، IAR و STM32CubeIDE اشاره کرد. در این آموزش قصد داریم تا نحوه دیباگ کد توسط نرم افزار KIEL را توضیح دهیم. همانطور که در بخش قبل گفته شد خطا های نوشتاری تقریبا توسط تمام کامپایلر ها تشخیص داده شده و به برنامه نویس اعلام می‌شود. اما برای دیباگ خطا های مفهومی و منطقی میتوان از قابلیت دیباگ نرم افزار استفاده کنید.

KEIL Debuger

 

مورد دیگری که بایستی به آن توجه داشته باشید، پروگرامری است که از آن استفاده می‌کنید. پروگرامر مورد استفاده بایستی از قابلیت دیباگر نیز پشتیبانی کند. پروگرامر های مختلفی از جمله U-Link، J-Link و ST-Link از قابلیت دیباگ میکروکنترلر های STM32 پشتیبانی می‌کنند.

 

هر یک از این پروگرامر ها از روش های خاصی برای پروگرام و دیباگ میکروکنترلر استفاده می‌کنند. برای مثال پروگرامر ST-Link از رابط SWD و پروگرامر J-Link از رابط J-TAG برای پروگرام و دیباگ میکروکنترلر STM32 استفاده می‌کنند. ترتیب پایه های این نوع پروگرامر ها به صورت زیر است. در این آموزش نحوه دیباگ میکروکنترلر با استفاده از پروگرامر ST-Link و رابط SWD می‌پردازیم.

Jlink or stlink interface

 


تنظیم دیباگر در نرم افزار STM32CubeMX


یکی از بخش هایی که همیشه قبل از بخش های دیگر داخل نرم افزار STM32CubeMX تنظیم می‌کردیم، بخش SYS گزینه Debug بوده است. در این بخش شما می‌توانید تعیین کنید که میکروکنترلر شما توسط کدام رابط پروگرام و دیباگ شود.

STM32Cube SYS Set

 

پس از ورود به این بخش و کلیک بر روی گزینه Debug گزینه های مختلفی برای شما باز خواهد شد. تا به الان این بخش را  در تمامی آموزش ها بر روی گزینه Serial Wire تنظیم می‌کردیم که همان رابط SWD است. اما رابط های دیگری مثل J-TAG و Trace Asynchronous Sw نیز وجود دارد. همانطور که گفته شد در این آموزش با رابط SWD عملیات دیباگ را انجام خواهیم داد.

Serial Wire

 

پس از تنظیم این بخش روی گزینه Serial Wire همانند تصویر بالا رنگ پایه های مربوطه به رنگ سبز در خواهد آمد. در ادامه پس از انجام تنظیمات مربوط به پروژه خود بایستی ادامه روند دیباگ را داخل نرم افزار KEIL امجام دهید.

 


عملیات دیباگ در نرم افزار KEIL


در نرم افزار KEIL پس از انجام کدنویسی پروژه و پروگرام کد بر روی میکروکنترلر مورد نظر بایستی برای شروع عملیات دیباگ ابتدا از منو Debug گزینه Start/Stop Debug Session را انتخاب کنید. در صورتی که اتصالات پروگرامر به میکروکنترلر به درستی انجام شده باشد. پس انتخاب این گزینه Start/Stop Debug Session با اروری مواجه نشده و وارد قسمت دیباگر نرم‌افزار keil خواهید شد. پس از ورود به بخش دیباگر مشاهده می‌کنید که در برخی ابزار ها و پنجره ها تغیرات کوچکی اعمال می‌شود.

Debug Page

 

توجه داشته باشید که برنامه بلافاصله پس از ورود به بخش دیباگر شروع به کار نخواهد کرد و باسیتی از نوار ابزار بالا و یا از منو Debug گزینه Run را انتخاب کنید. در این قسمت ابزار های دیگری همانند Stop و Reset CPU نیز در اختیار شما قرار دارد. اگر دیباگر در حالت Stop قرار داشته باشد، به نوار سمت چپ کنار کد توجه کنید. یه فلش را مشاهده می‌کند. این فلش زرد رنگ نشانگر این است که کد در حال اجرا در این خط قرار دارد. فلش دیگری به رنگ آبی وجود دارد که نشانگر محل انتخاب شده توسط ماوس است.

 

ابزار های Debug

در منو Debug ابزار های دیگری برای کنترل نحوه اجرا شدن برنامه در قسمت دیباگر نرم افزار KEIL وجود دارد. گزینه Step ابزاری است که برای اجرا شدن خط به خط برنامه از آن استفاده می‌شود. گزینه Step Over برای اجرا شدن برنامه به صورت تابه به تابه است. یکی دیگر از ابزار ها Run to Cursor Line است. این ابزار کمک میکند تا برنامه از خط که در آن توقف کرده است تا محلی که نشانگر موس (فلش آبی) قرار داده شده است اجرا شده و دوباره در آن نقطه متوقف شود.

 

بریک پوینت

بصورت پیش فرض پس از ورود به بخش دیباگ فایل Startup برنامه اجرا شده و در ابتدای تابع main متوقف شده و منتظر Run شدن توسط کاربر می‌شود. نکته مهم دیگری که در این قسمت بایستی با آن آشنا شویم Break Point ها هستند. عملکرد بریک پوینت ها به این صورت است که پس از Run شدن برنامه در هر نقطه ای که بریک پوینت قرار داده شده باشد برنامه متوقف و منتظر Run شدن دوباره توسط کاربر می‌شود. برای قرار دادن بریک پوینت در کد، بایستی بر روی نوار سمت چپ کنار کد در خط مورد نظری که قصد قرار دادن بریک پوینت در آن را داریم یک بار کلیک کنیم. با کلیک دوباره بر روی آن قسمت بریک پوینت حذف خواهد شد.

بریک پوینت

 

مقدار ذخیره شده در متغیرها و رجیسترها

یکی از امکانات بسیار کاربردی دیباگر نرم افزار KEIL‌ است که شما می‌توانید به صورت Real مقدار قرار گرفته در رجیستر های میکروکنترلر را مشاهده کنید. برای مشاهده بایستی از منو Peripherals بخش مورد نظر خود انتخاب کنید، برای مثال رجیستر های مربوط به GPIO را مشاهده کنید.

 

این امکان برای متغیر های موجود در برنامه نیز وجود دارد. برای مشاهده این مورد بایستی در قسمت دیباگر نرم افزار KEIL از منو View گزینه Watch را انتخاب کرده و بر روی یکی از Watch های موجود در این منو کلیک کنید. سپس در پنجره باز شده قسمتی برای نوشتن وجود دارد. در این قسمت با نوشتن نام دقیق متغیر میتوانید مقدار قرار گرفته در متغیر را به صورت Real مشاهده کنید. راه دیگری برای این کار نیز وجود دارد. در کد خود نام متغیر خود را انتخاب کرده و بر روی آن راست کلیک کنید. سپس گزینه add to watch را انتخاب کنید.

 


جمع بندی


همه برنامه نویس ها و توسعه دهنده های نرم افزار در طول کدنویسی با باگ ها مختلفی که در این آموزش با آنها آشنا شدیم روبرو می‌شوند. بودن نقص و خطا در روند کدنویسی یک نرم افزار امری اجتناب ناپذیر است. در این شاخه کسی برنده است. که نرم افزاری با کمترین باگ را به کاربران اراده دهد. حتی در نرم افزار های بزرگی مانند سیستم عامل های ویندوز ، اندروید و IOS نیز در آپدیت های جدید غیر از اضافه کردن امکانات به برطرف کردن باگ های ورژن قبلی نیز پرداخته می‌شود. بنابر این دیباگ بخشب بسیار مهم در روند توسعه همه ی نرم افزار ها است.

 


لوازم مورد نیاز


 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

علی زاهدی

برنامه نویس و طراح سیستم های مبتنی بر میکروکنترلر

دانسته هایتان را مانند یک ساعت مچی در دست کنید، نه صرفا به این خاطر که نشان دهید آن را دارید. بلکه به این خاطر که اگر کسی از شما ساعت را پرسید، برایش بگویید.
لرد چسترفیلد

تبادل نظر و رفع عیب با ثبت دیدگاه

۳ دیدگاه

  • سلام مهندس وقت بخیر,من موقع دیابگ کردن با برد بلو پیل مشکل دارم,زمانی که وارد دیباگ نرم افزار کیل می شوم و وقتی گزینه ران را می زنم برنامه گیر می کنه و به درستی اجرا نمی شه.لطفا راهنمایی کنید.

    • با سلام با استفاده از کلید هایی که در نوار بالایی نرم افزار وجود دارد و در آموزش توضیح داده شده است. میتوانید مشکل را پیدا کنید. برنامه را خط به خط جلو ببرید تا متوجه شوید در کدام خط برنامه هنگ میکند.

  • سلام در بخش دیباگ نیاز است بعضی از متغیرها را تغییر داده ، یا پاک کنم ولی نمی توانم لطفا توضیح دهید