اطلاعیه

Collapse
No announcement yet.

چگونگی ساخت کتابخانه برای winavr ؟

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

    چگونگی ساخت کتابخانه برای winavr ؟

    اگه بخوام برای winavr کتابخونه درست کنم ( فایلهای با پسوند .a) چه کاری باید بکنم.
    موفق باشید

    #2
    پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

    اجازه بده اینو با ساختن یه کتابخونه کوچک که دارای دو تابع هست توضیح بدم و بعدا اونو تو یه مثال استفاده کنیم
    اسم توابعمون هم fred و bill هست

    قدم اول اینه که دو تا فایل سورس جدا درست کنیم. اسم یکیشونو میذاریم fred.c و اون یکیرو bill.c

    کد:
    fred.c :
    
    #include <stdio.h>
    void fred(int arg)
    {
      printf(“fred: you passed %d\n”, arg);
    }
    
    bill.c:
    
    #include <stdio.h>
    void bill(char *arg)
    {
      printf(“bill: you passed %s\n”, arg);
    }

    حالا ما باید این دو تا سورس کد رو برای بدست آوردن فایل object کامپایلشون کنیم کع بعدا از این object ها کتابخونمونو بسازیم
    در اینجا من اینکارو با کامپایلر avr-gcc و با استفاده از سوییچ c انجام میدم. به این صورت :

    کد:
    $ avr-gcc -c bill.c fred.c

    خب ، حالا اجازه بدید برنامه نمونه ای بنویسیم که از تابع bill استفاده کنه .
    اما قبل از اینکار بهتره که واسه کتابخونمون یه فایل Header درست کنیم. این فایل سرآیند توی هر برنامه ای که قرار باشه از کتابخونمون استفاده کنه باید include بشه .
    توی فایل سرآیند هم شکل توابع fred و bill رو مینویسم که اگر یه موقعی توی برنامه اصلیمون درست از توابع کتابخونه استفاده نشه ، کامپایلر متوجه خطا بشه ( یکی از حکمتهای فایلهای سرآیند همینه )
    پس توی فایلی مثلا بنام lib.h مینویسیم :

    کد:
    //	This is lib.h. It declares the functions fred and bill for users
    void bill(char *);
    void fred(int);
    حالا باید از اون فایلهای آبجکتی که ساخته بودیم فایل کتابخونه ای درست کنیم که پسوندش a هست .
    برای اینکار از برنامه ar استفاده میکنیم. به اینصورت :

    کد:
    $ ar crv libfoo.a bill.o fred.o

    درود. کتابخونمون حاضره و دو تا فایل آبجکتمون توش هست و آماده به خدمتن !

    حالا میمنونه طرز استفاده از یه کتابخونه
    برای اینکار یه فایل سورس درست میکنیم مثلا بنام program.c و توش مینویسم :

    کد:
    #include “lib.h”
    int main()
    {
      bill(“Hello World”);
      return 0;
    }

    برای کامپایل این برنامه هم میتونیم یکی از این روشها رو بکار ببریم :
    کد:
    $ avr-gcc -o program program.o libfoo.a
    
    or
    
    $ avr-gcc –o program program.o –L. –lfoo

    سوال یا ابهامی اگه بود من در خدمتتم
    در ضمن من اینو از یه ebook یاد گرفتم و متن اصلی رو هم اگه خواستی بزارم واست
    چگونه هوشمندانه بپرسیم

    دیدگاه


      #3
      پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

      با درود فراوان و تشکر از لطف شما
      از یه مشکل بزرگ هم در برنامه نویسی avr و هم در محیط لینوکس منو نجات دادی :applause:
      اگه فکر میکنید مطلب اصلی خوب هستش ممنون میشم که برام بذاریدش.

      در ضمن به اینجا هم یه سری بزن.

      http://www.eca.ir/forum2/index.php?topic=17308.0

      موفق باشید

      دیدگاه


        #4
        پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

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

        من از این دو تا کتاب خیلی چیزا یاد گرفتم :
        http://docs.linux.cz/programming/other/ALP/advanced-linux-programming.pdf
        http://www.mininova.org/tor/838599
        چگونه هوشمندانه بپرسیم

        دیدگاه


          #5
          پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

          $ avr-gcc -o program program.o libfoo.a
          چطوری میشه این خط مربوط به کامپایل رو توی makefile اضافه کرد.

          دیدگاه


            #6
            پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

            سوالتو دقیقا متوجه نشدم
            تا حالا makefile نوشتی ؟
            چگونه هوشمندانه بپرسیم

            دیدگاه


              #7
              پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

              اونجور که شما میگین نه!
              من از یه Makefile که یه بار از برنامه Winavr برداشتم هم برای محیط لینوکس و هم برای محیط ویندوز ( کامپایل برنامه avr) استفاده میکنم.

              مطلب هم اینجوریه که یه کتابخونه .a دارم و یه فایل .h حالا میخوام با استفاده از همون فایل Makefile استاندارد و با تغییرات اون از کتابخونه استفاده کنم ولی نمیدونم چیکار باید بکنم.
              با تشکر

              دیدگاه


                #8
                پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                makefile ت رو بزار اینجا ببینم میتونم کاریش بکنم
                چگونه هوشمندانه بپرسیم

                دیدگاه


                  #9
                  پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                  :applause:
                  اینم فایل :
                  http://www.4shared.com/file/56036239.../Makefile.html
                  باز هم ممنون

                  دیدگاه


                    #10
                    پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                    درود

                    آقا من این Makefile رو واست ادیت کردم

                    http://hamid.r1988.googlepages.com/Makefile

                    چند تا نکته بهت میگم که بعدا خودتم بتونی ادیتش کنی
                    در ضمن خیلی Makefile خوش نویسی هم هست. حال کردم .

                    ----------------------------------
                    توی این Makefile یه متغیر گزاشتم بنام OWN_LIB که میتونی اسم هر چی لایبرری شخصی داری جلوش بنویسی
                    توی خط شماره 236 هست

                    منتها موقع نوشتن اسم لایبرری هات بجای اینکه اسم کاملشونو بنویسی مثل libfoo.a باید مثلا بنویسی lfoo-
                    چون وقتی از سوییچ l- قبل از اسم لایبرری استفاده میکنی ، اتوماتیک lib به اولش و a. به آخرش اضافه میشه
                    مثلا اگر توی پروژت از لایبرری ای بنام libfo.a استفاده کردی ، جلوی OWN_LIB بنویس :
                    کد:
                    OWN_LIB = -lfoo


                    نکته دیگه اینکه یه متغیری هم هست بنام EXTRALIBDIRS که توی خط شماره 243 هست
                    دارکتوری ای که لایبرری هات توش هست رو هم جلوی این باید بنویسی
                    من پیشنهاد میکنم که لایبرری هات رو توی یه مسیر خاص بزار و آدرسشو جلوی متغیر EXTRALIBDIRS بنویس
                    یا میتونی اونارو توی یه زیرپوشه درون پوشه اصلی پروژت بزاری و بنویسی :
                    کد:
                    EXTRALIBDIRS = ./mySubFolder/

                    یا اگر لایبرری هات توی دایرکتوری ای هستن که makefile و سورس اصلی هم اونجان جلوی متغیر EXTRALIBDIRS یه نقطه بزار.
                    اینجوری :
                    کد:
                    EXTRALIBDIRS = .

                    این نقطه هه خیلی مهمه ها و همونطور که میدونی بمعنای دایرکتوری فعلیه

                    ( ممکنه توی پست ، جاها پس و پیش بشن . خود فایلو نگاه کن اونجا معلومه همه چی )

                    من خودمم تستش کردم ، خیلی خوب کار میکرد

                    ----------------------------------
                    همین
                    فکرم نکن زیاد پیچیده هست ، اتفاقا خیلی هم ساده هست
                    راستی خود winavr یه واسط گرافیکی برای ادیت makefile داره
                    اون به دردت نخورد ؟

                    سوال یا مشکلی هم اگر بود اگه سواتم بکشه در خدمتم
                    یا اگر تونستی بیا کانال IRC با هم بیشتر صحبت کنیم :smile:
                    چگونه هوشمندانه بپرسیم

                    دیدگاه


                      #11
                      پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                      بابا این کاره
                      حال دادی اسیدی. ایول.
                      :nice:
                      راستی خود winavr یه واسط گرافیکی برای ادیت makefile داره
                      اون به دردت نخورد ؟
                      نه امکان اضافه کردن لایبرری خارجی رو نداده.
                      من هم کمتر از اون استفاده میکنم و معمولن توی pn همین فایل رو برای هر پروژه ویرایش میکنم. مثل خط 117 تا 120 (EXTRAINCDIRS) که خودم دستکاری کردم تا مشکلی با هدر فایلها نداشته باشم.

                      باز هم ممنون.

                      دیدگاه


                        #12
                        پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                        نه امکان اضافه کردن لایبرری خارجی رو نداده.
                        پس به developer هاش بگیم واسش بزارن :icon_razz:
                        چگونه هوشمندانه بپرسیم

                        دیدگاه


                          #13
                          پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                          فکر خوبیه :nice:

                          دیدگاه


                            #14
                            پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                            کسی هست برای کار با Pin و Port در WinAVR کتابخانه ای داشته باشه ؟ . ما که با کد ویژن قبلا کار کردیم راحت می شد به هر بیت یک پورت دسترسی داشت . یا به هر پین در حالت ورودی . مثلا PORTD.0 یا PIND.1 ، اما اینجا مصیبته . برای 1 یا صفر کردن ساده یک پورت باید شیفت بدی و ... . اگر کتابخانه ای نیست خیلی خوب می شه که نحوه کار با پین و پورت رو آمورش بدین . هر کی که بلده .

                            دیدگاه


                              #15
                              پاسخ : چگونگی ساخت کتابخانه برای winavr ؟

                              خب ، ببین این به کارت میاد :
                              http://winavr.scienceprog.com/winavr-tool-set/avr-gcc-code-compatibility.html
                              چگونه هوشمندانه بپرسیم

                              دیدگاه

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