اطلاعیه

Collapse
No announcement yet.

نحوه ساخت کتابخانه برای bascom

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

    نحوه ساخت کتابخانه برای bascom

    سلام

    دوستان میشه بگید چطوزی میشه یک کتابخانه برای بسکام نوشت که بشه به راحتی از دستورات اون استفاده کردن
    اصلا میشه یجوری این فایل ها رو ساخت که سورسش دیده نشه

    مرسی
    http://services.nexodyne.com/email/i...3D/0/image.png

    #2
    پاسخ : نحوه ساخت کتابخانه برای bascom

    نوشته اصلی توسط naeimwtg
    سلام

    دوستان میشه بگید چطوزی میشه یک کتابخانه برای بسکام نوشت که بشه به راحتی از دستورات اون استفاده کردن
    اصلا میشه یجوری این فایل ها رو ساخت که سورسش دیده نشه

    مرسی
    فایل کتابخانه های BASCOM-AVR پسوند LBX دارند که کامپایل شده هستند و به زبان اسمبلی نوشته شده اند. اما اگر منظورتون اینه که یه کتابخانه درست کنید که مثل C بتونید ابتدای برنامه include اش کنید و از توابعش استفاده کنید باید عرض کنم که چنین کاری رو در زبان BASIC نمی تونید انجام بدید. چون BASIC تابع main نداره و اگر فایلی رو include$ کنید کل فایل در ابتدای برنامه کپی شده و اجرا میشه!! (که به نظر من برای یک زبان برنامه نویسی ضعف بزرگیه).
    There is nothing so practical as a good theory. — Kurt Lewin, 1951

    دیدگاه


      #3
      پاسخ : نحوه ساخت کتابخانه برای bascom

      با تشکر از جوابتون

      یعنی به زبان اسمبلی می تونم یک کتابخانه بنویسم و کمپایل کنم و دیگه سورسش در دسترس نباشه ئ با فایل کمپایل شده کار کنن

      یه سوال دیگه
      میشه یک مثال یا نحوه ساخت فایل های lbx رو توضیح بدید

      با تشکر
      http://services.nexodyne.com/email/i...3D/0/image.png

      دیدگاه


        #4
        پاسخ : نحوه ساخت کتابخانه برای bascom

        پس این فایل های Lib که ماتی بسکام include میکنیم چیه اینا رو با چی نوشتن ؟؟؟؟؟؟؟؟؟؟؟؟
        معجزه پس از معجزه می آید و شگفتی ها از تجلی باز نمی مانند.

        دیدگاه


          #5
          پاسخ : نحوه ساخت کتابخانه برای bascom

          سلام

          من توی بحث پخش AVI یه لایبری برای بیسیک نوشتم خیلی با مزست :mrgreen: بیچاره میکنه تا راه بیافته

          1. باید کاملا به اسمبلی avr مسلط باشید
          2. یکم با نحوه کار کردن زبانهای سطح بالا از دید زبان اسمبلی آشنا باشید (یکم یعنی خیلی خیلی)

          3. برید توی help بیسکام و Creating your own LIB file رو سرچ کنید یه توضیحاتی داده که همه چیز هست ولی تا حد امکان خلاصه
          توش توضیح داده مثلا یه داده ورودی byref چطوری توی زیر برنامه در دسترسه و byval چطوری حالا اگه دو ورودی داشته باشید دومی چطوری آدرسش بدست میاد

          این آدرس لایبری منه
          http://www.electrorc.blogfa.com/post-30.aspx
          واسه sdram PC133 کامپیوتر های قدیمی

          چند تا نکته که اگه خواستید شروع کنید میگم که خیلی کمک میکنه:(من شدم خط شکن یه دو هفته ای روی این مطالب خودم سر کار بودم)

          1. فقط و فقط توی NOTEPAD کد رو بنویسید (اگه توی محیط بیسکام بنویسید موقع کامپایل با ERROR های عجیب غریب برخورد میکنید)
          2. ابتدا و انتهای توابع با [] مشخص میشن و توی اولش اسم تابع و توی آخریش END مینویسید و قبلش RET رو بنویسی
          3. فایل رو توی مسیر نصب توی فولدر LIB بذارید و از منوی بیسکام TOOLS گزینه LIB MANAGER رو بزنید و اسم فایل شما رو که با .LIB هستش رو پیدا کنید و COMPILE توی این صفحه رو بزنید اگه خطا نباشه فایل .LBX تولید میشه اگه خطا فایل .ERR

          4. اگه از پایه یا متغییری استفاده میکنید که قرار بیرون تعریف بشه باید دو کار رو همیشه انجام بدید یکی اینکه توی یه فایل که با پسوند .BAS هستش این تنظیمات رو بنویسی
          مثلا:


          LCD_CS ALIAS PORTB.0


          و بعد توی کد نویسی هر جا خواستید از این نام مستعار استفاده کنید باید قبلش یه * بذارید

          مثلا:


          *SBI LCD_CS


          از توابع خود بیسکام هم میشه به شکل خیلی محدود و گنگی استفاده کرد
          برای این کار باید توی کد برنامه لایبری از کلید واژه *BASIC:

          استفاده کنید

          مثلا


          *BASIC: A=A+B


          دقت کنید که باید BASIC با حروف بزرگ باشه وگرنه ERROR دریافت میکنید

          توی اون فایل پیکره بندی باید توابع در دسترس رو هم بنویسید که میشه اینطوری:

          مثلا دو تا تابع دارید یکی هست RESET_GSM و دیگری هست SEND_GSM

          برای اینکه بیسکام بدونه دو تا تابع با این نامها توی LIB در دسترس هستن باید اینطوری نوشت:


          $EXTERNAL RESET_GSM,SEND_GSM


          بعد باید تابع ها رو DECLARE کرد

          مثلا:


          DECLARE SUB RESET_GSM(BYREF A AS STRING)


          راستی یه سری دستورات اسمبلی بدلیل نا معلومی توی بیسکام در دسترس نیستن پس اگه مثلا LD کار نکرد با دستورهای دیگه راهش بندازید





          به وبلاگم سر بزنید

          دیدگاه


            #6
            پاسخ : نحوه ساخت کتابخانه برای bascom

            سلام
            میتونید از کتابخونه های خود بسکام یکی دوتا رو باز بکنید و از اونا استفاده بکنید
            به قول علی آقا باید اول پی این زبان اسمبلی رو به تنتون بمالید .............. :mrgreen:

            دیدگاه


              #7
              پاسخ : نحوه ساخت کتابخانه برای bascom

              راستی نکته های زیادی برای استک و رجیسترهای همه کاره وجود داره که اگه انجام نشه ممکنه میکرو قاطی کنه

              مثلا یه جا توی HELP نوشته باید اگه از تقسیم یا ممیز استفاده میشه یه سری رجیستر دیگه هم توی استک ذخیره بشن و ...
              به وبلاگم سر بزنید

              دیدگاه


                #8
                پاسخ : نحوه ساخت کتابخانه برای bascom

                نوشته اصلی توسط alitaroosheh
                راستی نکته های زیادی برای استک و رجیسترهای همه کاره وجود داره که اگه انجام نشه ممکنه میکرو قاطی کنه

                مثلا یه جا توی HELP نوشته باید اگه از تقسیم یا ممیز استفاده میشه یه سری رجیستر دیگه هم توی استک ذخیره بشن و ...
                درست همین زمانه که فرق بین آدما معلوم میشه
                اونائی که تحمل دارن ( صابرین) :mrgreen: و شاخ و دم اسمبلی رو می شکنن
                وانائی که بیخیال میشن :biggrin:

                دیدگاه


                  #9
                  پاسخ : نحوه ساخت کتابخانه برای bascom

                  من با این اسمبلی خیلی مشکل دارم چون 2 بار گرفتمش تا قبول شدم من یکی که بیخیال این موضو ع شدم یه برنامه نوشته بودم نمی خواستم سورسش دست کسی باشه این جوری که معلومه باید سورسشو تو بس کام بدم به دوستان :nerd:
                  معجزه پس از معجزه می آید و شگفتی ها از تجلی باز نمی مانند.

                  دیدگاه


                    #10
                    پاسخ : نحوه ساخت کتابخانه برای bascom

                    علی جان بابت توضیحات شما خیلی ممنون واقا کمک زیادی کردی مرسی

                    حالا من شروع میکنم ببینم چی میشه

                    راستی مثلا اگه بخوام دو تا متغییر به این کتابخانه بصورت حروف بدم و بعد توی کتاب خانه برسی کنه اگه برابر a بود مثلا عدد 1 رو برگردونه اگه b بود عدد 2 رو برگردونه مثالی در این رابطه ندارید

                    با تشکر
                    http://services.nexodyne.com/email/i...3D/0/image.png

                    دیدگاه


                      #11
                      پاسخ : نحوه ساخت کتابخانه برای bascom

                      سلام

                      آقا کارهای سخت میخوای

                      نوشتن لایبری یکم آزار دهندست

                      ولی

                      مثلا اولش میتونید یکم توضیحات بذارید که کامپایل نشه


                      www = http://www.ElectroRC.blogfa.com
                      email = ali.taroosheh@gmail.com.com
                      libversion = 1.01
                      date = 23 march 2009
                      history = No known bugs.
                      comment = Synchronous DRAM , Design by Ali Taroosheh


                      بعد برای شروع تابع این شکلی شروع و پایان میدید مثلا


                      [SD_init]
                      SD_init:
                      .
                      .
                      .
                      ret
                      [end]



                      من برای توابع خودم اینا رو ذخیره میکردم شما هم بکنید


                      Push R12
                      Push R13
                      Push R14
                      Push R15
                      push r26
                      push r27
                      push r28
                      push r29
                      push r30
                      push r31


                      اینکار باید اول تابع انجام بشه و بعد از تابع قبل از ret بازیابی بشن اینطوری:



                      pop r31
                      pop r30
                      pop r29
                      pop r28
                      pop r27
                      pop r26
                      Pop R15
                      Pop R14
                      Pop R13
                      Pop R12


                      یادتون نره که استک lifo هستش یعنی اولین داده آخرین دادست پس به ترتیب push و pop های بالا دقت کنید

                      برای ارسال متغیر به تابع هم بهتره برید خود help رو کامل بخونید ... توضیح داده ولی فقط میگم که

                      من توی اون لایبری sdram که بالا لینکشو دادم یه فایل config_sdram.bas بود که توش نوشتم


                      $lib "SDRAM.lbx"
                      $external Sd_init , Sd_write , Sd_read
                      Declare Sub Sd_init()
                      Declare Sub Sd_write(array_pointer() As Byte , Byval Sd_position As Long , Byval Sd_length As Word)
                      Declare Sub Sd_read(array_pointer() As Byte , Byval Sd_position As Long , Byval Sd_length As Word)


                      پس سه تا تابع دارم یکی init یکی Read و دیگری write
                      اولی که ورودی نداره

                      دومی و سومی ورودی دارن اولی از جنس byref یا قابل تغییر (این نوع متغییر ها معمولا بعنوان خروجی اصلی تابع استفاده میشه یا فرستادن یک آرایه)
                      در اصل این نوع متغییر آدرسش ارسال میشه به تابع یا بقول c کارها پوینتر

                      دومی و سومین متغییر هم از نوع byval هستن یعنی یه کپی از اون متغییر به تابع ارسال میشه و مقدار اون متغییر بعد از فراخوانی ثابته و مقدار خودشو در تابع حفظ میکنه

                      حالا ... به ترتیب ورودی ها از آخر به اول میشه مقدار ورودی یا آدرسشو پیدا کرد

                      مثلا متغییر sd_length که آخریه اینطوری توی لایبری دیده میشه:


                      ldd Zl,Y+0
                      ldd Zh,Y+1
                      ld temp,Z


                      اگه temp رو مثلا r16 بدونیم مقدار اولین بایت sd_length توی Temp قرار داره

                      و اگه بنویسیم


                      adiw Zl,1
                      ld temp,Z


                      مقدار دومین بایت یا همون msb متغییر sd_length در دسترسه (توی temp کپی میشه)

                      متغییر دوم توی توابع بالا sd_position یه متغییر از جنس long که یعنی 4 بایتی

                      اینجوری با این ترتیب میتونید اولین بایت این متغییر رو پیدا کنید یا همون lsb


                      ldd Zl,Y+2
                      ldd Zh,Y+3
                      ld temp,Z


                      که اینجا هم lsb اون متغییر در temp قرار داره

                      به همین ترتیب میتونید با اضافه کردن عدد جمع شده به y بایتهای بعدی رو بدست بیارید

                      یعنی ldd temp,Z+1 میشه بایت دوم متغییر sd_position
                      و ldd temp,Z+2 میشه بایت سوم والی آخر...

                      برای اون متغییر اولی که پوینتری یا byref بود هم میتونید بنویسید


                      ldd Zl,Y+4
                      ldd Zh,Y+5


                      اینجا آدرس اولین بایت از آرایه array_pointer توی Z قرار داره (یادتون نره آدرس قرار داره نه داده)

                      در مورد متغییرهایی که بیرون توی config تعریف شدن هم باید با {} نشون بدید

                      مثلا برای اون آرایه بالا


                      ldd Zl,Y+4
                      ldd Zh,Y+5
                      *sts {Sd_pointer},zl


                      که بطور مثال sd_pointer توی فایل config_sdram به این شکل تعریف شده dim sd_pointer as word



                      دیگه مطلب زیادی در مورد لایبری زدن نیست فقط خروجی function که خودتون بخونید

                      و اینکه توابع بیسکام همشون درست کار نمیکنن (توی برنامه های بالا مشخص حرفه ای ها میتونن تشخیص بدن یکم برنامه کج و ماوج نوشته شده)

                      در مورد دستورات اسمبلی هم باید Avrstudio رو باز کنید که توی help قسمت avr toolt user guide قسمت Assembler رو انتخاب کنید داخل user's guide روی instruction کلیک کنید همه دستورات هستن با یه مثال توضیح داده دنبال کتاب و چیز دیگه هم نرید که این رفرنس بهترین و بهترین و بهترین رفرنسه

                      :nerd: :nerd: :nerd: :nerd:
                      به وبلاگم سر بزنید

                      دیدگاه


                        #12
                        پاسخ : نحوه ساخت کتابخانه برای bascom

                        اقا خدایی دمت گرم اگه می دونستم اینقدر سخته به خدا زحمت نیمدادم

                        خیلی سخته

                        برم ببینم من شاخ اسمبلی رو میشکنم یا شاخش ................................

                        بازم ممنون
                        http://services.nexodyne.com/email/i...3D/0/image.png

                        دیدگاه

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