مهندسی طور

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

مهندسی طور

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

مهندسی طور

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

انگیزه

پنجشنبه, ۱ آبان ۱۳۹۹، ۱۰:۳۲ ب.ظ

سلام!

یه وقتایی هست احساس میکنی زندگی میخواد همه جوره حالتو بگیره اما یهو همه چی عوض میشه و حسابی جون میگیری برای ادامه راه!

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

حالا یه بچه الکترونیکی رو تصور کن که ازش تمام امکاناتشو بگیری.حتی یه سیم و led نداشته باشه که به باتری وصل کنه ذوق کنه :/

روزای اول دقیقا همین وضع رو داشتم.تقریبا تموم چیزایی که تو خونه داشتم رو همون اولای دانشگاه بردم تهران و اونجا ازشون استفاده میکردم.امروز بعد 8 ماه تقریبا تونستم یه آزمایشگاه کوچیک تو خونه برا خودم راه بندازم :)

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

یه جورایی حس میکنم این بسته برام مثه دیدن حضرت یوسف برا باباش بود :)

 

به امید روزای بهتر!

  • Saeid

این روزها

جمعه, ۲۵ مهر ۱۳۹۹، ۱۰:۳۸ ب.ظ

سلام!

این روزها همچنان دارن با شتاب عبور میکنن.یه وقتایی با خودم فکر میکنم واقعا هدف ما تو این جهان اینه که صرفا بخونیم و بخونیم و بخونیم؟

 

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

 

راستش این روزا قبل دیدن این برنامه فقط فکر میکردم تو شرایط کرونایی فعلی کاری نمیشه کار و باید دست روی دست گذاشت.تهش که خیلی بتونی از وقتت استفاده کنی اینه که یه کورس آموزشی پیدا کنی و اونو ببینی که شاید یه مهارت به لیست مهارت هات تو رزومه اضافه شه ولی خب به قول شهریار "این همه درس بخوانیم و ندانیم که چه؟!"

 

مستند مسابقه "کارساز" بهم نشون داد شاید خیلی وقتا اون چیزی که میتونه تو رو از رسیدن به هدفت دور نگه داره نداشتن دانش و تخصص نیست که بخوای با دیدن n تا دوره آموزشی حلش کنی.مساله جای دیگس.داستان از ترس ما برای شروع ناشی میشه.کرونا شاید خیلی از فرصت ها رو ازمون گرفت.همین دیروز تلویزیون پارک لاله رونشون میداد.یاد صبح هایی افتادم که با کلی ذوق و شوق بلند میشدم میرفتم تا عصر تو آزمایشگاه با چیزای مختلف ور میرفتم و الان که میبینم بیشترین چیزایی که یادگرفتم هم از همون روزا بود.

آی که حسابی دلم تنگ شده برای اون روزا!

 

به نظرتون میشه دوباره به اون روزای خوب برگردیم؟

 

نمیدونم چی شد که دلم خواست بنویسم اینجا و ثبت کنم حال این روزهام رو تا وقتی از این فضا عبور کردم و به عقب نگاه کردم بتونم نشونه هایی برای ادامه مسیرم پیدا کنم.

 

راستی دیروز کلید کمدم تو آزمایشگاه رو برای یکی از بچه ها فرستادم تهران که بره و وسایل کمدم رو برام پست کنه تا بتونم اینجا رویام رو بسازم :)

 

با آرزوی حال خوب برای همه مون!

  • Saeid

سرویس ngrok

دوشنبه, ۳ شهریور ۱۳۹۹، ۱۰:۲۱ ب.ظ

سلام!

شاید براتون پیش اومده باشه که تو یه پروژه بخواید از دوتا پورت یه سرور به صورت همزمان استفاده کنید و داده هاتون رو نه از طریق شبکه محلی که از طریق اینترنت و در بستر TCP انتقال بدید.اولین مساله ای که بهش برخورد خواهید کرد داستان فایروال سیستم هستش که اجازه نمیده ترافیک داده از خارج شبکه محلی به داخل شبکه راه پیدا کنه.راهکار اصولی این مساله استفاده از روش Port Forwarding هستش که با تغییر تنظیمات روتر بهش میگید که مثلا از فلان آیپی ترافیک های خارج شبکه رو به داخل شبکه راه بده ولی داستان اونجا پیچیده میشه که بخواید از ماژول های مخابراتی مثه SIM800 استفاده کنید که همونطور که میدونید این ماژول ها رو نمیشه به این راحتی برای Port Forwarding تنظیم کرد همینه که دست به دامن سرویس هایی مثه ngrok و portmap میشیم که یه جورایی همون کار پورت فورواردینگ رو برامون انجام میدن.

