دوره آموزش امبدد C

این دوره آموزشی برگرفته از کتاب BARE METAL C به نویسندگی Steve Oualline می‌باشد.

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

در برنامه‌نویسی امبدد، برنامه‌نویسان به شکل عمده با سخت‌افزارهای محدود، مانند میکروکنترلرها، SOC (System on Chip) ،FPGAها سروکار دارند. این سیستم‌ها معمولاً در دستگاه‌های خاص جای می‌گیرند و به‌منظور اجرای وظایف مختلفی طراحی شده‌اند.

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

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

چرا زبان برنامه‌نویسی C

دلایل استفاده از زبان C برای برنامه‌نویسی سیستم‌های تعبیه‌شده بسیارند. در زیر به تفسیر مهم‌ترین آنها می‌پردازیم:

1. دقت دستورات (Precise Control)

دقت در اجرای دستورات (Precise Control) به ویژگی زبان C اشاره دارد که به برنامه‌نویسان اجازه می‌دهد تا در کنترل عملیاتی که توسط برنامه انجام می‌شود، دقت بسیار زیادی داشته باشند.

به‌طور خاص، در زبان C دستورات مانند a = b; به‌صورت ساده و بدون اثرات جانبی انجام می‌شود و هیچ عملیات پنهانی اضافی در این فرایند انجام نمی‌شود. این امر در سیستم‌هایی با منابع محدود مانند سیستم‌های امبدد و میکروکنترلرها بسیار مهم است، زیرا مدیریت حافظه در این سیستم‌ها دارای اهمیت بسیار زیادی است.

2. عدم وجود عملیات پنهانی (No Behind-the-Back Operations)

 در زبان‌های برنامه‌نویسی دیگر مانند C++، اجرای یک دستور ممکن است عملیات‌های پنهانی بسیار زیادی را به همراه داشته باشد. این عملیات‌ها ممکن است شامل فراخوانی توابع عملگرها (operator functions) یا مدیریت حافظه به‌صورت پنهان باشد.

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

3. ارتباط مستقیم با سخت‌افزار (Direct Hardware Interaction)

ارتباط مستقیم با سخت‌افزار (Direct Hardware Interaction) به معنای ارتباط و تعامل مستقیم بین نرم‌افزار (برنامه) و سخت‌افزار است، بدون واسطه‌های نرم‌افزاری اضافی. در این حالت، برنامه‌های نرم‌افزاری می‌توانند به صورت مستقیم با واحدهای سخت‌افزاری مانند ورودی/خروجی‌ها، حافظه، سیگنال‌های سخت‌افزاری و غیره، ارتباط برقرار کنند و عملیات مورد نیاز را انجام دهند.

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

باتوجه‌به موارد فوق، زبان C به‌عنوان یک زبان برنامه‌نویسی مناسب برای توسعه سیستم‌های امبدد انتخاب می‌شود که نیازمند کنترل دقیق بر روی حافظه و ارتباط مستقیم با سخت‌افزار هستند.

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

در این دوره قراره چی یاد بگیریم!؟
در این دوره یاد می‌گیریم چگونه می‌توان برنامه بهینه برای معماری ARM نوشت. برای مثال، استفاده از اعداد صحیح 32 بیتی نسبت به 16 بیتی در تراشه‌های ARM کمک می‌کند که برنامه بهینه‌تری در عملکرد و سرعت داشته باشیم.
چه ابزارهایی نیازداریم؟

برای برنامه‌نویسی و دیباگ میکروکنترلر شامل هسته ARM، نیازمند به ابزارهای زیر هستید:

  • پروگرامر حافظه فلش (Flash Memory Programmer): پروگرامر حافظه فلش به شما کمک می‌کند که کد برنامه را به حافظه تراشه منتقل کنید.
  • مبدل USB به سریال (USB-to-Serial Converter): این تبدیل به شما امکان می‌دهد که از خطوط سریال جهت اشکال‌زدایی و رفع عیب استفاده کنید. این ارتباط از طریق یک کابل USB به سریال برقرار می‌شود.
  • JTAG Debugger: این ابزار دیباگ مبتنی بر JTAG را انجام می‌دهد. JTAG یک استاندارد صنعتی برای اتصال و اشکال‌زدایی مدارهای الکترونیکی است.
  • برد NUCLEO-F030R8: شرکت STMicroelectronics یک برد به نام NUCLEO-F030R8 ارائه داده است که تمام ابزارهای لازم برای برنامه‌نویسی و اشکال‌زدایی یک تراشه ARM را فراهم می‌کند. این برد شامل اتصالات و امکانات لازم برای توسعه برنامه‌های امبدد است.

