از نرم‌افزار تا سخت‌افزار - قسمت دوم - انواع کامپایلر

از نرم‌افزار تا سخت‌افزار - قسمت دوم - انواع کامپایلر

از نرم‌افزار تا سخت‌افزار - قسمت دوم - انواع کامپایلر
از نرم‌افزار تا سخت‌افزار - قسمت دوم - انواع کامپایلر

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

کامپایلرهای نیتیو

شماتیک نحوه کارکرد کامپایلر نیتیو

به طور کلی، انواع کامپایلر تو طراحی امبدد به دو دسته تقسیم میشه. اولین نوع کامپایلر که بچه‌های کامپیوتری خیلی ازش استفاده میکنن، Native compiler ها هستند. این نوع کامپایلر‌ها برای کدهایی استفاده میشن که قراره روی همون ماشین (host machine) اجرا بشه. یعنی این کامپایلر روی هر ماشینی که بتونه اجرا بشه، فقط برای همون ماشین کامپایل می کنه. خب طبیعتاً این کامپایلرها نمیتونن کدهایی رو برای پردازنده ARM یا AVR روی ماشینی با پردازنده X86 کامپایل کنن.

برای کامپایل کدهای این معماری‌ها با Native compiler ها لازمه ابتدا این کامپایلر روی پردازنده موردنظر (فرضاً ARM) نصب بشه و اون موقع کدها رو برای اون معماری خاص کامپایل کنیم. خب بنا به دلایل مختلف (مثلاً کم بودن منابع در دسترس برای سیستم‌های امبدد) اصولاً این کار انجام شدنی نیست و یا اگه هم انجام بشه تو پردازنده‌های با قابلیت‌های بالاتر به کار می‌ره. پس این نوع کامپایلرها به درد ما سخت افزاریا نمیخورن زیاد! کامپایلر معروف این خانواده GCC هستش که با نام GCC 4.8 (که 4.8 ورژنشه) شناخته میشن.

کراس کامپایلر ها

نحوه کامپایل کامپایلر نوع کراس

نوع دوم کامپایلر که تقریباً تمامی محیط‌های توسعه از این نوع استفاده میکنن Cross compiler ها هستند که بهمون این امکان رو میدن که بتونیم کدهای مربوط به یک پردازنده با یک معماری خاص رو روی یک پردازنده دیگه با معماری متفاوت کامپایل کنیم. این دقیقاً کاریه که محیط‌های توسعه مثه Keil یا Ateml studio انجام میدن. دو کامپایلر معروف این خانواده از کامپایلرها که برای پردازنده‌های ARM به کار میرن رو در اینجا معرفی می‌کنیم. ما در ادامه این سری از نوشتارها هم تمرکز رو روی همین نوع کامپایلرها میذارم و به خانواده قبلی کامپایلرها زیاد کاری نداریم. اگرچه خیلی از چیزایی که گفته میشه بین این دو خانواده از انواع کامپایلر مشترکه.

نام‌گذاری این نوع کامپایلر هم معمولاً از فرمت زیر تبعیت میکنه:

<ARCH> – <VENDOR> – <OS> – <ABI>

کامپایلر اول به صورت زیر هستش :

Arm – none – eabi – gcc

Arch : ARM

Vendor : N/A

OS : None (Bare – metal)

ABI : EABI

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

دومین کامپایلر هم:

Arm – linux – gnueabi – gcc
Arch : ARM
Vendor : N/A
OS : Linux OS
ABI : GNUEABI

برای کامپایل کردن یه برنامه با ابزار GCC کافیه از دستور زیر استفاده کنیم :

$ gcc [options] [file]

 

فلگ یا پرچم

استفاده کردن از یه سری flag‌ها باعث میشه بتونیم تو روند کامپایل تغییراتی رو ایجاد کنیم. مثلاً استفاده ازفلگ S- باعث میشه صرفاً فایل اسمبلی تولید شه و بقیه مراحل کامپایل انجام نشه. تو تصویر پایین میتونید یه سری از فلگ های کلی کامپایلر رو ببینید:

دستورات کامپایلر GCC

 

تو تصویر زیر هم برخی از Flag های کامپایلر که برای نوع معماری خاص استفاده میشن رو میتونید ببینید:

فلگ تشخیص معماری GCC

 

خب فکر می‌کنم تا همین جا کافی باشه برای این قسمت. در قسمت سوم با هدر فایل و تاثیر آن در روند کامپایل آشنا خواهیم شد.

حمایت از سعید حقیقی پور

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

سعید حقیقی پور
سعید حقیقی پور

تا حالا به این فکر کردین که تو یه سیستم کامپیوتری GPU چقدر کارآمد و مهمه ولی به اندازه CPU شناخته شده نیست.یه جورایی همون "مجهولون فی الارض معروفون فی السماء" که میگن! یه حسی بهم میگه کاش بتونم مثه GPU باشم :)

دیدگاه ها

4 دیدگاه

  • سجاد
    ۱۰ خرداد ۱۳۹۹

    ممنون از وقتی که گذاشتی 🙂

  • علی
    ۳۱ اردیبهشت ۱۳۹۹

    سلام
    عالیه این بحث. با انرژی ادامه بدهید. باتشکر

  • محمدرضا عابدینی
    محمدرضا عابدینی
    ۲۴ اردیبهشت ۱۳۹۹

    سلام بسیار عالی ممنونم .. انشالا مابقی کار رو همراه با اجرا و تست ها منتظریم
    اما قسمت” فلگ یا پرچم “عکسی جا نیفتاده؟ چون نوشتید ” یه سری از فلگ های کلی کامپایلر رو ببینید:” بعدش عکسی نیومده و توضیحات نوشتید

    • Digi Boy
      Digi Boy
      ۲۵ اردیبهشت ۱۳۹۹

      درود بر شما.
      خیلی ممنون که دقت کردید.
      تصویر اصلاح شد.

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک