(کلیه مطالب ، مربوط به زبان سی است که البته برای زبان های دیگر و انواع سیستم ها و سخت افزارها قابل تعمیم است)
برای اینکار شما در پروژه خود بایستی دو فایل همنام ولی با فرمت های مختلف ایجاد کنید. یکی با فرمت h. و دیگری با فرمت c. به عنوان مثال test.h و test.c .
خوب وظایف این دو فایل را بررسی میکنیم:
فایل test.h : این فایل به منظور اضافه کردن بعضی از هدر های پایه ای دیگر به لایبرری( include ) و تعریف ( define) یکسری کلمه وهمچنین اعلان توابع و دیتا آبجکت هایی که در لایبرری نیاز است و استفاده میشوند ، ایجاد میگردد.
برای اضافه کردن بعضی از هدر های پایه ای دیگر به لایبرری ( فرضا میخواهیم در هدر test.h از توابع stdlib.h استفاده کنیم. ) بایستی اینگونه عمل کنیم:
درصورتی که هدر فایلی که میخواهیم اضافه کنیم را خودمان نوشتیم و درون پوشه ی پروژه قرار دادیم باید به شکل زیر اضافه کنیم:
-----------------------------------------------------------------------------------------------------------------------------------------------------
خوب بخش اول تمام شد میریم سراغ بخش بعدی:
تعریف ( define) یکسری کلمه:
امکان دارد شما بخواهید یک سری کلمه کلیدی که در سی وجود ندارد، برای خودتون تعریف کنید. در این بخش اینکار را میکنید: به شکل زیر:
خوب حالا که چی ؟ به چه دردی میخوره این کار . مگه مرض داریم خوب تو کدمون همون DDRB و PORTB را استفاده میکردیم . چرا کلمه های دیگه تعریف کردیم؟!!
این کار به دلیل بالا بردن انعطاف لایبرری است و برای این است که برنامه نویسی که از لایبرری شما استفاده میکند دستش باز باشه. به عنوان برنامه نویس(کلا در اینجا برنامه نویس حکم کاربر ما را دارد) می خواهد پورتی که به دیتا وصل می شود را تغییر دهد و از پورت D استفاده کند ، خیلی سریع با عوض کردن دیفاین به صورت زیر ، دیگه نیاز نیست برای اینکار لایبرری ای که شما نوشتین را دستکاری کند:
خیلی بهتر است که برای تعریف هر کلمه ( define ) قبلش یک شرط بزاریم که فقط درصورتی که قبلا کلمه دیفاین نشده بود ، اینکار را کنیم:
برای اینکار باید از ماکرو های شرطی استفاده کنیم:
-----------------------------------------------------------------------------------------------------------------------------------------------------
بخش بعدی:
اعلان توابع و دیتا آبجکت هایی که در لایبرری نیاز است و استفاده میشوند:
اصولا اول دیتا آبجکت هایی که در لایبرری استفاده میشود ، اعلان میگردند:
برای اینکار از کلمه کلیدی extern استفاده میشود:
این دستور به کامپایلر میگوید: آقای کامپایلر درسته که من متغییر سراسری rxToken از نوع کاراکتری بدون علامت را تعریف نکردم ولی شما اگر جایی تو این فایل به اسم این متغییر برخوردی ، ارور نگیر ، من جای دیگه ای تعریفش میکنم ( بعدا میگم کجا) ، جناب لینکر بعدا خودش میاد این هارو به هم پیوند میده . بهت قول میدم :icon_razz: :mrgreen: 
بعد از اون توابعی که درون لایبرری موجودند ، اعلان میشود:
برای اینکار باید prototype توابع را بنویسید، به شکل زیر:
فقط باید نوع خروجی و تعداد پارامترها و نوع آنها برای کامپایلر مشخص شود. ( همیشه بالای هر تابعی که اعلان میشود ، توضیحاتی به صورت کامنت باید نوشت تا برنامه نویسی که از تابع استفاده میکند ، از عملکرد تابع و ورودی خروجی ها باخبر شود )
تقریبا فایل h. تمومه . فقط یک نکته باقی میماند :
درصورتی که تو پروژه ای فایل h. شما چند دفعه include شود که خیلی بد میشود: برای اینکار باید چاره ای بیندیشید:
باید کاری کنیم که در این شرایط کامپایلر فقط یکبار کدهای داخل فایل h. را ببند.
اصولیش به این صورت است که کل کدهای فایل h. را درون یک ماکرو شرطی بزرگ قرار میدهیم. به صورت زیر:
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
خوب بریم سراغ فایل c. :
دیدیم که تو فایل h. فقط یکسری اعلان و تعریف انجام دادیم و کدی ننوشتیم. برای نوشتن بدنه ی توابع و تعریف دیتا آبجکت ها باید تو این فایل اینکار را انجام بدید.
در کل یعنی برنامه نویس استفاده کننده بیشتر با h. کار دارد ولی شما بیشتر با c. کار دارید و کدهاتون را باید اینجا قرار بدید. فقط قبلش بایستی فایل h. را اینکلود کنید:
اگر سوالی بود در خدمتم. 
همین الان برید هدرهای مختلف را بخونید و اگر به چیز عجیبی برخوردید ، بیاید همینجا بگید تا باهم دربارش بحث کنیم.
برای اینکار شما در پروژه خود بایستی دو فایل همنام ولی با فرمت های مختلف ایجاد کنید. یکی با فرمت h. و دیگری با فرمت c. به عنوان مثال test.h و test.c .
خوب وظایف این دو فایل را بررسی میکنیم:
فایل test.h : این فایل به منظور اضافه کردن بعضی از هدر های پایه ای دیگر به لایبرری( include ) و تعریف ( define) یکسری کلمه وهمچنین اعلان توابع و دیتا آبجکت هایی که در لایبرری نیاز است و استفاده میشوند ، ایجاد میگردد.
برای اضافه کردن بعضی از هدر های پایه ای دیگر به لایبرری ( فرضا میخواهیم در هدر test.h از توابع stdlib.h استفاده کنیم. ) بایستی اینگونه عمل کنیم:
کد:
#include <stdlib.h>
کد:
#include "otherheader.h"
خوب بخش اول تمام شد میریم سراغ بخش بعدی:
تعریف ( define) یکسری کلمه:
امکان دارد شما بخواهید یک سری کلمه کلیدی که در سی وجود ندارد، برای خودتون تعریف کنید. در این بخش اینکار را میکنید: به شکل زیر:
کد:
#define DD_DATA DDRB #define PORT_DATA PORTB
این کار به دلیل بالا بردن انعطاف لایبرری است و برای این است که برنامه نویسی که از لایبرری شما استفاده میکند دستش باز باشه. به عنوان برنامه نویس(کلا در اینجا برنامه نویس حکم کاربر ما را دارد) می خواهد پورتی که به دیتا وصل می شود را تغییر دهد و از پورت D استفاده کند ، خیلی سریع با عوض کردن دیفاین به صورت زیر ، دیگه نیاز نیست برای اینکار لایبرری ای که شما نوشتین را دستکاری کند:
کد:
#define DD_DATA DDRD #define PORT_DATA PORTD
برای اینکار باید از ماکرو های شرطی استفاده کنیم:
کد:
#ifndef DATA #define DD_DATA DDRD #define PORT_DATA PORTD #endif
بخش بعدی:
اعلان توابع و دیتا آبجکت هایی که در لایبرری نیاز است و استفاده میشوند:
اصولا اول دیتا آبجکت هایی که در لایبرری استفاده میشود ، اعلان میگردند:
برای اینکار از کلمه کلیدی extern استفاده میشود:
کد:
extern unsigned char rxToken;

