اطلاعیه

Collapse
No announcement yet.

delay و وقفه

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

    delay و وقفه

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

    #2
    پاسخ : delay و وقفه

    دستور delay شامل کلی دستور دیگه تو پس زمینه هست . هر وقت وقفه ای اجرا بشه تو همون خطی که دستور Delay بوده برنامه رو ترک میکنه و بعدش دوباره میاد بقیه دستوراتشو انجام میده
    Don't hesitate to ask any question ..

    دیدگاه


      #3
      پاسخ : delay و وقفه

      اونوقت دیگه زمان delay همونی نیست که میخواستی.

      دیدگاه


        #4
        پاسخ : delay و وقفه

        نوشته اصلی توسط syavash_kasraeee
        دستور delay شامل کلی دستور دیگه تو پس زمینه هست . هر وقت وقفه ای اجرا بشه تو همون خطی که دستور Delay بوده برنامه رو ترک میکنه و بعدش دوباره میاد بقیه دستوراتشو انجام میده
        دستور deley چه جور دستوراتی انجام میده؟منظورتون از دستورات پس زمینه چیه؟
        من تا حالا فکر میکردم وقتی delay() فراخونده میشه cpu کاملا بیکار میشینه oo:

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

        دیدگاه


          #5
          پاسخ : delay و وقفه

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

          در هر صورت این دو تا روش احتیاج به اجرای مداوم دستوراتی دارن که زمان مورد نیاز شما رو برای ایجاد تاخیر تلف کنه. و مورد مهم اینه که وقفه بین اجرای دو دستور زبان ماشین میاد و میره. ولی فراخوانی یک تابع مثل delay فقط یک دستور کلی نیست. بلکه مثل تمام توابعی که خودتون مینویسین از دستورات متعدد زبان ماشین تشکیل شده.

          دستور delay شامل کلی دستور دیگه تو پس زمینه هست
          این دستورات پس زمینه همونایی هست که داخل روال delay اجرا میشه و شما اشتباها به همه شون به چشم یک دستور نگاه میکنی.

          ضمنا شما نمیتونی جز برای یک دوره زمانی محدود و کوتاه cpu رو به حالت بیکاری ببری. (البته با استفاده از تایمر و مکانیسم های داخلی) مگر اینکه زمان بیدار شدن cpu رو کنترل کنی. (البته از طریق ایجاد مکانیسم های خارجی)

          دیدگاه


            #6
            پاسخ : delay و وقفه

            من شنیدم میگن اگه میخوای از وقفه استفاده کنی بهتره که از delay کدویژن استفاده نکنی (چون در وقفه ها مشکل ایجاد میکند) و یه تابع جدید واسه ایجاد تاخیر خودمون بنویسیم، کسی نظری نداره؟
            The harder I work, the luckier I get

            دیدگاه


              #7
              پاسخ : delay و وقفه

              تنها مسئله ای که در هنگام کار با وقفه ها ممکنه پیش بیاد اینه که چون برای انجام delay فرکانس کاری میکرو استفاده میشه و یک تعداد دستورالعمل پشت سر هم اجرا میشه اگر وقفه ای بیاد و بره زمان اجرای این وقفه ها به delay شما اضافه میشه و این ربطی به کدویژن هم نداره. حتی اگر در IAR از این مکانیسم استفاده بشه این مشکل پیش میاد ربطی هم به کامپایلر نداره. اما در اینکه بهتره از مکانیسم های معادل مثل استفاده از یک تایمر؛ استفاده بشه که شکی نیست.

              دیدگاه


                #8
                پاسخ : delay و وقفه

                نوشته اصلی توسط reza_agha
                برای نوشتن تابع delay بطور پایه میشه دو تا کار کرد. یکی انجام عملی زمانگیر هست مثل اینی که معمولا در کد هایی که توسط کامپایلر ها بطور اتوماتیک تولید میشه استفاده میشه و دوم اینکه از یک تایمر استفاده کنیم تا واقعا میکرو به حالت بیکاری بره.
                .........
                قسمتی که قرمز کردم واقعا درسته یعنی تایمرها پردازنده رو بیکار میکنه!! بعید میدونم چون:
                هدف تایمر ایجاد مکس نیست اساسا هدف از تایمر/کانترها فقط دونستن مدت زمان سپری شده ست که براین اساس با کمک رجیسترای خاصی کارایی انجام میشه

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

                دیدگاه


                  #9
                  پاسخ : delay و وقفه

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

                  دیدگاه

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