خب حالا اگه شما بخواید دو پورت رو به صورت همزمان فوروارد کنید ممکنه اولین ایده این باشه که دو پنجره جداگونه باز کنید و به این ترتیب دوبار از ngrok همزمان استفاده کنید ولی اگه این کار رو انجام بدید خواهید دید که این امکان رو بهتون نمیده :/

راهکار این داستان خیلی سادست.کافیه ویدئوی زیر رو ببینید :)

https://www.youtube.com/watch?v=EciDB0lKk5Q

  • Saeid

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

شنبه, ۱ شهریور ۱۳۹۹، ۰۶:۱۲ ب.ظ

سلام!

گاها پیش میاد که وقتی برد آردوینو رو به لبتاب متصل میکنید تو IDE آردوینو پورت مربوط به بورد رو شناسایی نمیکنه و وقتی هم به Device Manager سر میزنید میبینید مشکل اساسی تر از این حرفاس و گویا اصلا آردوینو شما به عنوان یه COM Port شناسایی نشده :/

من تقریبا یک روز کامل رو صرف کردم تا دلیل این موضوع رو پیدا کنم.تو فروم های مختلف خیلی گشتم ولی کمتر چیز به دردبخوری پیدا شد تا اینکه لینک زیر رو پیدا کردم.دلیل این موضوع تا جایی که من فهمیدم اینه که فریمور اون میکروکنترلر ATMEGA16 که به عنوان واسط بین میکروی اصلی برد و PC عمل میکنه دچار مشکل شده ولازمه آپدیت کنیمش.برای حل این مشکل تو همین لینک به صورت کامل مراحل توضیح داده شده.فقط نکته ای که هست اینه که وقتی میخوایم از نرم افزار FLIP برای آپدیت اون فریمور استفاده کنیم قبل از هرکاری لازمه Target Device مون رو ATMEGA16u2 انتخاب کنیم در غیر این صورت ارتباط مون با برد برقرار نمیشه و نمیتونیم فریمور رو روی برد آپلود کنیم.

من این کار رو انجام دادم و شکر خدا کاملا مشکل حل شد.لینکی هم که گفتم اینه :

https://www.arduino.cc/en/Hacking/DFUProgramming8U2

  • Saeid

راه اندازی SIM800

سه شنبه, ۲۸ مرداد ۱۳۹۹، ۰۹:۵۶ ب.ظ

سلام!

بالاخره بعد مدت ها کنکور رو هم دادیم رفت و تونستم یه ذره به چیزایی که علاقه دارم بپردازم.یکی از اونا هم پروژه کارشناسیم بود.به نظرم جذاب ترین واحدی که تو کل دوره کارشناسی برداشتم همین پروژه بود که واقعا ایده جالبی داره و خب اینجا فرصت توضیحش نیست :)

تو پروژه سر یه داستانی مجبور بودم ماژول مخابراتی SIM800C رو راه اندازی کنم و باهاش دیتا دریافت کنم.اونایی که با این ماژول آشنایی دارن میدونن که راه اندازیش اگه چم و خم کار رو بلد نباشی(دقیقا مثه من!)میتونه دست کم یک هفته وقتت رو بگیره.

ماژول رو از سایت eca سفارش دادم با یه سری خرت و پرت دیگه و امیدوار بودم همون روز اول بتونم داده روش ارسال و دریافت کنم :)

بعد اینکه اتصالات رو انجام دادم دیدم ماژول مثه اینا که یه چشمشون مشکل داره یه ذره چشمک زد و بعدش خاموش شد :/ فک کردم شاید مشکل از ماژوله ولی هیچ دلیلی وجود نداشت ماژول کار نکنه واقعا.خلاصه بعد کلی گشتن و خوندن فروم ها فهمیدم درد اصلی این تیپ ماژول ها پیک های جریانی (حدود 2 آمپر) تو زمان های مشخص (مثلا وقتی میخواد به شبکه وصل شه) هستش که خیلی از منابع جریانی نمیتونن این تیپ جریان ها رو تامین کنن و همین میشه که ماژول ریست میشه ولی من هرچی بررسی کردم این مشکل هم نبود تا اینکه بالاخره تو یکی از گروه های تلگرامی که اصلا فکرش رو هم نمیکردم تونستم راه کار رو پیدا کنم.مشکل خیلی ساده بود :)