با تهیه این ابزارها و تجهیزات، می‌توانید برنامه‌نویسی و دیباگ بر روی تراشه ARM خود را آغاز کنید.

 در صورتی که میکروکنترلر مورد استفاده از نوع STM است، می‌توانید از ابزار دیگری به نام STLink استفاده کنید که به‌طور خاص برای برنامه‌نویسی و دیباگ میکروکنترلرهای STM ارائه شده است. همچنین، برخی از بردهای توسعه مانند NUCLEO-F030R8، ابزارهای دیباگ را همراه با خود دارند و نیازی به تهیه جداگانه آن‌ها نیست.

نگاهی کوتاه به دوره برنامه‌نویسی امبدد

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

سیستم باید به طور دوره‌ای وضعیت باتری را بررسی کرده و این اطلاعات را به ایستگاه مرکزی ارسال کند. این کار دو هدف دارد؛ ابتدا، زمانی که باتری خالی می‌شود، شرکت با ارسال هشدار به مصرف‌کننده درخواست می‌کند تا باتری تعویض شود.

دوم، اگر ایستگاه مرکزی سیگنال دوره‌ای دریافت نکند، شرکت متوجه می‌شود که مشکلی برای سیستم به‌وجود آمده است.

این نوع برنامه‌نویسی در دنیای سیستم‌های امبدد رایج است.

در این دوره، شما با برنامه‌نویسی C آشنا خواهید شد. همچنین به طور دقیق توضیح می‌دهیم که کامپایلر C چگونه عمل می‌کند تا بتوانید دقت بیشتری در کنترل میکروکنترلرها داشته باشید. برای داشتن این کنترل دقیق، باید بدانید که کامپایلر در پشت پرده چه کاری انجام می‌دهد.

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

یکی از روش‌های اشکال‌زدایی بسیار ابتدایی و متداول، قراردادن printf در کد است. این کار در برنامه‌نویسی سیستم‌های امبدد کمی دشوار است، چرا که جایی برای چاپ خروجی وجود ندارد. ما در اینجا نحوه استفاده از ورودی/خروجی سریال، برای به‌دست‌آوردن داده‌های چاپی از سیستم امبدد به‌منظور اشکال‌زدایی و ثبت را برسی می‌کنیم.

همچنین، در این دوره، با برنامه‌نویسی با وقفه‌ها (Interrupt Programming) آشنا خواهیم شد.
برنامه‌نویسی با وقفه‌ها به یک الگوی برنامه‌نویسی اطلاق می‌شود که در آن اجرای نرم‌افزار ممکن است به‌صورت موقت توسط وقفه‌ها به‌منظور پردازش رویدادها یا شرایط خارجی متوقف شود.

این رویکرد به‌خصوص در مدیریت عملیات ورودی و خروجی مؤثر است و باعث افزایش کارایی سیستم می‌شود. از طرفی، در صورت پیاده‌سازی نادرست، ممکن است با مشکلاتی همچون شرایط رقابتی (Race Conditions) و خطاهای تصادفی دیگر روبرو شویم.

در این راستا، طراحی صحیح بسیار حیاتی است. در برنامه‌نویسی امبدد که از منابع محدود استفاده می‌کنیم، طراحی بسیار اهمیت دارد؛ زیرا مشکلات وقفه‌ای ممکن است به‌شدت مقاوم در برابر اشکال‌یابی و دیباگ باشند.

به دنیای برنامه‌نویسی امبدد خوش آمدید.

قسمت 12 آموزش برنامه نویسی C

دستورات کنترلی زبان C برای امبدد سیستم ها – قسمت دوازدهم آموزش امبدد C

در قسمت قبل آموزش برنامه نویسی C به بررسی بیت ها در امبدد C پرداختیم. در این قسمت به دستورات کنترلی زبان C برای امبدد سیستم ها می پردازیم. کامپیوتر یک ابزار قدرتمند است زیرا می‌تواند بر اساس داده‌هایی که دریافت می‌کند تصمیم بگیرد...

ادامه مطلب

قسمت یازدهم آموزش امبدد C

بررسی بیت ها در امبدد C – قسمت یازدهم آموزش امبدد C

