آموزش برنامه نویسی c برای میکروکنترلرها مطابق سبک NASA

چرا آموزش برنامه نویسی C ؟! واقعا سوالی است که در ذهن خیلی ها شکل میگیره ، زبان c چقدر در الکترونیک کاربرد دارد ؟ دانستن اصولی برنامه نویسی C چقدر به شما در انجام پروژه های الکترونیکی کمک خواهد کرد ؟ شاید اگر ده سال پیش بود جواب دادن به این سوال ها سخت تر می‌بود! اما امروز با یک حساب سر انگشتی ساده می توان از نقش پر رنگ برنامه نویسی C در دنیای الکترونیک پی ببرید!

امروزه اغلب بردهای الکترونیکی دیجیتالی هستند و اغلب بردهای دیجیتالی داری یک پردازنده برنامه پذیر است که لازم است به نحوی برای آن برنامه ای نوشته شود به دلایل متعدد زبان برنامه نویسی c یکی از بهترین انتخاب های ممکن است برای همین هم سعی کردیم که آموزش برنامه نویسی c را برای میکروکنترلرها با نگاه کاربردی تهیه کنیم.

سبک ناسا چیست و چرا برنامه نویسی c به سبک ناسا

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

با توجه به حساسیت کار ناسا ، نیاز بود که الگویی برای برنامه نویسی اصولی ایجاد شود تا احتمال ایجاد خطاهای ناخواسته را کاهش دهد و توسعه برنامه را در آینده نیز ساده تر کند. برای همین مهندسین این شرکت تصیمیم به تدوین سلسله قوانینی برای برنامه نویسی کردند.اگر در مورد جزییات این استاندارد کنجکاو شده اید می توانید داکیومنت NASA-GSFC_C_Programming_Styles-94-003 را دانلود و مطالعه کنید.

در این آموزش ها سعی شده است از مبانی و اصول ارائه شده ناسا برای آموزش برنامه نویسی c استفاده شود.

دانلود رایگان

دانلود رایگان بخشی از جلسه دهم دوره آموزش برنامه نویسی c که علت شایع هنگ کردن میکروکنترلرها می‌پردازد ! شاید برای شما هم پیش آمده باشد که به هیج دلیل خاصی برنامه میکروکنترلر هنگ کند و این امر باعث کلافگی شما شده باشد بعد از دانلود رایگان و تماشای این قسمت از آموزش احتمالا قادر خواهید بود این دست مشکلات را حل کنید.

برای دریافت لینک دانلود تنها کافیه ایمیلت رو وارد کنی تا لینک دانلود براتون ارسال بشه

دوره جامع برنامه نویسی c شامل

آشنایی با تاریخچه زبان C و استانداردهای C89 , C99  و C11 به صورت کاملا مفهومی آشنا خواهید شد

آشنایی با میکرکنترلرها و آدرس‌های حافظه میکروکنترلرهای Cortex-m آشنا خواهید شد

آشنایی با نسل‌های زبان‌های برنامه نویسی را می‌شناسید و با مفاهیم کمپایلر و IDE آشنا خواهید شد

۶ قاعده اصلی زبان c را به صورت عملی یاد خواهید گرفت

در دوره برنامه نویسی c با سبک‌های مطرح در برنامه نویسی و معیارهای سنجش آنها آشنا خواهید

آشنایی با کلاس‌های ذخیره‌سازی static, extern, register, const, volatile آشنا خواهید شد

آشنایی با انواع آرایش بایت در حافظه (Little Endian و Big Endian) به صورت کاملا عملی آشنا خواهید

آشنایی با انواع دستورات پیش پردازنده و نحوه تعریف آنها طبق سبک ناسا آشنا خواهید شد

در دوره برنامه نویسی c با تعریف اشاره‌گرها به صورت اصولی آشنا می‌شوید

یاد خواهید گرفت که چطور به کمک اشاره‌گرها داریور سخت افزار نوشته می‌شود

و….

نمونه ویدئو آموزشی دوره برنامه نویسی c

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

با خرید دوره برنامه نویسی c

۱۳ جلسه ویدئو آموزشی دریافت خواهید کرد.

۱۳ اسلاید مروبط به هر جلسه را دریافت خواهید کرد.

۲ ساعت پرسش و پاسخ با مدرس دوره خواهید داشت

