ایجاد یک پروژه نرم افزاری (پروژه کاربردی)
تنظیم آپشن های (گزینه های) پروژه
· این آموزش مقدمه ای برای شروع کار با نرم افزار IAR Embedded workbench محیط توسعه یافته مجتمع(مدارات مجتمع) IDE(integrated development environment) است. این آموزش یک نمونه از چرخه ای
توسعه یافته (پیشرفته ) را به شما نشان می دهد و همچنین نشان می دهد که چگونه از کامپایلر و لینکر برای درست کردن یک برنامه کوچک برای قطعه خود ( منظور همان میکروکنترلر شماست) استفاده کنید. برای مثال ، درست کردن یک
workspace ، تنظیم پروژه ی شما با یک فایل سورس c ، و کامپایل و لینک کردن برنامه تان .
شما می توانید مدل های پیشرفته ی پروژه ای را با استفاده از IDE طراحی کنید. شما یک workspace می سازید در حالی که می توانید یک یا چندین پروژه به آن اضافه کنید. در این آموزش قالب پروژه آماده برای دو برنامه و همچنین
کتابخانه پروژه وجود دارد.
(فایل ها در پوشه همراه فایل pdf موجود است.)
هر پروژه ای می تواند شامل یک سری از سلسه گروه ها (سلسله مراتب ) شود که در آن فایل های سورس تان جمع شده است که در ادامه در قسمت workspce خود خواهید دید . برای هر پروژه شما می تونید یک یا چندین پیکربندی
(build configurations) تعیین کنید. برای جزییات بیشتر درباره طراحی مدل های پروژه ، مدیریت پروژه IDE ( IDE Project Management) و Building Guide for ARM را می توانید ببینید.
به دلیل اینکه در این برنامه آموزشی یک برنامه ساده با چندین فایل توضیح داده شده است و این آموزش نیازی به مدل پروژ پیشرفته ندارد.
قبل از این که شما بتوانید یک پروژه بسازید ، شما باید اول یک workspace بسازید.
اولین مرحله ساختن یک workspace جدید برای برنامه آموزشی است. وقتی که شما برای اولین بار برنامه (IDE) را اجرا می کنید، یک workspace آماده وجود دارد که شما می توانید برای این پروژه آموزشی استفاده کنید. اگر در
حال حاضر این workspace برای شما وجود داشته باشد شما می توانید از مرحله اول چشم پوشی کنید.
خوب حالا برای ایجاد File>New>Workspace انتخاب کنید. حالا شما آماده ساختن یک پروژه هستید و می توانید پروژه خود را به workspce اضافه کنید.
شما می توانید تمام فایل های که در این آموزش نیاز دارید در پوشه arm\tutor پیدا کنید.(البته فایل ها در پوشه zip ضمیمه شده است.) یک کپی از پوشه tutor را در پوشه پروژه خود بگیرید.
توجه : اگر از قبل تمام فایل های پوشه arm\tutor را کپی کرده اید شما با آموزش ها شروع کنید ، یک فایل پروژه از قبل در پوشه تان در دسترس است . شما می توانید از فایلی که آماده است استفاده کنید ، یا فایل خودتان را درست کنید.
1. یک پروژه جدید ایجاد کنید با انتخاب مسیر Project> Create New Project . در پنچره (دیالوگ گفتگو) ظاهر شده (Create New Project ) ، که به شما اجازه می دهد پروژه جدیدتان را بر روی یک قالب پروژه پایه ریزی کنید.
2. از قسمت tool chain لیست کشویی ، toolchain خود را که استفاده می کنید انتخاب کنید و Ok کنید . (البته شما یک انتخاب بیشتر ندارید . به علت اینکه فقط در این نرم افزار میکروکنترلر های ARM را برنامه ریزی خواهید کرد.)
3. برای این آموزش ، یک قالب Empty project را انتخاب کنید ، که به سادگی یک پروژه خالی با استفاده از تنظیمات پیش فرض ایجاد می شود.
4. وقتی ok را کلیک می کنید یک پنجره ( جعبه دیالوگ) برای ذخیره کردن (Save As ) به صورت استاندارد ظاهر می شود، مکانی را که می خواهید فایل پروژه جدید خود را در پوشه پروژه ها (projects) ایجاد کنید مشخص کنید. عبارت porject1 را در قسمت File name وارد کرده ، و بر روی Save کلیک کنید تا پروژه جدید ساخته شود.
پروژه جدید در قسمت پنچره Workspace ظاهر می شود.
به صورت پیش فرض ، دو نوع پیکربندی (تنظیمات ) ایجاد شده است: اشکال زدایی (Debug ) و انتشار که نسخه نهایی پروژه خودتان خواهد بود (Release ) . در این آموزش فقط دیباگ (Debug ) استفاده خواهد شد . شما می
توانید با انتخاب پیکربندی ساخت (build configuration ) از منوی کشوی بالای پنجره workspace نوع کار خود را مشخص کنید. ستاره ی که در قسمت اسم پروژه شما (project1 – Debug * ) مشخص شده ، نشان دهنده
این است که تغییرات اعمالی در پروژه شما ذخیره نشده است .
توجه : آموزش فراخوانی تابع کتابخانه printf ، که فراخوانی تابع نوشته شده در سطح پایین تر برای کار با شبیه ساز C-SPY است . ( این شبیه ساز برای اشکال زدایی برنامه نوشته شده ی شماست که در آموزش های بعدی بررسی خواهد
شد.) که اگر شما بخواهید برنامه خودتان را در محیط واقعی ( بر روی یک سخت افزار) پایه ریزی کنید که همان طور که در تصویر بالا مشخص شده است از قسمت منوی کشویی ، Release را انتخاب خواهید کرد که البته قبل آن شما باید
بتوانید تابع نوشته شده خودتان را برای تطبق با سخت افزارتان ایجاد کنید . (در آموزش های قسمت چگونگی تطبیق دادن بررسی خواهد شد.)
در فایل پروژه (جایی که پروژه خود را ذخیره کرده اید) فایلی با پسوند ewp در پوشه پروژه تان ایجاد می شود ، البته نه در همان لحظه، اما وقتی که workspce خود را ذخیره می کنید آن فایل هم ایجاد می شود.( ستاره در هنگام ذخیره
پاک می شود) . این فایل شامل اطلاعاتی درباره تنظیمات خاص پروژه تان که برای مثال گزینه های ساخت است می باشد.
5. قبل از این که هرگونه فایلی به پروژه خودتان اضافه کنید ، شما باید workspace را ذخیره کنید. با انتخاب
File>Save Workspace و مشخص کردن مکانی که شما می خواهید فایل workspace در آن جا ذخیره شود . در این آموزش شما باید در پوشه پروژه ی که جدیدا ساخته اید ذخیره کنید . در قسمت File name عبارت
tutorials را تایپ کنید و برای ایجاد workspace جدید بر روی save کلیک کنید.
یک فایل workspace فایلی با پسوند eww در پوشه پروژه تان ساخته شده است. این فایل لیست تمام پروژه های که به workspace خود اضافه خواهید کرد را نشان می دهد. ( که در این جا تنها یک پروژه موجود است و فقط
آن را نشان می دهد. وقتی شما این فایل را از طریق notepad باز کنید متن موجود را مشاهده خواهید کرد.)
· در این آموزش از فایل های سورس tutor.c ، tutor.h ، Utilities.c و Utilities.h استفاده شده است. برنامه tutor.c یک برنامه ساده است که تنها از مشخصات استاندارد زبان c استفاده کرده . مقدار دهی اولیه یک آرایه با 10 عدد اول ، اعداد فیبوناجی و پرینت گرفتن نتیجه و یا همان خروجی به صورت stdout .
· برنامه utilties.c شامل ابزار روتین برای محاسبات فیبوناجی است.
ایجاد چندین گروه این امکان را به شما می دهد که فایل های سورس تان را بر طبق نیاز پروژه تان بررسی کنید. اما ، بخاطر این که این پروژه فقط شامل دو فایل است ، شما نیازی به ایجاد کردن گروه نیستید. برای اطلاعات بیشتر درباره ی
چگونگی درست کردن ساختار پروژه های پیچیده ، راهنمای قسمت IDE Project Management and Building Guide که برای میکروکنترلر ARM است را ببینید.(البته قصد این آموزش ها به صورتی پایریزی شده است که
آموزش ها را به صورت یک برنامه مشخص شده ترجمه کند)
1. در پنچره Workspace ، مقصدی که می خواهید فایل سورس را اضافه کنید انتخاب کنید(با راست کلیک بر روی project1 در قسمت ADD بر روی Add File کلیک کرده و فایل های که در پوشه گذاشته شده است را اضافه کنید و یا مستقیما از مسیر گفته شده این کار را صورت دهید. )؛ در قسمت ADD دو گزینه وجود دارد group و دیگری File که در این مورد شما File را انتخاب کرده و مستقیما به پروژه اضافه کنید.
2. با انتخاب Project>Add Files کادر محاوره ای استاندارد باز می شود.(که روشی دیگری برای اضافه کردن فایل ها است). فایل های tutor.c ، tutor.h ، Utilities.c و Utilities.h را در قسمت لیست انتخاب ها ، انتخاب کنید و بر روی open کلیک کنید تا اضافه شوند به پروژه project1 .
تنظیم آپشن های (گزینه های) پروژه
حالا شما آپشن های پروژه تان را تنظیم خواهید کرد. برای این برنامه تان ، آپشن ها می تواند در تمام سطوح ( node ) ند ها تنظیم شود. در اولین مرحله شما تنظیمات کلی که در این آموزش صورت می دهید ، پیکربندی مناسب برای
پردازش خواهد بود. زیرا این تنظیمات باید برای کل ساختمان پیکربندی یکسان باشد، آن ها باید بر روی پروژه نود تنظیم شود.
1. آیکن project1 – Debug در قسمت فولدر پروژه در پنچره Workspace را انتخاب کنید و سپس Project>Options را انتخاب کنید.
بررسی کنید که این تنظیمات استفاده شود.
Page | Setting |
Target | Core: Cortex-M3 |
Output | Output file: Executable |
Library Configuration | Library: Normal |
Library Configuration | Library low-level interface implementation: Semihosted |
2. C/C++ Compiler را در قسمت لیست Category انتخاب کنید . همانند تصویر زیر.
3. بررسی کنید که این تنظیمات استفاده شود.
Page | Setting |
Optimizations | Level: None (Best debug support) |
Output | Generate debug information |
List | Output list file |
4. بر روی ok کلیک کنید تا تنظیمات صورت گرفته تعیین شود. (ذخیره شود).
پروژه برای ساختن حالا آماده است.
شما حالا می توانید برنامه تان را کامپایل و لینک کنید. شما همچنین لیست فایل کامپایل و نقشه فایل لینکر را خواهید دید.
1. کامپایل فایل utilities.c ، با انتخاب آن در پنجره Workspace .
2. انتخاب Project>Compile
روش دیگر ، انتخاب (کلیک) دکمه Compile در نوار ابزار و یا انتخاب فرمان کامپایل وقتی که شما در پنجره Workspace بر روی Utilities.c راست کلیک می کنید در محتویات منوی ظاهر شده دستور Compile را انتخاب کنید.
پردازش در پنجره پیام Build نشان داده شده است.
3. فایل Tutor.c را به همان روش کامپایل کنید.
در IDE پوشه های جدیدی در پوشه پروژه تان حالا درست شده است. به خاطر این که شما در حال استفاده از ساختمان پیکربندی Debug هستید ، یک پوشه دیباگ که زیر پوشه های List ، obj و Exe را هم شامل می شود ساخته شده است.
· پوشه list که پوشه مقصد، برای فایل های لیست است. فایل های لیست دارای پیشوند lst هستند.
· پوشه obj که پوشه مقصد برای فایل های شی (object ) از کامپایلر و اسمبلر است. این فایل ها دارای پیشوند o و در ورودی ILINK لینکر استفاده می شوند.
· پوشه Exe که پوشه مقصد برای فایل های اجرایی است. و پیشوند آن out است و در وروردی دیباگر IAR C-SPY استفاده می شود. توجه کنید که این پوشه خالی است تا زمانی که شما فایل شی (object ) را لینک کرده باشید.
بر روی علامت + در پنچره Workspace کلیک کنید تا قسمت های باز شده را مشاهده کنید. همان طور که شما می بینید، IDE همچنین ایکن پوشه خروجی output را در داخل پنجره workspace که شامل تمام فایل های
تولیدی خروجی است ساخته است. که به خوبی شامل تمام فایل های header هستند را نشان داده است ، و نمایش وابستگی بین فایل ها هم نمایان است.
حالا به بررسی فایل لیست کامپایلر و نظر به اینکه چگونه این فایل به صورت اتوماتیک به روز رسانی (آپدیت) می شود . وقتی که شما در این مورد به چگونگی اثرات سطوح بهینه مختلف در سایز کدهای تولید شده بررسی خواهید کرد. (که
منظور همان تغییراتی که در حین کار بر روی پروژه خود بارها انجام می دهید و یا به عبارتی کد های خود را تغییر می دهید این تغییرات چگونه به روز رسانی می شود.)
1. فایل لیست utilities.lst را در پنجره Workspace دابل کلیک کنید تا باز شود. فایل لیست را بررسی کنید ، که شامل اطلاعات زیر است:
· قسمت اول این متن ورژن محصول ، اطلاعات درباره زمانی که فایل را ایجاد کرده اید ، و تشریح خط فرمان (command line ) تنظیمات کامپایلری که شما استفاده کرده اید را نشان می دهد.
· در قسمت بدنه فایل لیست کدهای اسمبلی و باینری که برای هر قسمتی از موضوع تولید شده را نشان می دهد، همچنین در هر بخش (section ) نشان داده شده است که چگونه متغییر ها ارجاع شده اند.
· و در آخر فایل لیست مقدار استک، کد، و حافظه داده ای مورد نیاز، نشان داده شده است ، و اطلاعاتی در مورد پیام های خطا و اخطاری (error and warning ) که ممکن است تولید شده باشد را هم شامل می شود.
توجه داشته باشید به مقدار کدهای تولید شده در آخر فایل و همچنین فایل را فعلا باز نگه دارید .
2. از قسمت منوها Tools>Options را انتخاب کنید تا جعبه دیالوگ IDE Options باز شود و تب Editor را کلیک کنید. گزینه scan for changed files را انتخاب کنید . (البته ممکن است که به صورت پیش فرض برای شما فعال باشد.) این گزینه را روشن کنید تا به روز رسانی به صورت اتوماتیک برای هر فایلی که در پنچره ویرایشگر (editor ) است صورت بگیرد همانند فایل لیستی که درحال حاضر در این پنجره باز است.
بر روی گزینه ok کلیک کنید تا تغییرات ذخیره شود.
3. در پنجرهWorkspace فایل Utilities.c را انتخاب و راست کلیک کنید و Opotions را انتخاب کنید، از منوی محتویات C/C++ Compiler را انتخاب تا پنجره دیالوگ باز شود. گزینه Override inherited settings را فعال کنید و بر روی زبانه Optimizations کلیک کنید و از قسمت level گزینه High را انتخاب و Ok کنید.
توجه کنید که گزینه override روی فایل node با یک نقطه قرمز در پنجره Workspace نشان داده شده است.(با نگه داشتن موس بر روی علامت تیکت در قسمت Utilities.c توضیحات آن قسمت نمایان می شود و موضوع تا حدودی برایتان روشن می شود.)
4.فایل Utilities.c را مجدد کامپایل کنید . حالا شما متوجه دو چیز خواهید شد. اول ، توجه به فایل لیست داشته باشید که به صورت اتوماتیک به روز رسانی شده است و به سبب انتخاب گزینه scan for changed files است. دوم ، نگاه کنید به آخر فایل لیست و توجه کنید به تاثیرات سایز کد ها که به سبب افزایش بهینه سازی صورت گرفته است.
5. برای این آموزش ، سطح بهینه سازی باید به صورت پیش فرض استفاده شود (optmization level None ) ، پس قبل از این که به لینک کردن برنامه بپردازیم ، سطح بهینه سازی را به حالت پیشفرض برگردانید. با راست کلیک کردن بر روی فایل لیست (Utilities.c )در پنجره Workspace و انتخاب Options و C/C++ Compiler گزینه Override inherited settings را غیر فعال کنید و بر روی Ok کلیک کنید و مجددا فایل Utilities.c را کامپایل کنید.
حالا شما باید گزینه های لینکر را تنظیم کنید.
1. آیکن پوشه پروژهproject1 - Debug در پنجره workspace را انتخاب کنید و سپس Project>Options را انتخاب کنید و یا ، بر روی آیکن راست کلیک و Options را از محتویات منو انتخاب کنید. سپس Linker را از قسمت Category انتخاب کنید تا صفحه تنظیمات لینکر نمایش داده شود.
برای این آموزش ، تنظیمات پیش فرض نرم افزار استفاده می شود. به هر حال به انتخاب فایل پیکربندی لینکر توجه می کنیم ، تا با نحوه کار آن آشنا شویم.
فرمت خروجی
لینکر یک فایل خروجی در فرمت ELF تولید می کند که شامل DWARF است که اطلاعاتی در جهت اشکال زدایی یا همان دیباگ دارد. اگر شما به جای آن نیاز به یک فایل با فرمت استاندارد متورولا یا اینتل داشته باشید ، برای مثال بار
گذاری فایل بر روی یک حافظه PROM ، شما باید فایل را تبدیل کنید. شما می توانید از مبدلی که توسط IAR Embedded Workbench ارائه شده استفاده کنید.
پیکربندی فایل لینکر
کد و داده برنامه در حافظه بر طبقه پیکربندی مشخص شده در فایل پیکربندی لینکر قرار می گیرد.( پیشوند اسم فایل icf ). آشنا شدن با حالت نوشتاری کدها یا در اصطلاح syntax برای بخش های مختلف که به چه صورت در حافظه قرار
می گیرند بسیار مهم است.
برای مطالعه بیشتر در مورد این مسئله قسمت IAR C/C++ Development Guide for ARM را بخوانید.
تعاریف عرضه شده در فایل پیکربندی لینکر مربوط به هیچ نوع از سخت افزار خاصی نیست. قالب فایل پیکربندی لینکر عرضه شده با این محصول می تواند در یک شبیه ساز استفاده شود ، اما وقتی که می خواهید آن فایل را در سیستم مورد
نظر خود استفاده کنید شما باید آن را به طرح حافظه سخت افزاری واقعی خود تبدیل کنید. شما می توانید فایل های پیکربندی لینکر را برای بعضی از بردهای ارزیابی در پوشه src\examples پیدا کنید.
در این آموزش شما تنظیمات پیش فرض فایل پیکربندی لینکر را استفاده خواهید کرد ، همان طور که در صفحه Config می توانید ببینید.
اگر شما می خواهید فایل پیکربندی لینکر را بررسی کنید ، از یک ویرایشگر متن مناسب استفاده کنید، برای مثال ویرایشگر خود نرم افزار ویا notepad هم خوب است، یا یک کپی از فایل بگیرید ، و بررسی کنید که تعاریف با نیازهای شما
مطابقت داشته باشد. روش دیگر ، این که بر روی دکمه Edit کلیک کنید تا ورایشگر فایل پیکربندی لینکر باز شود . ( البته بعد از این که گزینه override default را فعال کردید فایل Edit هم فعال خواهد شد.)
فایل نقشه لینکر
با تنظیمات پیشفرض ، فایل نقشه لینکر تولید نمی شود. برای تولید این فایل کلیک کنید در قسمت زبانه یا همان تب List و گزینه Generate linker map file را در صورت غیر فعال بودن انتخاب کنید.
2. بر روی OK کلیک کنید با گزینه لینکر ذخیره شود.
حالا شما فایل شی را لینک کنید تا کد تولید شده را بتوانید اشکال زدایی کنید یا همان debug کنید.
3.با انتخاب Project>Make . پردازش صورت خواهد گرفت و معمولا در پنچره پیغام Build نمایش داده خواهد شد. نتیجه ای لینک کردن یک کد فایل project1.out با اطلاعات اشکال زدایی که در پوشه Debug\Exe قرار
گرفته است و یک نقشه فایل که در پوشه Debug\List قرار گرفته است.
فایل project1.map را بررسی کنید و چگونگی قرار گرفتن بخش ها یا همان sections ها را در حافظه ببینید.
اطلاعات بیشتر در مورد نقشه فایل در IAR C/C++ Development Guide for ARM .
برنامه project1.out حالا آماده است برای اجرا شدن در C-SPY . (به کمک این برنامه شما می توانید پروژه خودتان را پردازش کنید و با جزئیات بیشتری بررسی و اشکال زدایی کنید.)
مترجم این قسمت از آموزش توسط مدیریت سایت مهندس محمد الباشی صورت گرفته است امیدواریم که این آموزش مورد پسند شما واقع شده باشد. با نظرات خود ما را در ادامه این کار یاری دهید .
{jcomments on}