معرفی
اگر قسمت قبل آموزش میکروبلیز: مقدمه را خواندهباشید درواقع یک مقدمهای از میکروبلیز و اهمیت آن در 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 میگویند. و نکتهای که وجود دارد این است که، این افراد شانس بیشتری برای موردتایید قرارگرفتن کارفرما دارند.
نتیجهای که میتوانیم از این مثال بگیریم این است که “کدنویسی اصولی است که قابلیت Portable شدن را داشتهباشد” (البته اصولی نوشتن در زبان C واقعا یکسری قواعد و قانون خاص خود را دارد که صرفا نمیتوان گفت که برنامهای که Portable است حتما اصولی است اما بسیار به حالت ایدهآل نزدیک میباشد. البته با شرایطی که در قسمتهای بعد توضیحخواهیمداد) شاید همچنان واژه Portable برای خیلیاز شما خوانندگان گنگ باشد که جای نگرانی ندارد چون در بخشهای بعد زمانیکه وارد بحث برنامهنویسی در میکروبلیز شدیم این موضوع را بیشتر لمس خواهید کرد. اگر بخواهیم از مباحثی که گفته شد به یک جمعبندی برسیم در یک جمله میتوان گفت: “همیشه در برنامهنویسی سعیکنید تاجاییکه میتوانید برنامههای خود را بهصورت کاملا Portable به همراه سه شرطی که گفته شد بنوسید”
در قسمت بعد به برخیاز قوانین دستورات زبان C خواهیم پرداخت. امیدوارم که این آموزش هم برای شما مخاطبین عزیز، مفید واقعشدهباشد.
منبع: سیسوگ