اطلاعیه

Collapse
No announcement yet.

مشکل با تابع Get در MMC) BASOCM)

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

    مشکل با تابع Get در MMC) BASOCM)

    سلام,
    مشکلی با تابع Get در بسکام نسخه 1.11.9.8 دارم که وقتی توی یک حلقه For یا Do Loop از این تابع استفاده می کنم بعد از این که 8190 بار تابع اجرا میشه دیگه تابع قفل میشه و نمیشه تابع رو اجرا کرد و در نتیجه برنامه قفل میشه. AVR-DOS نسخه 5.5 هستش و میکرو هم M32L که برای این که توی SRAM میکرو برنامه به مشکل بر نخوره تنظیمات AVR-DOS رو تغییر دادم. ممنون میشم کمک کنید.


    #2
    پاسخ : مشکل با تابع Get در MMC) BASOCM)

    سلام
    اگر منظورت داخب سیمولاتوره احتمالا برنامت ایرادی نداره
    چون منم همین مشکل رو داشتم اما وقتی روی بور برناممو پروگرم کردم جواب داد
    اگر امتحان نکردی یه امتحان بکن 2باره خبر بده
    انقدر احمق نیستم که فکر کنم کارم تموم شده

    دیدگاه


      #3
      پاسخ : مشکل با تابع Get در MMC) BASOCM)

      سلام,
      پروژه عملی این مشکلو داره. سیمولاتور رو تست نکردم. میکرو ممکنه خراب باشه؟

      دیدگاه


        #4
        پاسخ : مشکل با تابع Get در MMC) BASOCM)

        مشکل از استک هاتون هست مقدارش کمه. :agree:
        الهم عجل لولیک الفرج

        فقط 313 نفر...

        دیدگاه


          #5
          پاسخ : مشکل با تابع Get در MMC) BASOCM)

          سلام,
          یعنی هیچ راهی نداره؟ باید با میکروی حجم بالاتر عوض بشه؟ برنامه مال همین ELT240320 هستش میخوام عکس نمایش بدم.

          اینم کدمه:

          '-------------------------------- Configs --------------------------------------------------
          $regfile = "m32def.dat"
          $crystal = 16000000
          $baud = 9600
          $include "Config_MMC.bas"
          $include "CONFIG_AVR-DOS.bas"
          $include "colordb.bas"
          Config Portb.0 = Output
          Config Portb.1 = Output
          Config Portb.2 = Output
          Config Portb.3 = Output
          Config Portb.4 = Output
          Config Porta = Output
          '-------------------------------------------------------------------------------------------

          '-------------------------------- Declares --------------------------------------------------
          Declare Sub Writelcd(byval Ind As Byte , Byval Dat As Word)
          Declare Sub Writeind(byval Ind As Byte)
          Declare Sub Writedat(byval Dat As Word)
          Declare Function Readlcd(byval Ind As Byte) As Word
          Declare Sub Setbackcolor(byval Col As Word)
          Declare Sub Init
          Declare Sub Test
          Declare Sub Mmcinit
          '--------------------------------------------------------------------------------------------

          '-------------------------------- Aliases --------------------------------------------------
          Cs Alias Portb.0 'Chip Select (Low)
          Rs Alias Portb.1 'Register Select (0=Ins-1=Dat)
          Wr Alias Portb.2 'Write Enable (Low)
          Rd Alias Portb.3 'Read Enable (Low)
          Rst Alias Portb.4 'Reset (Low)
          Db Alias Porta 'Data Bus 2 (DB10 to DB17)
          '-------------------------------------------------------------------------------------------

          '-------------------------------- Variables -------------------------------------------------
          Dim Repeat As Long
          Dim Readed As Word
          '--------------------------------------------------------------------------------------------

          '-------------------------------- Consts ----------------------------------------------------
          Const Start_osc = &H00 'Start Oscillation Code
          Const Driver_output_control1 = &H01 'Driver Output Control 1 Code
          Const Lcd_driving_wave_control = &H02 'LCD Driving Wave Control Code
          Const Entry_mode = &H03 'Entry Mode Code
          Const Rcr = &H04 'Resize Control Register Code
          Const Dc1 = &H07 'Display Control 1 Code
          Const Dc2 = &H08 'Display Control 2 Code
          Const Dc3 = &H09 'Display Control 3 Code
          Const Dc4 = &H0A 'Display Control 4 Code
          Const Rgbdic1 = &H0C 'RGB Display Interface Control 1 Code
          Const Fmp = &H0D 'Frame Maker position Code
          Const Rgbdic2 = &H0F 'RGB Display Interface Control 2 Code
          Const Poc1 = &H10 'Power Control 1 Code
          Const Poc2 = &H11 'Power Control 2 Code
          Const Poc3 = &H12 'Power Control 3 Code
          Const Poc4 = &H13 'Power Control 4 Code
          Const Hgas = &H20 'Horizontal GRAM Address Set Code
          Const Vgas = &H21 'Vertical GRAM Address Set Code
          Const Wdg = &H22 'Write Data to GRAM Code
          Const Poc7 = &H29 'Power Control 7 Code
          Const Frcc = &H2B 'Frame Rate and Color Control Code
          Const Gc1 = &H30 'Gamma Control 1 Code
          Const Gc2 = &H31 'Gamma Control 2 Code
          Const Gc3 = &H32 'Gamma Control 3 Code
          Const Gc4 = &H35 'Gamma Control 4 Code
          Const Gc5 = &H36 'Gamma Control 5 Code
          Const Gc6 = &H37 'Gamma Control 6 Code
          Const Gc7 = &H38 'Gamma Control 7 Code
          Const Gc8 = &H39 'Gamma Control 8 Code
          Const Gc9 = &H3C 'Gamma Control 9 Code
          Const Gc10 = &H3D 'Gamma Control 10 Code
          Const Hasp = &H50 'Horizontal Address Start Position Code
          Const Haep = &H51 'Horizontal Address End Position Code
          Const Vasp = &H52 'Vertical Address Start Position Code
          Const Vaep = &H53 'Vertical Address End Position Code
          Const Doc2 = &H60 'Driver Output Control 2 Code
          Const Bidc = &H61 'Basic Image Display Control Code
          Const Vsc = &H6A 'Vertical Scroll Control Code
          Const Pi1dp = &H80 'Partial Image 1 Display Position Code
          Const Pi1sl = &H81 'Partial Image 1 Area (Start Line) Code
          Const Pi1el = &H82 'Partial Image 1 Area (End Line) Code
          Const Pi2dp = &H83 'Partial Image 2 Display Position Code
          Const Pi2sl = &H84 'Partial Image 2 Area (Start Line) Code
          Const Pi2el = &H85 'Partial Image 2 Area (End Line) Code
          Const Pic1 = &H90 'Panel Interface Control 1 Code
          Const Pic2 = &H92 'Panel Interface Control 2 Code
          Const Pic3 = &H92 'Panel Interface Control 3 Code
          Const Pic4 = &H95 'Panel Interface Control 4 Code
          Const Pic5 = &H97 'Panel Interface Control 5 Code
          Const Pic6 = &H98 'Panel Interface Control 6 Code
          '-------------------------------------------------------------------------------------------

          '-------------------------------- Main -----------------------------------------------------
          Call Init
          Call Mmcinit
          Call Setbackcolor(green)

          Do

          Loop
          '-------------------------------------------------------------------------------------------

          '-------------------------------- Subs -----------------------------------------------------
          Sub Init
          Reset Rst
          Waitms 50
          Set Rst
          Readed = Readlcd(start_osc)
          If Readed = &H9325 Then
          Print "ILI9325"
          Call Setbackcolor(white)
          Call Writelcd(&H00e3 , &H3008)
          Call Writelcd(&H00e7 , &H0012)
          Call Writelcd(&H00ef , &H1231)
          Call Writelcd(start_osc , &H0001)
          Waitms 50
          Call Writelcd(driver_output_control1 , &H0100)
          Call Writelcd(lcd_driving_wave_control , &H0700)
          Call Writelcd(entry_mode , &H1030)
          Call Writelcd(rcr , &H0000)
          Call Writelcd(dc2 , &H0202)
          Call Writelcd(dc3 , &H0000)
          Call Writelcd(dc4 , &H0000)
          Call Writelcd(rgbdic1 , &H0000)
          Call Writelcd(fmp , &H0000)
          Call Writelcd(rgbdic2 , &H0000)
          Call Writelcd(poc1 , &H0000)
          Call Writelcd(poc2 , &H0000)
          Call Writelcd(poc3 , &H0000)
          Call Writelcd(poc4 , &H0000)
          Waitms 200
          Call Writelcd(poc1 , &H1690)
          Call Writelcd(poc2 , &H0227)
          Waitms 70
          Call Writelcd(poc3 , &H001A)
          Waitms 70
          Call Writelcd(poc4 , &H1800)
          Call Writelcd(poc7 , &H002A)
          Waitms 70
          Call Writelcd(hgas , &H0000)
          Call Writelcd(vgas , &H0000)
          Call Writelcd(gc1 , &H0007)
          Call Writelcd(gc2 , &H0605)
          Call Writelcd(gc3 , &H0106)
          Call Writelcd(gc4 , &H0206)
          Call Writelcd(gc5 , &H0808)
          Call Writelcd(gc6 , &H0007)
          Call Writelcd(gc7 , &H0201)
          Call Writelcd(gc8 , &H0007)
          Call Writelcd(gc9 , &H0602)
          Call Writelcd(gc10 , &H0808)
          Call Writelcd(hasp , &H0000)
          Call Writelcd(haep , &H00EF)
          Call Writelcd(vasp , &H0000)
          Call Writelcd(vaep , &H013F)
          Call Writelcd(doc2 , &HA700)
          Call Writelcd(bidc , &H0001)
          Call Writelcd(vsc , &H0000)
          Call Writelcd(pi1dp , &H0000)
          Call Writelcd(pi1sl , &H0000)
          Call Writelcd(pi1el , &H0000)
          Call Writelcd(pi2dp , &H0000)
          Call Writelcd(pi2sl , &H0000)
          Call Writelcd(pi2el , &H0000)
          Call Writelcd(pic1 , &H0000)
          Call Writelcd(pic2 , &H0000)
          Call Writelcd(pic3 , &H0003)
          Call Writelcd(pic4 , &H0110)
          Call Writelcd(pic5 , &H0000)
          Call Writelcd(pic6 , &H0000)
          Call Writelcd(dc1 , &H0133)
          End If
          End Sub

          Sub Test
          Call Writelcd(hasp , &H0000)
          Call Writelcd(haep , &H00EF)
          Call Writelcd(hgas , &H0000)
          Call Writelcd(vasp , &H0000)
          Call Writelcd(vaep , &H0140)
          Call Writelcd(vgas , &H0000)
          Call Writeind(wdg)
          For Repeat = 1 To 76800
          Next
          End Sub

          Sub Writelcd(byval Ind As Byte , Byval Dat As Word)
          Reset Rs
          Set Rd
          Reset Wr
          Config Porta = Output
          Db = &H00
          Reset Cs
          Set Cs
          Db = Ind
          Reset Cs
          Set Cs
          Set Wr
          Config Porta = Input
          Set Rs
          Set Rd
          Reset Wr
          Config Porta = Output
          Db = High(dat)
          Reset Cs
          Set Cs
          Db = Low(dat)
          Reset Cs
          Set Cs
          Set Wr
          Config Porta = Input
          End Sub

          Function Readlcd(byval Ind As Byte) As Word
          Reset Rs
          Set Rd
          Reset Wr
          Config Porta = Output
          Db = &H00
          Reset Cs
          Set Cs
          Db = Ind
          Reset Cs
          Set Cs
          Set Wr
          Config Porta = Input
          Dim Dat As Word
          Dim Dat2 As Word
          Dat2 = 0
          Dat = 0
          Config Porta = Input
          Set Rs
          Set Wr
          Reset Rd
          Reset Cs
          Reset Cs
          Dat = Pina
          Set Cs
          Shift Dat , Left , 8
          Reset Cs
          Reset Cs
          Dat2 = Pina
          Dat = Dat Or Dat2
          Set Cs
          Set Rd
          Readlcd = Dat
          End Function

          Sub Writeind(byval Ind As Byte)
          Reset Rs
          Set Rd
          Reset Wr
          Config Porta = Output
          Db = &H00
          Reset Cs
          Set Cs
          Db = Ind
          Reset Cs
          Set Cs
          Set Wr
          Config Porta = Input
          End Sub

          Sub Writedat(byval Dat As Byte)
          Set Rs
          Set Rd
          Reset Wr
          Config Porta = Output
          Db = High(dat)
          Reset Cs
          Set Cs
          Db = Low(dat)
          Reset Cs
          Set Cs
          Set Wr
          Config Porta = Input
          End Sub

          Sub Setbackcolor(byval Col As Word)
          Call Writelcd(hasp , &H0000)
          Call Writelcd(haep , &H00EF)
          Call Writelcd(hgas , &H0000)
          Call Writelcd(vasp , &H0000)
          Call Writelcd(vaep , &H013F)
          Call Writelcd(vgas , &H0000)
          Call Writeind(wdg)
          For Repeat = 1 To 76800
          Call Writedat(col)
          Next Repeat
          End Sub

          Sub Mmcinit
          If Drivecheck() <> 0 Then
          Print "Card Not Found"
          Else
          Print "Check OK"
          If Driveinit() <> 0 Then
          Print "Cannot Init"
          Else
          Print "Init OK"
          If Initfilesystem(1) <> 0 Then
          Print "Unknow file system"
          Else
          Print "Fat OK"
          End If
          End If
          End If
          End Sub
          '-------------------------------------------------------------------------------------------

          اینجا Get رو حذف کردم ولی کل برنامه همینه.

          دیدگاه


            #6
            پاسخ : مشکل با تابع Get در MMC) BASOCM)

            همون طور که مهندس الفتی گفت ، احتمالا باید استک هارو افزایش بدید
            اینارو به اول برنامت اضافه کن

            $hwstack = 128
            $swstack = 84
            $framesize = 128

            دیدگاه


              #7
              پاسخ : مشکل با تابع Get در MMC) BASOCM)

              سلام,
              مشکل حل شد :wow: . خیلی ازتون ممنونم. فقط میشه یه توضیح بدین این 3 تا چی هستن؟
              متشکرم.

              دیدگاه


                #8
                پاسخ : مشکل با تابع Get در MMC) BASOCM)

                طبق اون چیزی که تو HELP نوشته، وقتی شما از Gosub استفاده میآ‌کنید ،آدرس برگشتش (به اندازه 2 بایت) تو این قسمت از حافظه قرار میآ‌گیره. هر کدو از دستورات Gosub,CALL و توابع به مقداری از این حافظه احتیاج دارن.پس وقتی که از این موارد استفاده میآ‌کنید باید مقدار این استک رو افزایش بدید.

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

                دیدگاه


                  #9
                  پاسخ : مشکل با تابع Get در MMC) BASOCM)

                  swstack حجم فضایی هست که بعنوان ورودی توابع دیده میشه ... یعنی اگه byref باشه چون فقط ادرس ارسال میشه پس حجم کمتری میبره (البته این تنها تفاوت این دو نوع نیست ولی بد نیست تا میشه byref باشه)

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

                  فقط 313 نفر...

                  دیدگاه

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