اطلاعیه

Collapse
No announcement yet.

استفاده از OVERLAY در بسکام

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

    استفاده از OVERLAY در بسکام

    درود
    تعریف متغییر تو بیسکام یک سری ریزه کاری هایی داره که کمتر بهش توجه میشه


    این مقاله برای تعیین نحوه استفاده از فانکشن OVERLAY است

    همچنیین به لینک های زیر توجه شود

    http://avrhelp.mcselec.com/dim.htm?zoom_highlightsub=dim

    http://avrhelp.mcselec.com/language_fundamentals.htm



    همه مثال ها در سیمولاتور بیسکام اجرا شده اند
    جدول حافظه میتواند خیلی به درک نحوه کار OVERLAY در بیسکام کمک کند



    میتوانید کاراکتر خالی (Null termination) را در آخر یک strings و OVERLAY انرا ببینید
    شما میتوانید مقادیر جدول حافظه را در طول اجرا برنامه در سیمولاتور مانند شکل زیر ببینید







    $regfile = ”m644pdef.dat”
    $crystal = ۴۰۰۰۰۰۰
    $hwstack = ۶۰
    $swstack = ۶۰
    $framesize = ۶۰


    وقتی متغییر بزرگ تعریف میکنیم مانند string فضای فریم میتواند به سرعت پرشود

    $baud = ۹۶۰۰

    $sim ’این دستور به کامپایلر میفهماند که برنامه فقط در سیمولاتور اجرا میشود

    Print ”——————& mdash;—-”

    Dim Array(5) As Byte
    Dim My_string As String * ۴ At Array Overlay
    تعریف یک متغییر از نوع string درون فضایی که متغییر array تعریف شده با استفاده از ادرس array

    Dim K As Byte

    K = ۱

    My_string = ”Test”
    برای چهار حرف کد اسکی ۵ بایت از حافظه اشغال میشود و بایت پنجم یک مقدار خالی را برای تعیین خاتمه استرینگ نگهداری میکند

    این متغییر چگونه در حافظه sram قرار میگیرد


    Array(5) =00
    Array(4) =t
    Array(3) =s
    Array(2) =e
    Array(1) =t


    Print Chr(array(1))
    Print Chr(array(2))
    Print ”——————& mdash;—-”

    Dim Teststring As String * ۵
    Dim Ar(6) As Byte At Teststring Overlay
    Dim J As Byte
    J = &H03

    Ar(5) = ۴۷

    Teststring = ”Hello”
    برای ۵ حرف کد اسکی ۶ بایت از حافظه اشغال میشود و بایت ششم یک مقدار خالی را برای تعیین خاتمه استرینگ نگهداری میکند’

    این متغییر چگونه در حافظه sram قرار میگیرد

    Ar(6) =00
    Ar(5) =o
    Ar(4) =l
    Ar(3) =l
    Ar(2) =e
    Ar(1) =h



    For K = ۱ To ۵
    Print Chr(ar(k)) ;
    Next
    Print

    K = ۱

    Print ”——————& mdash;—-”

    Dim My_word As Word
    Dim Low_byte As Byte At My_word Overlay
    Dim High_byte As Byte At My_word + ۱ Overlay


    استفاده از نام متغییر اصلی بعنوان آدرس برای متغییر overlay

    Low_byte = &B0000_1111
    High_byte = &B1111_0000
    جدول زیر محل قرار گیری متغییر ها در متغییر اصلی را نشان داده شده

    my_word

    High_byte Low_byte

    1111_0000 0000_1111


    وقتی شما با استفاده از دستور print bin(Variable) متغییر را ارسال میکنید ترتیب زیر را خواهید دید

    my_word

    Low_byte High_byte

    0000_1111 1111_0000

    Print ”My_word = ” ; Bin(my_word)
    Print ”——————& mdash;—-”

    Dim My_long_1 As Long
    Dim Byte_1 As Byte At My_long_1 Overlay
    Dim Byte_2 As Byte At My_long_1 + ۱ Overlay
    Dim Byte_3 As Byte At My_long_1 + ۲ Overlay
    Dim Byte_4 As Byte At My_long_1 + ۳ Overlay
    Byte_1 = ۱
    Byte_2 = ۲
    Byte_3 = ۳
    Byte_4 = ۴
    Print Bin(my_long_1)
    جدول زیر محل قرار گیری متغییر ها در متغییر اصلی را نشان داده شده

    my_long_1

    Byte_4 Byte_3 Byte_2 Byte_1

    وقتی شما با استفاده از دستور print bin(Variable) متغییر را ارسال میکنید ترتیب زیر را خواهید دید

    my_long_1

    Byte_1 Byte_2 Byte_3 Byte_4

    Print ”——————& mdash;—-”
    Dim My_dword As Dword At $۱۴۰

    ‘

    یک مکان ثابت از ادرس ۱۴۰ برای متغییر My_dword از نوع dword



    Dim Byte__1 As Byte At $۱۴۰ Overlay

    Dim Byte__2 As Byte At $۱۴۱ Overlay
    Dim Byte__3 As Byte At $۱۴۲ Overlay
    Dim Byte__4 As Byte At $۱۴۳ Overlay


    تعریف متغییر بصورت overlay با استفاده از آدرس دهی مستقیم

    Byte__1 = ۱
    Byte__2 = ۲
    Byte__3 = ۳
    Byte__4 = ۴

    جدول زیر محل قرار گیری متغییر ها در متغییر اصلی را نشان داده شده

    DWORD

    Byte_4 Byte_3 Byte_2 Byte_1

    وقتی شما با استفاده از دستور print bin(Variable) متغییر را ارسال میکنید ترتیب زیر را خواهید دید

    DWORD

    Byte_1 Byte_2 Byte_3 Byte_4



    Print ”my_dword = ” ; Bin(my_dword)
    Print ”——————& mdash;—-”

    Dim My_dword_2 As Dword
    Dim My_word_2 As Word At My_dword_2 Overlay
    Dim My_byte3 As Byte At My_dword_2 + ۲ Overlay
    Dim My_byte4 As Byte At My_dword_2 + ۳ Overlay

    My_word_2 = &B11111111_00000000
    My_byte3 = &B00000011
    My_byte4 = &B10000000
    جدول زیر محل قرار گیری متغییر ها در متغییر اصلی را نشان داده شده

    my_dword_2

    Byte_4 Byte_3 my_word_2

    وقتی شما با استفاده از دستور print bin(Variable) متغییر را ارسال میکنید ترتیب زیر را خواهید دید

    my_dword_2

    my_word_2 Byte_3 Byte_4



    Print Bin(my_dword_2)
    Print ”——————& mdash;—-”

    آزمایش در ارتباط با کاراکتر خالی پایانی (Null terminator ) در متغییر string



    Dim My_date(11) As Byte ’
    ۸ کاراکتر string بهمراه ۳ کاراکتر خالی پایانی که برابر است با ۱۱ بایت



    Dim Day As String * ۲ At My_date(1) Overlay
    Dim Null_terminator As Byte At My_date(1) + ۲ Overlay ’Null terminator
    Dim Month As String * ۲ At My_date(1) + ۳ Overlay
    Dim Null_terminator_2 As Byte At My_date(1) + ۵ Overlay ’Null terminator
    Dim Year As String * ۴ At My_date(1) + ۶ Overlay
    Dim Null_terminator_3 As Byte At My_date(1) + ۱۱ Overlay ’Null terminator

    Day = ”۱۶″
    Month = ”۱۱″
    Year = ”۲۰۱۱″

    Print ”Day= ” ; Day
    Print ”Month= ” ; Month
    Print ”Year= ” ; Year
    برای مثال فانکشن print کاراکتر خالی پایانی رو برای تعیین اخر کلمه (string) استفاده میکند

    وقتی ما این کاراکتر را بجای ۰ با “/” بار میکنیم فانکشن print ارسال ادامه میدهد تا به یک کاراکتر پایانی خالی (Null terminator) برسد

    Null_terminator = ۴۷
    ’۴۷= ”/”
    Print Day


    در این مورد دستور print بجای اینکه مقدار “۱۶″ را ارسال کند مقدار”۱۶/۱۱″ را ارسال می کند به دلیل اینکه اولین کاراکتر پایانی خالی بعد از متغییر ماه “۱۱″ پیدا میکند

    End



    http://kitboard.com/%D9%85%D8%AB%D8%A7%D9%84-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-overlay-%D8%AF%D8%B1-%D8%A8%DB%8C%D8%B3%DA%A9%D8%A7%D9%85.html
    ما زنده به آنیم که آرام نگیریم موجیم که آسودگی ما عدم ماست

    وقتی یک ملت برای فرهنگ و نژاد و ملیت خویش ارزشی قائل نشد و حقی را که طبیعت برای نگاهداری نژاد پاکش به او ارزانی داشته بود پایمال ساخت و به بیگانگان روی آورد و تسلیم شد دیگر حق ندارد از شکست و بدبختی سیاسی که خودش باعث آن شده است شکایت کند .ادولف هیتلر

    r.babazadeh@yahoo.com
لطفا صبر کنید...
X