مساله نه از ماژول بود و نه از منبع بلکه از واسط این دوتا ینی Bread board که اونجور که من فهمیدم نمیتونه این جریان های ترنزینت رو انتقال بده و همین هم باعث میشه ماژول حالش خراب شه.اومدم برد بورد رو از این بین برداشتم و ماژول رو مستقیم به خروجی رگوله شده منبع وصل کردم و دیدم ماژول مثه بنز داره کار میکنه و مشکلی نداره!

 

بالاخره راه افتاد به لطف خدا :)))

  • Saeid

تابع printf در برنامه نویسی میکرو

جمعه, ۲۷ تیر ۱۳۹۹، ۱۱:۰۵ ق.ظ

معمولا این تابع رو تو برنامه نویسی های کامپیوتری استفاده میکنن و هدف هم چاپ مقدار یه متغیر تو کنسول خروجی هستش ولی تو برنامه نویسی سخت افزار میشه از این تابع به همراه تابع کمکی fputc برای ارسال رشته ورودی به پورت سریال میکرو استفاده کرد.برای اطلاعات بیشتر میتونید تو قسمت مثال های شرکت ST بخش UART برنامه fprintf رو ببینید.این مثال ها داخل ریپوزیتوری برنامه Cube موجود هستش.

  • Saeid

افزودن یه فایل به پروژه

جمعه, ۲۷ تیر ۱۳۹۹، ۱۰:۴۸ ق.ظ

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

برای حال این مشکل لازمه برید تو قسمت تنظیمات پروژه و از اونجا دایرکتوری هدرفایل و دایرکتوری فایل c که تعریف کردید رو به کامپایلر معرفی کنید تا این دایرکتوری ها رو هم برای پیداکردن تعریف توابع برنامه جستجو کنه.

  • Saeid

طاقچه چیه دیگه؟

دوشنبه, ۲۶ خرداد ۱۳۹۹، ۱۰:۱۷ ق.ظ

سلام!

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

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

همین داستان شد هدف بخش "طاقچه" از وبلاگم :)

تو طاقچه سعی میکنم کتاب رو از جنبه های مختلف توضیح بدم و اینکه هدف نویسنده چی بوده اصن و کلا حال وهوای کتاب چیه و از اینطور چیزا.البته من منتقد ادبی و اینا نیستما ولی سعی میکنم چیزایی که مینویسم به درد یه کتابخون(یا بهتر بگم یه کتابخور!) بخوره :))

  • Saeid

روزهای ماه مبارک

پنجشنبه, ۱۸ ارديبهشت ۱۳۹۹، ۰۴:۵۹ ق.ظ

سلام!

امشب فهمیدم اصولا وبلاگ نویس خوبی نیستم چون به کل فراموش کرده بودم اینجا رو :-)

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

میگن بنی آدم و اعضا و اینا یک گوهرند ولی مساله چیز دیگس.چن وقت پیش داشتم با ن ن صحبت میکردم.بهش گفتم ازت دلخورم که خیلی دیر به دیر پیام میدی بهم (یا شایدم من پیام ندم تو کلا یادت میرم!) برداشت بهم گفت نمیفهمم چرا باید پیام بدم :)

اولش جا خوردم ولی بعد که درست فکر کردم دیدم درست میگه.چرا من باید بهش پیام بدم؟چرا اون باید به من پیام بده یا چرا باید اینکه حالمون خوبه یا نه رو به هم اطلاع بدیم؟

چه میشه کرد با چراهایی که تو زندگیت پیش میاد و جوابی نداری براش!

ولی خداروشکر

تا وقتی امیدی برای زندگی دارم و ایده ای برای فکر کردن بهش هیچ وقت به درگاه خدا گلایه نمیکنم.شاید ن ن آدم اشتباهی زندگیم بود که به زور سعی داشتم نگهش دارم ولی خب به قول حافظ "بسوختیم در این آرزوی خام و نشد ..."

 

بیخیال میگذره

راستی کتاب "فرهنگ اتصال" هم به دستم رسید ولی اصلا برام جذاب نبود.فکر میکردم داستان طور باشه ولی دیدم یه تحلیل اجتماعیه :/

  • Saeid

معجزه ای با نام 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 پیداکرد.

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

  • Saeid