بسمالله الرحمنالرحیم
اگر قسمت قبل آموزش میکروبلیز: مقدمه را خوانده باشید در واقع یک مقدمه ای از میکروبلیز و اهمیت آن در FPGA اشاره شده بود که توصیه میکنم اگر قسمت قبل را مطالعه نکردهاید حتما اینکار را انجام دهید چون یک دید کلی از مبحث میکروبلیز به همراه نقشه راه این سری از مقالات بدست خواهید آورد. که فکر میکنیم شاید خیلی از سوالات شما در این زمینه حل شود و به یک دید نسبتا خوبی در این زمینه برسید.
شاید برای شما مفید باشد: آموزش FPGA
خب اگر به خاطر داشته باشید در بخشی از قسمت قبل به زبان C و اهمیت آن در میکروبلیز پرداختیم این مبحث به حدی مهم است که توصیه میکنم تا زبان C را به صورت کامل یاد نگرفتهاید سمت میکروبلیز نروید.
اگر بخواهیم به زبان سادهتر بگوییم میکروبلیز را هم دقیقا یک میکروکنترلر درنظر بگیرید(فارغ از نوع ساختار و خیلی از مسائل دیگری که این میکرو را از سایر متمایز میکند که در بخش خودش به این موارد خواهیم پرداخت ان شالله). و همانطوری که میدانید برای ارتباط با یک میکروکنترلر باید بتوانیم به زبان آن نوع میکروکنترلر خاص صحبت کنیم حال در این مقاله و چند مقاله بعدی میخواهیم به قواعد و دستورات اولیه زبان C بپردازیم که مطمئنا اکثر شماها بارها از این دستورات و قواعد در برنامههای خود استفاده کردهاید اما برای اینکه این سری از آموزشها تکمیل شود مجددا به توضیح این زبان شیرین خواهیم پرداخت. البته این نکته را بگوییم که یک سری از نکات را هم در این آموزشها بیان خواهیم کرد که غالبا در هنگام برنامه نویسی در میکروبلیز است که فکر نمیکنیم برای شما خالی از لطف باشد.
شاید این سوال ذهن شما را درگیر کرده باشد که چرا از همان ابتدا به آموزش میکروبلیز نمیپردازید؟ در جواب باید بگوییم فرض کنید الان دقیقا این آموزشها را یادگرفتهاید و دقیقا وارد صفحه برنامهنویسی در محیط SDK (به توضیح مفصل این نرمافزار خواهیم پرداخت) شدیم خب اگر این اصول را ندانید که چطور باید در این محیط برنامهنویسی کنید ممکن است که یک سری از کارها را بتوانید انجام دهید مثل راهاندازی سختافزارهای جانبی و … اما اگر به هر دلیلی خواستید برنامهای بنویسید که در هر FPGA با مشخصات خاصی که برای میکروبلیز کار کند راهحل چیست؟ و یا اگر از شما انجام یک پروژه تلفیقی (ترکیب چند بخش از با یک دیگر) خواسته شد چه کاری را باید انجام دهید؟ و یا …
امیدواریم که توانسته باشیم دلیل اهمیت موضوع و دلیل آموزش زبان C را بیان کرده باشیم.
در این مقاله میخواهیم ابتدا به تاریخچه زبان C و در نهایت به برخی از قواعد زبان C بپردازیم.
تاریخچه زبان C
در سال ۱۹۶۷ مارتین ریچاردز زبان BCPL را برای نوشتن نرمافزارهای سیستمعامل و کامپایلر در دانشگاه کمبریج ابداع کرد. سپس در سال ۱۹۷۰ کن تامسون زبان B را بر مبنای ویژگیهای زبان BCPL نوشت و از آن برای ایجاد اولین نسخههای سیستمعامل یونیکس در آزمایشگاههای بل استفاده کرد.
زبان C در سال ۱۹۷۲ توسط دنیس ریچی از روی زبان B و BCPL در آزمایشگاه بل ساخته شد و ویژگیهای جدیدی همچون نظارت بر نوع دادهها نیز به آن اضافه شد. ریچی از این زبان برای ایجاد سیستمعامل یونیکس استفاده کرد اما بعدها اکثر سیستمعاملهای دیگر نیز با همین زبان نوشته شدند. این زبان با سرعت بسیاری، گسترش یافت و چاپ کتاب “The C Programming Language” در سال ۱۹۷۸ توسط برایان کرنیگان و ریچی باعث رشد روزافزون این زبان در جهان شد.
متأسفانه استفاده گسترده این زبان در انواع کامپیوترها و سختافزارهای مختلف باعث شد که نسخههای مختلفی از این زبان به وجود آید که با یکدیگر ناسازگار بودند. در سال ۱۹۸۳ مؤسسه استانداردهای ملی آمریکا (ANSI) کمیتهای موسوم به X3J11 را مأمور کرد تا یک تعریف فاقد ابهام و مستقل از ماشین را از این زبان تدوین نماید. در سال ۱۹۸۹ این استاندارد تحت عنوان ANSI C به تصویب رسید و سپس در سال ۱۹۹۰، سازمان بینالمللی استانداردسازی (ISO) نیز این استاندارد را پذیرفت و مستندات مشترک آنها تحت عنوان ANSI/ISO C منتشر گردید.
در سالهای بعد و با ظهور روشهای برنامهنویسی شئگرا نسخه جدیدی از زبان C بنام ++C توسط بییارنه استراستروپ در اوایل ۱۹۸۰ در آزمایشگاههای بل توسعه یافت.
با گسترش شبکه و اینترنت، نیاز به زبانی احساس شد که برنامههای آن بتوانند بر روی هر ماشین و هر سیستمعامل دلخواهی اجرا گردد. شرکت سان مایکروسیستمز در سال ۱۹۹۵ میلادی زبان جاوا را برمبنای C و ++C ایجاد کرد که هماکنون از آن در سطح وسیعی استفاده میشود و برنامههای نوشته شده به آن بر روی هر کامپیوتری که از جاوا پشتیبانی کند (تقریباً تمام سیستمهای شناخته شده) قابل اجرا میباشد.
و تا جایی که ما از آخرین استاندارد زبان C اطلاع داریم. استاندارد C11 آخرین ورژنی از زبان C است، که کلیه برنامه نویسانی که در این حوزه کار میکنند ملزم به رعایت این استانداردها هستند.
قوانین برنامهنویسی در زبان C چیست؟
هر زبان برنامهنویسی از یک سری اصول پیروی میکند زبان برنامهنویسی C هم از این مستثنی خارج نیست. حال میخواهیم برخی از این اصول را بیان کنیم تا با فراگیری این اصول از برخی خطاهای احتمالی در کامپایلرها جلوگیری کنیم.
- حساس بودن به حروف بزرگ و کوچک
- قرار دادن سمیکالون(;) در انتهای دستور C البته به جز دستورات ماکرو (define)
- برای کامنت یک خط از کد دستور // و برای کامنت چندین خط از برنامه از علامت /*…*/ استفاده میکنیم.
- برای استفاده از هر دستوری باید کتابخانه مربوط به آن را اضافه کنید.
- نامگذاری متغیرها از قاعده خاصی پیروی میکند که توصیه میکنیم حتما مطالعه کنید.
- استفاده از نامهای خوانا و قابل فهم در برنامه
- استفاده از TAB جهت یکسان سازی و مرتب سازی خطوط برنامه
- نوشتن توضیح در مقابل خطوط به صورت کامنت
و …
قاعده کلی برنامهنویسی در زبان C چیست؟
قاعدهی کلی که در برنامهنویسی وجود دارد و میتوان تشخیص داد که چه کدی حرفهای است یا خیر؟ شامل چندین مورد میباشد. که در ادامه به مهم ترین این شرط ها میپردازیم.
اگر کدی سه شرطی را که در ادامه قرار میدهیم داشته باشد. میتوانید بگویید که تقریبا این کد اصولی نوشته شده است.
- شرط اول: خوانایی کد.
- شرط دوم: درک صحیح و درست از عملکرد کد.
- شرط سوم: بهینه بودن کد.
مستلزم پیاده سازی شرایط بالا جز با آشنایی دستورات C مثل دستورات ماکرو، ساختار Struct و … بدست نخواهد آمد ( اگر مواردی که ذکر شد با آنها آشنایی ندارید نگران نباشید چون در قسمت های بعد البته به شرط حیات به تمامی این موارد خواهیم پرداخت).
سوالی که شاید برای خواننده پیش آید این است که آیا وقتی میگوییم کدی بهینه است منظور همان خوانا بودن و عملکرد درست آن نیست؟ اجازه دهید با یک مثال به توضیح این سوال بپردازیم.
فرض کنید کدی را در یک کامپایلر به طور مثال IAR نوشتهایم و در حالت عادی وقتی کد را کامپایل میکنیم هیچ خطا یا هشداری را نداریم نکته جالب زمانی است که کامپایلر را در حالتی قرار میدهیم که کد را بهینه یا اصطلاحا عملیات optimization را انجام دهد در این حالت خواهیم دید که بعضی از کدها اصلا در این حالت کار نمیکنند و یا ممکن است که کد به صورت کاملا صحیح کار کند اما برنامه از خوانایی بالایی برخوردار نباشد که در واقع به راحتی از همین مثال میتوان نتیجه گرفت که “لزوما کدی که بهینه است خوانا نیست و یا کدی که خوانا نوشته شده حتما بهینه نیست” نکته سادهای است که متاسفانه اکثر افرادی که به تازگی شروع به برنامهنویسی کردهاند، میتوانید با اندکی دقت مواردی را که ذکر شد در برنامه آنها دید. (امیدواریم که پس از خواندن این مقاله به این اصول ابتدایی دقت بیشتری کنید)
برنامهنویسی اصولی در زبان C چیست؟
شاید با دیدن این تیتر فکر کنید که حتما روش های متفاوتی برای نوشتن برنامه در زبان C و یا سایر زبانها موجود است؟ بله دقیقا همینطوری است که متوجه شدید.
اجازه دهید با یک مثال این قسمت را توضیح دهیم.
فرض کنید که کارفرما برنامهای را با شرایط زیر از شما میخواهد.
برنامه ای بنوسید که زمان، تاریخ و همینطور تنظیم تمامی پارامترها را توسط کاربر داشته باشد. در اینجا افرادی که برای انجام این پروژه درخواست میدهند به دو دسته تقسیم میشوند.
نتیجه ای که میتوانیم از این مثال بگیریم این است که ” کدنویسی اصولی است که قابلیت Portable شدن را داشته باشد ”
(البته اصولی نوشتن در زبان C واقعا یک سری قواعد و قانون خاص خود را دارد که صرفا نمیتوان گفت که برنامه ای که Portable است حتما اصولی است اما بسیار به حالت ایدهآل نزدیک میباشد.البته با شرایطی که در قسمتهای بعد توضیح خواهیم داد)
شاید همچنان واژه Portable برای خیلی از شما خوانندگان گنگ باشد که جای نگرانی ندارد چون در بخشهای بعد زمانیکه وارد بحث برنامهنویسی در میکروبلیز شدیم این موضوع را بیشتر لمس خواهید کرد.
اگر بخواهیم از مباحثی که گفته شد به یک جمعبندی برسیم در یک جمله میتوان گفت.
” همیشه در برنامهنویسی سعی کنید تا جایی که میتوانید برنامههای خود را به صورت کاملا Portable به همراه سه شرطی که گفته شد بنوسید”
در قسمت بعد به برخی از قوانین دستورات زبان C خواهیم پرداخت.
امیدوارم که این آموزش هم برای شما مخاطبین سیسوگی مفید واقع شده باشد.
سلام مطالب خیلی خوبی دارین خسته نباشین خداقوت
خواهش میکنم دوست عزیز
:))
سلام
اول خواستم تشکر کنم بابت اینکه آموزش میکروبلیز رو شروع کردین … خیلی ممنون … امیدوارم به نتیجه برسه …
دوم خواستم یه انتقاد کنم :
یه سری از آموزش ها دیگه آپدیت نمیشه … مثل STM32 ها … من همیشه سایت شما و آموزش هارو دنبال میکنم … نمیدونم چرا آموزش ها رو نیمه تمام رها می کنید … یا مثلا همین FPGA … تا جلسه 12 هست…
سلام دوست عزیزم
اول باید تشکر کنم از اینکه شما پیگیر مطالب سایت هستید و این جای بسی امیدواری است که واقعا همچنین مخاطبینی داریم.
در مورد انتقادتون کاملا بنده میپذیرم بله حق با شماست متاسفانه حالا به دلیل مشغله های متفاوتی که هست این اتفاق میفته که البته حرف منطقی نیست چون شما هم بر حال منتظر اموزش جدید هستید و اگر از یک بازه زمانی این اموزش بیشتر شه مسلما شما هم با اینکه ب مبحث موردنظرتون علاقه دارید زده خواهید شد و …
و منطقی ترش میشه گفت که نداشتن همون نظم هستش که باید دوستان واقعا بیشتر پیگیر این موضوع باشند. چون تفکرات دیگهای ممکنه که نسبت به اموزش ها پیش بیاد که خوشایند نباشه واقعا.
و به عنوان نکته پایانی بگم خدمتتون که بنده نه مطالب STM و یا FPGA رو ننوشتم حقیقتا و یکی از مقالاتی که به صورت اموزش در حال قرار دادن در سایت هستم همین میکروبلیزه که این نوید رو به شما
و تمام مخاطبین این مبحث میدم که حداقل هفته ای یک اموزش در این زمینه قرار خواهم داد و این سوتفاهم رو حداقل در زمینه میکروبلیز برطرف خواهم کرد.
باز هم بابت پیگیر بودن شما متشکرم
موفق باشید دوست عزیز
سلام امیر نازنین. ممنون از اینکه ما را دنبال میکنید. آموزشها معمولا هفتهای یک بار منتشر میشوند؛ مگر اینکه مشکلی پیش بیاید و این مورد به تعویق بیفتد. به احتمال زیاد هفته بعد قسمت اول آموزش STM32 به صورت رجیستری را در سایت قرار میدهیم. همچنین امروز هم قسمت سیزدهم FPGA منتشر خواهد شد.