دوره جامع برنامه نویسی c
برای میکروکنترلرها در یک نگاه

دوره ای که بعد از آن درک و فهم یک برنامه نویسی مبتنی بر میکروکنترلرها را به شما میدهد

مدرس این دوره به عنوان یک برنامه نویس سخت افزار , توانایی لازم جهت ارتباط با سخت افزار را به شما میدهد

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

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

سرفصل های پکیج آموزشی

نرم افزار چیست؟

تاریخچه نرم افزار

انواع زبان های برنامه نویسی

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

تاریخچه زبان c

استانداردهای زبان c

آشنایی با سخت‌افزار کامپیوتر

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

نگاشت حافظه یا Memory Map

آشنایی با میکروکنترلرها

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

آدرس‌های حافظه در میکروکنترلرهای Cortex-M

کمپایلر چیست؟

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

معرفی چند IDE معروف

چرا Hello World؟

ساختار برنامه

قواعد برنامه‌نویسی در C

کلمات رزرو شده در C

سبک نوشتن چیست؟

معیارهای ارزیابی سبک‌ها

معرفی چند سبک معروف

سبک اسپاگتی

سبک CamelCase

سبک Hungarian

سبک NASA

آیا حتما باید از سبک برنامه‌نویسی استفاده کنم؟

داده چیست؟

انواع داده پایه

چرا باید نوع اعداد مشخص شود؟

انواع استانداردهای حروف

جدول ASCII

مروری بر مفاهیم دیجیتال

متغیر چیست؟

تعرف متغیر در زبان C

معرفی انواع کلاس ذخیره سازی متغیرها

کلاس static

کلاس extern

کلاس register

کلاس const

کلاس volatile

کپی رشته در رشته

قوانین نام‌گذاری طبق سبک NASA

میدان دید متغیرها

تعریف نوع جدید با typedef

بررسی اندازه انواع داده با sizeof

رفع مشکل اساسی با انواع داده استاندارد

تبدیل صریح و تبدیل ضمنی

بررسی خطای 500 میلیون دلاری

آدرس متغیرها

آرایش بایت‌ها در حافظه

انواع دستورات پیش پردازنده

اضافه کردن کتابخانه به برنامه طبق سبک ناسا

ماکرو چیست؟ انواع ماکروها

نحوه تعریف و حذف ماکرو در برنامه

پیشوند اعداد  بیان آنها در مبناهای مختلف

پسوند اعداد و کاهش حجم آنها در برنامه

بیان اعداد به روش نماد علمی

آرایه و ویژگی‌های آن

مقداردهی اولیه به آرایه‌ها

دسترسی به خانه‌های آرایه

قرارگیری آرایه‌ها در حافظه و اندازه آرایه

رشته‌ها

3 نکته بسیار مهم در کاربا رشته‌ها

آرایه‌ها‌ی چند بعدی

ترتیب آرایه‌های چندبعدی در حافظه

جزئیات کلاس const

2 نکته مهم کلاس const

کلاس ذخیره‌سازی volatile

چرا برنامه بعد از بهینه‌سازی کار نمی‌کنید؟

قراردادن متغیر در آدرسی خاص

تعریف اشاره‌گر

مروری بر متغیرها و مدل خانه و کُدپستی

اشاره‌گر به آدرس ثابت

مراحل تعریف اشاره‌گر به آدرس ثابت

نوشتن درایور سخت افزاری به کمک اشاره‌گرها

اشاره‌گر به آرایه

نگاهی دقیق‌تذ به اشاره‌گرها

اشاره‌گر همه منظوره (Generic)

تعریف آرایه به صورت داینامیک

5 گام در اخذ حافظه به صورت داینامیک

پارتیشن‌بندی حافظه SRAM

مواظب پراکندگی در حافظه باشید!

مروری بر انواع داده

3 روش تعریف ساختار

تعریف نوع جدید با ساختار

دسترسی به اعضای ساختار

اندازه ساختار

چرا با جابجایی اعضا اندازه ساختار تغییر پیدا می‌کند؟

همترازی در حافظه

آدرس متغیرهای نوع int و  نوع short

ارتباط ترازبندی و ساختارها

Pack کردن ساختارها با pragma

Pack کردن ساختارها با CMSIS

مفهوم Bit Field ها در ساختارها

ساختارهای تودرتو و خود ارجاع