در قسمت قبل آموزش برنامه نویسی C به نمایش مکمل دو در اعداد صحیح با علامت (Two’s Complement) پرداختیم. در این قسمت به بررسی بیت ها در امبدد C می پردازیم. دنیای سخت‌افزار شیفته‌ی تعریف همه چیز بر اساس بیت‌ها است. چرا؟ چون سیگنال‌ها...

ادامه مطلب

نمایش مکمل دو دراعداد صحیح با علامت (Two’s Complement) – قسمت دهم

در قسمت قبل آموزش برنامه نویسی C به بررسی سیستم اعداد در برنامه‌نویسی C امبدد پرداختیم. در این قسمت به نمایش مکمل دو در اعداد صحیح با علامت (Two’s Complement) می پردازیم.در نمایش اعداد علامت‌دار، سمت چپ‌ترین بیت جهت نمایش علام...

ادامه مطلب

قسمت نهم امبدد C

سیستم اعداد در برنامه‌نویسی C امبدد | قسمت نهم آموزش امبدد C

فرض کنید پنج گاو داریم. در زبان فارسی، می‌توانیم این عدد را به‌صورت «پنج» یا «۵» نمایش دهیم. در زبان برنامه‌نویسی C، می‌توانید از چهار نمایش برای اعداد استفاده کنید: ده‌دهی (مبنای ده یا دسیمال)، دو‌دویی (مبنای دو یا باینری)، هشت‌ه...

ادامه مطلب

آموزش زبان C قسمت هشتم

اعداد و متغیرها | قسمت هشتم آموزش برنامه نویسی C

در قسمت قبل آموزش برنامه نویسی C به بررسی پروگرام و دیباگ برد NUCLEO-F030R8 و بررسی فایل های پروژه پرداختیم. در این قسمت به بررسی اعداد و متغیرها در زبان C می پردازیم. حالا که چند برنامه ساده نوشته‌ایم، وقت آن است که به کامپیوتر ...

ادامه مطلب

آموزش برنامه نویسی C قسمت هفتم

پروگرام و دیباگ برد NUCLEO-F030R8 و بررسی فایل های پروژه | قسمت هفتم آموزش برنامه نویسی C

در قسمت قبلی آموزش برنامه نویسی C به آموزش مقدمات برنامه نویسی پرداختیم، در این قسمت به بررسی نحوه کانفیگ IDE و شروع برنامه نویسی امبدد C می پردازیم. پروگرام و دیباگ برد NUCLEO-F030R8 در طی فرایند کامپایل System Workbench for ST...

ادامه مطلب

آموزش برنامه نویسی C قسمت ششم

شروع برنامه‌نویسی – قسمت ششم آموزش امبدد C

در قسمت قبلی آموزش برنامه نویسی C به بررسی محیط های توسعه یکپارچه یا IDE برای برنامه نویسی C و معرفی محیط توسعه یکپارچه System Workbench for STM32 پرداختیم، در این قسمت به بررسی نحوه کانفیگ IDE و شروع برنامه نویسی امبدد C می پرداز...

ادامه مطلب

قسمت پنجم آموزش برنامه نویسی امبدد C

مقدمه‌ای بر محیط‌های توسعه یکپارچه (IDE) – قسمت پنجم آموزش برنامه نویسی C

تاکنون، ما از ابزارهای جداگانه‌ای مانند GCC ،make و یک ویرایشگر متن برای ساخت برنامه‌هایمان استفاده کرده‌ایم. این کار به شما اجازه می‌دهد تا ببینید هر ابزار چه کاری انجام می‌دهد و همچنین در مورد جزئیات توسعه نرم‌افزار یاد بگیرید. ...

ادامه مطلب

قسمت چهارم امبدد C

لینکر (linker) در زبان C – قسمت چهارم امبدد C

 در قسمت قبل در بررسی پشت پرده فرایند کامپایل به نقش  پیش‌پردازشگر، کامپایلر و اسمبلر پرداختیم در ادامه به بررسی عملکرد لینکر می‌پردازیم. لینکر برای ساخت برنامه‌، لازم است آبجکت فایلی (object file) که از برنامه خود ایجاد کردیم و...

ادامه مطلب

آموزش امبدد C قسمت سوم

بررسی عملکرد پیش‌پردازنده، کامپایلر و اسمبلر – قسمت سوم امبدد C

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

ادامه مطلب