اطلاعیه

Collapse
No announcement yet.

تابع در بیسکام

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

    تابع در بیسکام

    با سلام من یه برنامه نوشتم که یه قسمتش یه تابع که دو تا ورودی میگیره و یه سری عملیات ریاضی انجام میده ومقدار را در یک رجیستر قرار میدهد اما این تابع درست کار نمیکنه میشه راهنمایی کنید که مشکلش چیه اینم تابع
    کد:
    Sub Mc3ph(vph1 As Word , Vph2 As Word)
    Local Vsave As Long
    Local Vsave1 As Long
    Vsave = Vph1 * Vph1
    Vsave1 = Vph2 * Vph2
    Vt = Vph1 * Vph2
    Vt = Vt + Vsave
    Vt = Vt + Vsave1
    Vt = Sqr(vt)
    End Su

    #2
    پاسخ : تابع در بیسکام

    به نظر نمیاد خود تابع مشکلی داشته باشه ...
    اما مشکل شما کجاست ؟
    تو محاسبات یا تو رفت و برگشت تابع ؟
    Share OR Die

    دیدگاه


      #3
      پاسخ : تابع در بیسکام

      محاسبات درسته توی رفت و برگشت را نمیدونم اما میخوام بدونم خود تابع درسته؟

      دیدگاه


        #4
        پاسخ : تابع در بیسکام

        خود تابع که درسته اما بسکام همیشه با رفت و برگشت مشکل داره
        Share OR Die

        دیدگاه


          #5
          پاسخ : تابع در بیسکام

          بسکام یه بار منو برا تابع با خودش درگیر کرد، تابع کاملا منطقی بود ولی درست اجرا نمی کرد، منم خیلی به تابع نیاز داشتم برا حل کردنش تابع رو با gosub شبیه سازی کردم، مقادیر ورودیش هم تو چندتا متغییر عمومی میریختم و داخل لیبلم روشون کارامو انجام می دادم.
          ;()((void (*)(void))0x0000))

          دیدگاه


            #6
            پاسخ : تابع در بیسکام

            با سلام اینجوری نوشتم اما بازم کار نمیکنه کسی نیست کمک کنه
            کد:
            Function Mc3ph(byval Vph1 As Word , Vph2 As Word) As Integer
            Local Vsave As Integer
            Local Vsave1 As Integer
            Local Vsave2 As Integer
            Local Vt1 As Integer
            
            Vsave = Vph1 * Vph1
            Vsave1 = Vph2 * Vph2
            Vsave2 = Vph1 * Vph2
            Vt1 = Vsave2 + Vsave
            Vt1 = Vt1 + Vsave1
            Vt1 = Sqr(vt1)
            Mc3ph = Vt1
            End Function

            دیدگاه


              #7
              پاسخ : تابع در بیسکام

              پیشنهادم اینه که جایی که تابع فراخوانی میشه یه lable تعریف کن و در اخر اجرای تابع دوباره برگردون به همون lable
              البته پیشنهاد می کنم هیچ تابعی رو تو هیچ تابع دیگه ای فراخوانی نکنی چون بسکام اصلا اینجور چیزا حالیش نیست ...
              Share OR Die

              دیدگاه


                #8
                پاسخ : تابع در بیسکام

                با سلام
                دوست عزیز به نظر من مشکل شما در مقدار sp که به محل حافظه پشته اشاره می کنه، هست
                همونطور که می دونید مقدار sp در حالت پیش فرض دارای مقدار صفر هست که به رجیستر R0 اشاره می کنه ؛ در این حالت با اجرای دستور پوش یا با فراخوانی یک تابع مقدار SP ، یک واحد کاهش پیدا میکنه و مقدار R0خراب میشه و مقدار SP برابر با FFFFH و در صورت استفاده نکردن از حافظه خارجی SRAM یک مقدار تعریف نشده است
                و بنابراین پشته خراب میشه و به خاطر همین پس از اجرای تابع خط فرمان محل قبل از پرش رو گم میکنه و برنامه ریست میشه
                خوب شما بیاید مقدار SP رو برابر 200H کنید
                SPL=0
                SPH=2
                به نظر من اگه تابع تون درست باشه که هست و کامپایلرتون هم خطا نداشته باشه مشکلتون رفع میشه!
                البته این رو نگفتم تا ضامن صحیح بودن حرفم در مورد این مسئله باشه شاید مشکل از جای دیگه ای !

                دیدگاه


                  #9
                  پاسخ : تابع در بیسکام

                  ببینید:

                  دیدگاه


                    #10
                    پاسخ : تابع در بیسکام

                    ممنون از پاسخ همه دوستان در بیسکام چه جوری sp را مقدار بدم ؟

                    دیدگاه


                      #11
                      پاسخ : تابع در بیسکام

                      همین جوری خیلی ساده وراحت و بدون نیاز به دستورات اسمبلی:

                      SPL=0
                      SPH=2

                      دیدگاه


                        #12
                        پاسخ : تابع در بیسکام

                        سلام به همه دوستان
                        من یه کوچولو با این مورد بر خورد کردم و واسه این بود که متغییر های محلی درست محاسبه نمیشد
                        تو هلپ بسکام نگاه کردم تنها چیزی رو که متوجه شدم این بود که توو هلپ بسکام همیشه واسه میکرو یه مقداری رو به عنوان پشته سخت افزاری و نرم افزاری تعریف میکنه و بعد برنامه رو شروع میکنه منم همین کار رو کردم و مشکلم حل شد .
                        تو همین سایت موضوع رو مطرح کردم و اقا رضا دوست گلمون راهنماییم کرد و توضیح داد سرچ کنین پشته نرم افزاری خیلی مطالب مفیدی گیرتون میاد
                        $swstack
                        $hwstack

                        دیدگاه


                          #13
                          پاسخ : تابع در بیسکام

                          آقا من واقعا عذر می خوام :redface:
                          درسته چیزی که من گفتم مربوط به حالت پیشفرض خود میکرو قبل از پروگرام کردن هست.
                          اما کامپایلرها مثل بسکام و کدویژن حافظه داده رو برای ذخیره سازی مقادیر و کاربرد حافظه پشته که به دو صورت
                          نرم افزاری و سخت افزاری انجام میشه
                          که مقدار پیشفرض SP در کدویژن و بسکام به عنوان مثال در MEGA8 , MRSA16 که دارای 1024 بایت حافظه داخلی SRAM هستند برابر است با : 96+1023=1119=45FH البته این در صورتی که ناحیه HEAP در کدویژن که
                          فکر می کنم همان SWSTACK در بسکام می باشد برابر صفر باشد
                          که اونجور که من متوجه شدم کاربرداین نواحی به این ترتیب هست :
                          1-در کدویژن :
                          1.HEAP : برای استفاده متغیرهای توابع کتابخانه ای می باشد
                          2. HARDWARE STACK : برای ذخیره سازی آدرس برگشتی از زیربرنامه های وقفه و توابع می باشد .
                          2-در بسکام :
                          1. SWSTACK :برای استفاده متغیرهای توابع کتابخانه ای می باشد
                          2.HWSTACK: برای ذخیره سازی آدرس برگشتی از زیربرنامه های وقفه و توابع می باشد

                          خوب با این تفاسیر که اگه درست باشه( که اگر درست نیست از دوستان می خوام که اصلاحش کنند تا این مطلب بهتر برای بنده جابیفته، ممنون میشم)و اگر مشکل آقای زوار با اون چیزی که من گفته بودم و اینکه ایشون بیان SPL=0,SPH=2 بزارند به نظرم با تغییر HWSTACK مشکلشون حل شده البته گفتم اگه حل شده باشه!از آقای زوار می خوام که ما رو در مورد این مسئله گاه کنند


                          دیدگاه


                            #14
                            پاسخ : تابع در بیسکام

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

                            دیدگاه


                              #15
                              پاسخ : تابع در بیسکام

                              فکر کنم مشکل منم همین بود که تا حالا نتونسته بودم از تابع تو بسکام استفاده کنم ...
                              رفتم برنامه هامو نگاه کردم و دیدم تو هیچ کدوم از این پشته ها استفاده نکرده بودم ... پشته ها رو از help برداشتم و به برنامه هام اضافه کردم ، فکر کنم از این به بعد درست کار کنه ...
                              با تشکر از همه دوستان
                              Share OR Die

                              دیدگاه

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