اطلاعیه

Collapse
No announcement yet.

یه راهنمایی در رابطه با هدرفایل میخواستم.

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    یه راهنمایی در رابطه با هدرفایل میخواستم.

    سلام به مهندسین عزیز. راستش من یه هدر برا codevision نوشتم که تو این هدر سه تا تابع وجود داره. که یکی مال کیپد 4*3 و یکی کیپد 4*4 و یکی هم نشون دادن متغیر int تو lcd هستش و این رو گذاشتم تو پوشه inc تا اینجا مشکلی که نیست!!!! و بعد اومدم تو برنامه استفاده کردم با نوشتن اسم هدر تو اول برنامه و استفاده از تابع ها. اما تو برنامه که استفاده میکنم مثلا کیپد 4*4 رو میگه که اون دو تا تابع دیگه رو هم نوشتی اما استفاده نکردی!!!!!!!!! با eeror های زیر:


    function 'get_key34' was defined, but not referenced
    function 'lcd_int' was defined, but not referenced

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

    اینم هدره هستش:

    کد:
    #include <stdlib.h>
    #include <delay.h>
    #include <lcd.h>
    //===============================get_key34==========================
    int get_key34(int data){
    DDRC=0x0f;
    //******************************
    PORTC=0xff;
    PORTC.0=0;
    delay_ms(15);
    if(PINC.4==0)data=0;
    if(PINC.5==0)data=1;
    if(PINC.6==0)data=2;
    //*******************************
    PORTC=0xff;
    PORTC.1=0;
    delay_ms(15);
    if(PINC.4==0)data=3;
    if(PINC.5==0)data=4;
    if(PINC.6==0)data=5;
    //****************************
    PORTC=0xff;
    PORTC.2=0;
    delay_ms(15);
    if(PINC.4==0)data=6;
    if(PINC.5==0)data=7;
    if(PINC.6==0)data=8;
    //****************************
    PORTC=0xff;
    PORTC.3=0;
    delay_ms(15);
    if(PINC.4==0)data=9;
    if(PINC.5==0)data=10;
    if(PINC.6==0)data=11;
    //****************************
    return data;
    }
    //====================================get_key44======================
    int get_key44(int data){
    DDRC=0x0f;
    //******************************
    PORTC=0xff;
    PORTC.0=0;
    delay_ms(15);
    if(PINC.4==0)data=0;
    if(PINC.5==0)data=1;
    if(PINC.6==0)data=2;
    if(PINC.7==0)data=3;
    //*******************************
    PORTC=0xff;
    PORTC.1=0;
    delay_ms(15);
    if(PINC.4==0)data=4;
    if(PINC.5==0)data=5;
    if(PINC.6==0)data=6;
    if(PINC.7==0)data=7;
    //****************************
    PORTC=0xff;
    PORTC.2=0;
    delay_ms(15);
    if(PINC.4==0)data=8;
    if(PINC.5==0)data=9;
    if(PINC.6==0)data=10;
    if(PINC.7==0)data=11;
    //****************************
    PORTC=0xff;
    PORTC.3=0;
    delay_ms(15);
    if(PINC.4==0)data=12;
    if(PINC.5==0)data=13;
    if(PINC.6==0)data=14;
    if(PINC.7==0)data=15;
    //****************************
    return data;
    }
    //=============================lcd_int===================================
    void lcd_int(int data){
    char data2[100];
    itoa(data,data2);
    lcd_puts(data2);
    }
    فکر نکنم نوشتن کتابخونه اینجوری باشه. فکر کنم با دستورات ماکرو خیلی راحت تر بشه این کار رو کرد. میدونم میشه اینا رو تو چند تا هدر هم ریخت اما اونجوری گیج میشم که هدر هر قطعه چی بوده. راستی من تازه دستورات پیش پردازنده رو یاد گرفتم. اگه کسی بتونه من رو با این دستورات راهنمایی کنه که این رو بنویسم خیلی کارم راه میفته. آخه کل برنامه همین فایلای تکراری میشن و اگه بتونم یه کتابخونه برا خودم بنویسم خیلی خوب میشه. پیشاپیش ممنون. :smile:
    اگر روزي هيچ مشکلي سر راهم نبود ؛ ميفهمم که راه را اشتباه رفته ام!

    #2
    پاسخ : یه راهنمایی در رابطه با هدرفایل میخواستم.

    این البته کار مزخرفیه. درست مثل خود کدویزن. ولی یک هدر آماده کن و یه lib. در هدر مربوطه اینو بذار:


    #ifndef __YourHeaderFileName_h_included
    #define __YourHeaderFileName_h_included // <<--- 1) correct header name

    #pragma used+

    /// <<--- 2) insert prototypes of your functions here!

    #pragma used-

    #pragma library YourLibName.lib // <<--- 3) correct lib file name

    #endif


    و سه قسمت مشخص شده رو عوض کن. خود سورس حاوی برنامه ات رو هم به عنوان یک library در دایرکتوری lib بذار و اسم فایلش رو در هدر قید کن.

    دیدگاه


      #3
      پاسخ : یه راهنمایی در رابطه با هدرفایل میخواستم.

      نوشته اصلی توسط reza_agha
      این البته کار مزخرفیه. درست مثل خود کدویزن.
      میشه بپرسم برا چی مذخرفه؟ اگه منظورتون سر کدویژنه و میخواین اون رو با winavr مقایسه کنین بهتون حق میدم. آخه من خودم قبلا bascom کار میکردم و حالا هم codevision و winavr اما winavr یه کی رو میخواد که به C مسلط باشه. برا همین هم دارم رو کتابخونه و دستورات پیش پردازنده کار میکنم.
      راستی میتونین در مورد این دستور pragma یه توضیح کامل بدین. آخه من در همین حد میدونم که از دستورات پیش پردازنده هست و بستگی به سیستم داره.
      اگر روزي هيچ مشکلي سر راهم نبود ؛ ميفهمم که راه را اشتباه رفته ام!

      دیدگاه


        #4
        پاسخ : یه راهنمایی در رابطه با هدرفایل میخواستم.

        راستی جای این خط که نوشتین باید چی بنویسیم

        /// <<--- 2) insert prototypes of your functions here!

        prototypes چی هستش؟؟؟ :sad: :sad:
        اگر روزي هيچ مشکلي سر راهم نبود ؛ ميفهمم که راه را اشتباه رفته ام!

        دیدگاه


          #5
          پاسخ : یه راهنمایی در رابطه با هدرفایل میخواستم.

          #pragma دستور پیش پردازشیه که مخصوص خود کامپایلره. مثلا ifdef در تمامی کامپایلر ها هست. اعم از این که نوشته کمپانی a یا b باشه. اما امکانات این دو کامپایلر در پیش پردازش متفاوته. تفاوتهای خیلی خاص رو میان با این دستور اضافه میکنن.

          prototype یک تابع یعنی فرم نمایشی تابع بدون متن اون. که از روی اون کامپایلر بفهمه این تابع چند آرگومان داره از چه انواعی و نوع مقدار برگشتیش چیه. مثلا:


          int get_key34(int data);

          دیدگاه

          لطفا صبر کنید...
          X