مقداردهی اولیه به ساختارها

یونیون‌ها و روش‌ها تعریف آنها در حافظه

دسترسی به اعضای داخلی یونیون‌ها

تفاوت یونیون و ساختارها

کاربرد یونیون‌ها

دسترسی بیتی به متغیرهای چندبایتی با یونیون‌ها

افزایش راندمان در ارسال و دریافت داده‌ها با یونیون

نوع داده شمارشی

روش‌های تعریف داده شمارشی

دسترسی به اعضای enum

دلیل استفاده از نوع شمارشی در برنامه

کاربرد نوع شمارشی در ماشین‌های حالت

برنامه‌نویسی شئی‌گر

معرفی خصوصیات و مِتُدها

4 اصل در برنامه نویسی شئی‌گرا

امکانات شئی‌گرایی در C

تعریف شئی جدید برای رجیسترهای پورت سریال

ترتیب نوشتن تعریف داده‌ها

تعریف عملگر، عملوند، عبارت

عملگر انتساب و حالات خاص آن

عملگرهای ریاضی

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

عملگر ریاضی یکانی

عملگرهای رابطه‌ای

نکته بسیار مهم مفهومی عملگرهای رابطه‌ایی

کنترلر خروجی بدون دستور IF تنها با عملگر رابطه‌ای

عملگر انتساب شرطی

ترکیب شرط‌ها با عملگر منطقی

عملگرهای شیفت به راست و چپ

عملگرهای انتساب ترکیبی

Set کردن یک بیت خاص

Clear کردن یک بیت خاص

تقدم عملگرهای و خاصیت شرکت‌پذیری

بررسی خطای ماشین حساب ویندوز 10

طرز صحیح نوشتن عملگرها طبق سبک ناسا

روند اجرای برنامه، فلوچارت

اجزای فلوچارت

فلوچارت ساده‌ی دزدگیر ماشین

دستورات if و انشعابات آن

تشخیص overflow

بررسی ماکروهای limits.h

نکته‌ی خیلی مهم اثر جانبی (side effect)

معرفی کوتاه MISRA C

عملگر علامت سوال( ؟:)

دستور switch case

5 نکته‌ی مهم در switch case

مثالی از ماشین حالت با switch و enum

دستور goto و ایجاد حلقه با آن

برطرف کردن محدودیت دستور goto با کمک long jump

4 مرحله ایجاد پرش طولانی در برنامه

تعریف ابتدایی حلقه و انواع آن

پیاده‌سازی حلقه‌ها در زبان C

انواع حلقه‌های بینهایت

گرفتن اطلاعات از ورودی

دستورات کنترل حلقه

آشنایی با Pipeline

کلاس ذخیره سازی رجیستر

تکنیک‌های بهینه‌سازی حلقه‌ها

آشنایی با خطر حلقه‌های انتظار

تابع چیست و چرا باید از آن استفاده کرد؟

انواع تابع از نظر ورودی-خروجی

پیاده‌سازی توابع در زبان C

پیش تعریف تابع و بدنه آنرا کجا قرار دهیم؟

فراخوانی توابع

مراحل اجرای تابع و نقش stack  در آن

درک کامل push و pop متغیرها در stack

3 نکته بسیار مهم در سرعت توابع و قابلیت اطمینان توابع

ارجاع با مرجع و ارجاع با مقدار

روش‌های پیاده سازی توابع با چند خروجی

اشاره‌گر توابع و حل سه تمرین بسیار مهم

آرایه‌ای از جنس اشاره‌گر تابع و افزایش سرعت برنامه

توضیح کامل translation unit  یا واحد ترجمه

کلاس ذخیره سازی static برای توابع و متغیرها

کلاس ذخیره سازی extern برای توابع و متغیرها

توابع با ویژگی inline و بررسی آنها با استفاده از کُد اسمبلی

توابع با ویژگی weak و تمرینی بسیار مفهومی توسط آن

ویژگی‌های no_return و used و پیاده سازی آن در cmsis

تکنیک بسیار مهم قرار دادن توابع در RAM در Keil   و IAR

پیاده سازی توابع با تعداد ورودی متغیر ( درک توابعی مثل printf)

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

و نوشتن function prolog طبق سبک ناسا

