سلام
تو بسکام دستوری لازم دارم که تا قسمتی شبیه return عمل کنه.
چون وقتی که از زیربرنامه وقفه به برنامه اصلی پرش میکنیم،میکرو دائم فکر میکنه زیربرنامه وقفه رو داره اجرا میکنه.و من میخام وقتی پرش کرد به برنامه اصلی همه چیزو درباره وقفه بیخیال بشه.
در حقیقت دستوری میخام که پرچم وقفه رو بیاره پایین.
مطمئناً همچی دستوری هست.با اسمبلی میشه این کارو کرد ولی دردسرش زیاده. در این مورد از دوسنان کسی حضور ذهن داره؟
مهندس منظورت رو نفهمیدم !
ولی می شه کل وقفه رو غیر فعال کرد !
نه كل وقفه ها رو نميخام
ببينيد. الان میکرو داره زیربرنامه وقفه رو اجرا میکنه. اگه به دستور return برسه برمیگرده به اونجایی که به خاطر وقفه برنامه رو قطع کرده بود و تا رخ دادن اینتراپت دیگه برنامه اصلی رو اجرا میکنه.
اما اگه من تو زیر برنامه وقفه یه دستور جامپ به برنامه اصلی میکرو داشته باشم، هرچند میرم تو اجرای برنامه اصلی، ولی میکرو منتظر میمونه تا به return برسه و برگرده به جایی که برنامه رو قطع کرده بود. حالا اگه تو این مدت چندین دستور وقفه دیگه رخ بده، میکرو دچار مشکل میشه.
امیدوارم تونسته باشم منظورمو برسونم.
با اسمبلی میشه رجیستر مربوط به اینتراپتو دستکاری کرد ولی تو بسکام؟
خوب دیگه وقتی که رفتی داخل زیربرنامه اول دیسایبل کن بعد قبل از رترن دوباره اینبیل کن
1) برنامه اصلی طوریه که تو اکثر جاهاش لازمه اینیبل باشه( وقفه های متعدد از جنس های مختلفی تو برنامه هست)
2) تو Return من نميدونم که به کدوم قسمت از برنامه برمیگرده تا اونجا اینیبل بذارم!
نظرتون در باره این موضوع چیه؟
قبل از پرش یه بار دیسیبل کنم بعدش بلافاصله اینیبل. یعنی دوتا دستورو پشت سر هم قبل از دستور جامپ بنویسم.
بنظرتون جواب میده؟
نباید جواب بده !
شما حافظه استک پویینتر رو که خالی نمی کنی !
جالبه که این مشکل شما رو من هم قبلا داشتم و آخرش طرحمو عوض کردم !
می تونی این کارو کنی :
تو وقفه فوق یه متغییر رو یک کنی !
تو. حلقه اصلی برنامه متغیر فوق رو تست کن و اگه یک شد بپر به جای مشخص شده و متغیر دوباره صفر بشه !
یادمه من این کارو کردم !
یعنی این کار رو نمیشه کرد : بعد از اجرای وقفه با پرش به زیر برنامه ابتدا وقفه رو دیسبل کنیم و دوباره قبل از رسیدن به رترن انبیل
مهندس تریپ ممنون. کلک جالبیه. پس کافیه قبل از دستور return یه برچسب بزنم.
مهندس مهراد:
نه نمیشه! مشکل اینجاست که ما وقتی از وسط زیربرنامه وقفه بیرون میپریم، دیگه دستور return رو نخواهیم دید وگر نه که دیگه مشکلی نبود . اگه هم بخوایم به زیر برنامه وقفه پرش کنیم برای اینکه هر بار این اتفاق نیفته همون روش علی آقا میشه.
راستش ایلگار جان من من که متوجه نشدم !
ولی خوشبختانه مشکلت حل شد