مهندسی طور

روزنوشت های یه مهندس تازه کار

مهندسی طور

روزنوشت های یه مهندس تازه کار

مهندسی طور

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

معجزه ای با نام Make

جمعه, ۱۲ ارديبهشت ۱۳۹۹، ۱۲:۳۹ ق.ظ

از اونجا که پروژه های بزرگ برای تولید خروجی نهایی ممکنه زمان زیادی رو از تیم برنامه نویس بگیره و همچنین احتمال رخداد خطاهای انسانی تو این فرایند هم بالاست به همین خاطر ناچارهستیم از ابزار سودمندی که GNU برای استفاده منتشر کرده استفاده کنیم.این ابزار عنوان های مختلفی داره که مهمترین شون Build management software هستش که فک میکنم این اسم به خوبی هدف از به کارگیری این ابزار رو مشخص میکنه!

تو سایت رسمی GNU ابزار Make رو اینطور تعریف کرده :

Tool that controls the generation of executable and other non-source files of a program from the program's source files.

برای استفاده از این ابزار لازمه فایل(یا فایلهایی) تحت عنوان Make files در اختیار این ابزار قرار بگیره.این فایل ها در واقع به این خاطر استفاده میشن که به ابزار Make بفهمونن چطوری باید فرایند Build یه پروژه خاص رو انجام بده.

اهمیت مهم دیگه Make file ایجاد امکانی هستش که تو فرایند Version Control خیلی میتونه موثر باشه.بذارید بیشتر توضیح بدم.فرض کنید شما کدتون رو تو یه محیط اشتراک کد مثه Github قرار دادید و یه make file هم براش نوشتید و کنارش گذاشتین.حالا بعد یه مدت بعضی از قسمت های کدتون رو تغییر میدین به نحوی که تو فرایند کامپایل هم این تغییرات تاثیرگذار هستند مثلا یه سری فلگ ها رو باید تو دستوراتتون تغییر بدین.کاری که میشه انجام داد اینه که خیلی ساده فقط این فلگ ها رو توی Make file عوض کنید.به این ترتیب هرکس که اون Make file رو اجرا کنه بدون اینکه بدونه در گذشته چه بلاهایی سر کد در اومده میتونه خروجی مطلوب رو دریافت کنه.

خب حالا که با این ابزار تا حدی آشنا شدیم ببینیم اصولا چطوری کار میکنه و ما چطور میتونیم ازش استفاده کنیم؟

داخل Make file تعداد build rule وجود داره که به فرمت زیر هستند:

Target : prerequisite1 prerequisite2 prerequisite3 …

Command1

Command2

برای مثال یه build rule رو به صورت زیر تصور کنید :

My_file.o : my_file.c my_file.h

Gcc –c my_file.c –o my_file.o

خب حالا اگه دستور زیر رو توی ترمینال وارد کنیم :

$ make my_file.o

با اجرای این دستور ابزار Make میاد تو make file دنبال تارگتی به اسم my_file.o میگرده و اگه prerequisite هایی که براش مشخص شده هم برقرار باشه (تو این مثال فایلهای my_file.c  و my_file.h داخل دایرکتوری پروژه وجود داشته باشن) اونوقت میره ودستورات این build rule رو اجرا میکنه.

ساختاری که برای نوشتن Make file به کار میره :

  • استفاده از # برای نوشتن کامنت ها
  • میتونه یه سری Make file دیگه رو include کنه داخل خودش
  • میتونه متغیر داخلش تعریف بشه و از این متغیرها هم استفاده شه
  • میتونه Build rule های مختلفی رو داخلش داشته باشه
  • دستورات اجرایی هر Build rule با یه tab نسبت به خط اول نوشته میشن
  • برای ادامه خط ها در خط بعد از  "\" استفاده میشه

در تصویر زیر مثالی از یک Make file ساده رو میتونید ببینید :

خب احتمالا تا همین مرحله کافیه اگرچه نوشتن Make file کلی بحث های پیشرفته دیگه هم داره که اینجا بهش پرداخته نشد.

در انتها هم به معرفی یه سری از ابزار های GNU میپردازیم که میتونه تو روند برنامه نویسی و دیباگ کردن پروژه ها به خصوص به منظور انجام بهینه سازی ها کمک قابل توجهی کنه.البته اینم بگم که GNU ابزارهای خیلی زیادی برای توسعه نرم افزارها داره که ما اینجا صرفا به اونایی اشاره میکنیم که مهندسای سخت افزار به کارشون میاد!

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

arm–none-eabi-size –Atd demo.out

ابزار بعدی objdump هستش که با دریافت آبجکت فایل میتونه کد اسمبلی هر قسمت رو به صورت جداگونه نمایش بده.آخرین ابزاری هم که معرفی خواهیم کرد readelf هست که اطلاعات مهمی رو میتونه از فایل های خروجی با پسوند *.elf استخراج کنه و نمایش بده.اطلاعاتی راجع به بخش های کامپایل شده،بخش های حافظه،جدول نمادها(symbol table)و در نهایت اطلاعات معماری سخت افزار.برای استفاده از این ابزارها هم دستوری مثل دستور زیر رو میتونیم به کار ببریم :

arm-none-eabi-readelf demo.out –all

در انتها هم لازمه عرض کنم تمامی این ابزارها رو میشه تحت عنوان پکیج GNU binutils پیداکرد.

امیدوارم این مطلب براتون مفید بوده باشه :)

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی