اطلاعیه

Collapse
No announcement yet.

وقفه

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

    وقفه

    سلام، من یه برنامه برای وقفه سرریز تایمر نوشتم!
    مشکلم اینکه وقتی میره دستورای وقفه رو اجرا می کنه بر نمی گرده دستوراتم رو ادامه بده، یعنی هر دفعه که وقفه انجام میشه و تموم میشه کد رو دوباره از اول می خونه نه از جایی که وقفه شده به بعد!
    کامپایلرم codevision
    کسی میدونه چرا؟

    #2
    پاسخ : وقفه

    مشکل اصلی وقفه ها مربوط به پشته و اشاره گر هاست است
    1- احتمالا در روتین وقفه آنقدر از حافظه استفاده می کنی که پشته پر میشه و آدرس بازگشت گم میشه
    2- با اشاره گرها به اون خانه حافظه که آدرس بازگشت قرار دارد دست رسی پیدا میکنی و مقدارش را عوض میکنی
    تنها موردی که همه آدما یقین دارن خدا در حقش زیاد لطف کرده
    داشتن عقله زیادتر از دیگر آدم ها است

    دیدگاه


      #3
      پاسخ : وقفه

      نوشته اصلی توسط aliila
      مشکل اصلی وقفه ها مربوط به پشته و اشاره گر هاست است
      1- احتمالا در روتین وقفه آنقدر از حافظه استفاده می کنی که پشته پر میشه و آدرس بازگشت گم میشه
      2- با اشاره گرها به اون خانه حافظه که آدرس بازگشت قرار دارد دست رسی پیدا میکنی و مقدارش را عوض میکنی
      خیلی ممنون از راهنماییتون! حالا من چطور می تونم آدرس رو ذخیره کنم و کاری کنم که بعد از اتمام وقفه به ادامه دستورات برگرده؟

      دیدگاه


        #4
        پاسخ : وقفه

        :wow:
        نوشته اصلی توسط milad khakzad
        خیلی ممنون از راهنماییتون! حالا من چطور می تونم آدرس رو ذخیره کنم و کاری کنم که بعد از اتمام وقفه به ادامه دستورات برگرده؟
        در زبان برنامه نویسی سطح بالا ( سی - بیسیک ) شما لازم نیست آدرس برگشت رو ذخیره کنید . خود برنامه این عمل رو انجام میده
        اگر از اشاره گر استفاده نکرده باشید مورد دوم منتفی است و می ماند مورد اول
        ببینید در برنامه های میکرو مبتنی بر پشته همیشه پشته - ریجستر sp - از آخر رم پرمیشه میاد اول رم و متغیر های برنامه
        و کد برنامه - ریجستر pc - از اول رم پر میشه میاد آخر رم اگه این دوتا بهم برسند ( sp و pc ) که میتونه از سورس زیاد و کمبود حافظه باشه یا در روتین وقفه عملیات زیادی انجام دهید در اینصورت یک اعمال پیش بینی نشده صورت میده که در بهترین حالت ریست برنامه هست
        عموما به علت پ کد نامعتبر برنامه ریست میکند
        تنها موردی که همه آدما یقین دارن خدا در حقش زیاد لطف کرده
        داشتن عقله زیادتر از دیگر آدم ها است

        دیدگاه


          #5
          پاسخ : وقفه

          نوشته اصلی توسط aliila
          :wow:
          در زبان برنامه نویسی سطح بالا ( سی - بیسیک ) شما لازم نیست آدرس برگشت رو ذخیره کنید . خود برنامه این عمل رو انجام میده
          اگر از اشاره گر استفاده نکرده باشید مورد دوم منتفی است و می ماند مورد اول
          ببینید در برنامه های میکرو مبتنی بر پشته همیشه پشته - ریجستر sp - از آخر رم پرمیشه میاد اول رم و متغیر های برنامه
          و کد برنامه - ریجستر pc - از اول رم پر میشه میاد آخر رم اگه این دوتا بهم برسند ( sp و pc ) که میتونه از سورس زیاد و کمبود حافظه باشه یا در روتین وقفه عملیات زیادی انجام دهید در اینصورت یک اعمال پیش بینی نشده صورت میده که در بهترین حالت ریست برنامه هست
          عموما به علت پ کد نامعتبر برنامه ریست میکند
          ممنون! من الان کدهایی که توی اینتراپتم هست رو می خوام یعنی نمی تونم کم کنم! در عین حال احتیاج دارم که بعد از اینتراپت به ادامه برنامه بره! راه حل چیه؟

          دیدگاه


            #6
            پاسخ : وقفه

            شدیدا توصیه میشه در وقفه از چند عمل ساده استفاده کنید نه اینکه در وقفه محاسبات انجام دهید در اینصورت تکلیف وقفه ای بعدی چیست ؟ و اگه به وقفه های بعدی رسیدگی نشه در اینصورت برنامه شما مبتنی بر الگوریتم نیست و همین طوری الا بختکی اجرا میشه و نتایج قابل پیش بینی نیست
            من پیش نهاد میدم از فلگ ها استفاده کنید . فلگ متغیری معمولی هست مثلا وقتی وارد روتین وقفه شدید یک فلگ رو مقدار دهی کنید و سریع از وقفه خارج شود
            ودر روند اجرای برنامه با توجه به مقدار فلگ تغییرات لازم را انجام دهید
            تنها موردی که همه آدما یقین دارن خدا در حقش زیاد لطف کرده
            داشتن عقله زیادتر از دیگر آدم ها است

            دیدگاه

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