بعد از اون توابعی که درون لایبرری موجودند ، اعلان میشود:
برای اینکار باید prototype توابع را بنویسید، به شکل زیر:
کد:
void lcd_gotoxy(unsigned char x, unsigned char y);
تقریبا فایل h. تمومه . فقط یک نکته باقی میماند :
درصورتی که تو پروژه ای فایل h. شما چند دفعه include شود که خیلی بد میشود: برای اینکار باید چاره ای بیندیشید:
باید کاری کنیم که در این شرایط کامپایلر فقط یکبار کدهای داخل فایل h. را ببند.
اصولیش به این صورت است که کل کدهای فایل h. را درون یک ماکرو شرطی بزرگ قرار میدهیم. به صورت زیر:
کد:
#ifndef __test_h_included__ #define __test_h_included__ #include "otherheader.h" #ifndef DATA #define DD_DATA DDRD #define PORT_DATA PORTD #endif extern unsigned char rxToken; void lcd_gotoxy(unsigned char x, unsigned char y); #endif /* __test_h_included__ */
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
خوب بریم سراغ فایل c. :
دیدیم که تو فایل h. فقط یکسری اعلان و تعریف انجام دادیم و کدی ننوشتیم. برای نوشتن بدنه ی توابع و تعریف دیتا آبجکت ها باید تو این فایل اینکار را انجام بدید.
در کل یعنی برنامه نویس استفاده کننده بیشتر با h. کار دارد ولی شما بیشتر با c. کار دارید و کدهاتون را باید اینجا قرار بدید. فقط قبلش بایستی فایل h. را اینکلود کنید:
کد:
#include "test.h"

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

دیدگاه