انواع دستورات پیش‌پردازنده را بشناسیم و به کمک آنها برنامه‌های پیشرفته‌تری بسازیم

یاد می‌گیریم انوع کتابخانه‌های استاندارد و کتابخانه‌هایی ThirdParty را طبق سبک ناسا به برنامه اضافه کنیم.

انواع مختلف تعریف ماکروها را یاد میگیرم و با دو دسته‌ی Object-Like و Function-Like آشنا میشیم.

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

انوع توابع تک خطی و چند خطی را به کمک ماکروهای یاد می‌گیریم.

نحوه‌ی صحیح پرانتزگذاری و همچنین با دلیل استفاده کردن از do-while در ماکروهای و کتابخانه‌های پیشرفته آشنا میشیم

یاد میگیریم که چرا از بلوک‌های  کُد در شبه توابع استفاده می‌شود.

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

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

با یادگیری دقیق تکنیک Function Wrapping، قادر خواهیم بود که نام توابع که در کتابخانه‌های دیگر هستند را کامل عوض کنیم! حتی می‌توانیم تعداد آرگومان‌های ورودی را تغییر دهیم!

با مهمترین مشکل شبه توابع آشنا میشیم و راه‌حل‌هایی برای حل این مشکل در استانداردهای مختلف ارائه خواهیم کرد.

یاد میگیریم که چطور نوعی چند ریختی یا polymorphism در زبان C ایجاد کنیم!

انواع زمان‌ها در برنامه نویسی را بخوبی یاد خواهیم گرفت.

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

بعضی‌ها از همان روش نوشتن توضیحات برای کانت کردن کُدها استفاده میکنند! روش صحیح و اصولی غیرفعال کردن کُد را یاد میگیرم و بررسی خواهیم کرد که چه زمان نباید این کار انجام دهیم.

با ماکروهای از پیش تعریف شده استاندارد آشنا میشیم و با کمک آنها، برنامه‌هایی مینویسیم که در هر کمپایلری رفتار خاصی داشته باشند!

یاد می‌گیریم که چطور برنامه‌ای بنویسیم که فقط در یک کمپایلر خاص اجرا شود و در سایر کمپایلرها کار نکند!

با دستوراتی برای متوقف کردن کمپایلر و چاپ پیغام در زمان کمپایل کردن برنامه آشنا میشیم.

یاد میگیرم که چگونه پروژه‌های شلوغ را به پروژه‌ای با چند فایل و مرتب تبدیل کنیم و با مزایای این‌کار از نزدیک آشنا می‌شیم.

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

تفاوت فایل .C و .H را بخوبی خواهیم فهمید و یاد میگیرم که در هر فایل چه بخش‌هایی را قرار بدیم تا برنامه به درستی کار کند.

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

روش نوشتن کتابخانه‌های متن باز Open Source را با هم تمرین می‌کنیم و نحوه‌ی استفاده از آنها در برنامه‌ها را بررسی میکنیم.

یاد میگیریم که چطور کتابخانه‌ای بنویسیم که هیچ کس به محتوای آن دسترسی نداشته باشد و تنها قادر باشند از آن استفاده کنند.

با پشتیبانی کردن کمپایلرهای میکروکنترلرها از زبان ++C ، با تکنیکی آشنا میشیم که بتوانیم کُدهایی بنویسیم که بدون هیچ تغییری در زبان ++C استفاده شوند.

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

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

چند سوال اساسی در باره کتابخانه ها

بررسی دستور printf

رشته‌های کنترلی در printf

اهمیت Length در printf

بررسی کتابخانه h

روش صحیح عبارت کنترل رشته

بررسی تابع sprintf

بررسی تابع putchar

تابع scanf و نکات مهم آن

تغییر جهت توابع printf و scanf در Keil و IAR

کتابخانه h

تولید اعداد تصادفی

کتابخانه h و توابع آن

کتابخانه h

بررسی کتابخانه h

آشنایی با کتابخانه CMSIS

استفاده از کتابخانه microlib در keil

مروری بر مفاهیم آماری

آشنایی با میانگین، واریانس و انحراف معیار

پیاده سازی مفاهیم آماری به صورت شبه شئی گرایی

فریم بندی اطلاعات برای استفاده در پورت سریال

ارسال اطلاعات در پورت سریال به صورت شبه شئی گرایی

سخن نهایی و روشن کردن ادامه مسیر