اطلاعیه

Collapse
No announcement yet.

کدام وقفه زودتر اجرا میشود

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

    #16
    پاسخ : کدام وقفه زودتر اجرا میشود

    حافظه پشته به sram بستگی دارد،درسته؟
    حداکثر حافظه پشته at32 چقدر میشه گذاشت؟

    پشته نرم افزاری با سخت افزاری چه فرقی دارد؟
    الان وقفه که خارجی رخ میده سخت افزار حساب میشه؟
    شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
    [img width=400 height=100]http:///uploads/140623781981451.png[/img]
    [glow=green,2,100]یاحسین تشنه لب[/glow]

    دیدگاه


      #17
      پاسخ : کدام وقفه زودتر اجرا میشود

      نوشته اصلی توسط aliila
      برنامه نویس باید در روال وقفه حتما وقفه سراسری را غیر فعال کنه و در آخر روال دوباره وقفه سراسری را فعال کنه . وگرنه با اجرای وقفه های تو در تو 100% - بخاطر شما 99.99 درصد - پشته پر میشه و برنامه هنگ میکنه
      با سلام
      جناب مهندس aliila امکان رخ دادن وقفه در وقفه کاملا صفره
      بلکه اگر در وقفه ای وقفه ای رخ بده cpu منتظر میمونه که وقفه اول تموم شه بد به حافظه فلش برگرده بد دوباره به وقفه ای که رخ داده بود اجازه اجرا شدن میده
      یک ازمایش ساده:یک تایمر را در مد normal قرار دهید به مقدار مقایسه 255 و وقفه مقایسه و over flow را هم فعال کنین خواهید دید که ابتدا over flow اجرا خواهد شد طبق جدول TIFR :agree:

      علت هنگ کردن میکرو صدا زدن چندین sub پشته سر همه که با عث میشه به اصطلاح استک سر ریز شه
      سند حرفام ویدوهای مهندس کی نژاذ در knowledgeplus.ir
      .The best question deserves a better answer
      =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
      «پناه»می برم «به خدا»
      از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
      محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

      دیدگاه


        #18
        پاسخ : کدام وقفه زودتر اجرا میشود

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

        نوشته اصلی توسط عمو LED
        حافظه پشته به sram بستگی دارد،درسته؟
        بله به sram بستگی داره .
        نوشته اصلی توسط عمو LED
        حداکثر حافظه پشته at32 چقدر میشه گذاشت؟
        حداکثر حافظه پشته رو میتونی مقدار دیفاین RAMEND که در هدر فایل مربوط به میکرو تعریف شده قرار بدی .
        نوشته اصلی توسط عمو LED
        پشته نرم افزاری با سخت افزاری چه فرقی دارد؟
        دقیق نمیدونم ولی ، نرم افزاری sram و سخت افزاری cash باید باشه .
        نوشته اصلی توسط عمو LED
        الان وقفه که خارجی رخ میده سخت افزار حساب میشه؟
        یه جورایی آره .
        گذشت خصلت مردان است

        دیدگاه


          #19
          پاسخ : کدام وقفه زودتر اجرا میشود

          1-پس نیاز نیست که در زیربرنامه وقفه ، وقفه سراسری غیر فعال کرد .

          2-الان اگه مثلا!! در یک زیربرنامه وقفه بیایم یک Call sub صدا بزنیم بعد اجرا شدن اون ساب دوباره برمیگرده به زیربرنامه وقفه و بعد از اون دوباره برمیگرده برنامه اصلی. درسته؟ یا نه از sub ریترن نمیشه!

          3-چطور متوجه بشم که این برنامه هایی که نوشتم استک پر میکنه؟
          4-یا فرضا پر شد چطور خالی میشه؟ دستی میشه؟
          شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
          [img width=400 height=100]http:///uploads/140623781981451.png[/img]
          [glow=green,2,100]یاحسین تشنه لب[/glow]

          دیدگاه


            #20
            پاسخ : کدام وقفه زودتر اجرا میشود

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

            2- شما میتونی در داخل تابع وقفه سالها به خوبی و خوشی زندگی کنی و چون وقفه سراسری را غیر فعال کردی انگار وقفه های بعدی را خفه میکنی . تنها وقفه ای که نمی شه خفه کرد وقفه ریست است.بنا براین داخل تابع وقفه فقط فلگ رو ست میکنی یا یک دیتا رو میخونی و الفرار وگرنه باید قید وقفه های بعدی رو بزنی

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

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

            دیدگاه


              #21
              پاسخ : کدام وقفه زودتر اجرا میشود

              ببنید در رابطه با وقفه کلا اصول کار اینجوریه:

              قبل از رخ دادن یک وقفه:

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


              در هنگام رخ دادن(همون آن که رخ میده):

              در این زمان اصولا کل رجیسترهای داخلی پردازنده ذخیره میشن(اصولا و عموما اینجوریه بازم میشه کاری کرد که اینطوری نباشه) و از همه مهمتر رجیستر (Program Counter ( PC در استک ذخیره میشه(در رابطه با استک الان توضیح میدم ، صبر کنید)
              بزارید بیشتر توضیح بدم این رجیستر مخصوص اینه که به پردازنده بفهمونه دستور بعدی چیه که بتونه اونو فچ( fetch ) کنه. حالا پردازنده وقفه خورده مطمئنا بسته به بردار وقفه پردازنده و نوع وقفه ای که رخ داده برای اینکه پردازنده بره سراغ روتین اون وقفه نیاز هست PC یه تغییر اساسی کنه و به اصطلاح جامپ ( jump ) یا Branch رخ بده این چیزی نیست جز عوض شدن PC به صورت اساسی .
              خوب ولی اینجا یه مشکلی پیش میاد: PC داره میگه دستور بعدی چیه و یهو وقفه رخ میده و PC یک تغییر اساسی میکنه . حالا پردازنده میره روتین وقفه را اجرا میکنه. بالاخره که باید برگرده سر جایی که وقه خوردن . اینجاست که علی میمونه و حوضش(پردازنده میمونه و یه علامت سوال : حالا چیکار کنم؟ )
              برای اینکه این اتفاق رخ نده قبل از اینکه jump یا branch رخ بده مقدار PC یه جا ذخیره میشه.
              (راستی یه چیز : تو پردازنده های اینتل از اصطلاح IP یا Instruction Pointer برای رجیستر شمارنده برنامه( PC ) استفاده میشه. پس اگه یه جا دیدید تعجب نکنید IP همون PC است)

              بریم سراغ مرحله بعدی:
              بعد از کامل شدن اجرای روتین وقفه:
              اون رجیستر های اصلی پردازنده بود ذخیره کرده بودیم...
              اینجا به اصطلاح restore شون میکنیم.
              و اصل کار : اره همون PC
              مقدار PC قبلیه یادتونه تو استک ذخیره کردیم؟ حالا باید اون مقدار را از استک بخونیم و بریزیم داخل رجیستر PC .(دوباره گفتم استک، توضیح میدم ، فعلا استک را یک محلی برای ذخیره اطلاعات موقت فرض کنید)

              خوب خوشبختانه وقفه رخ داد و روتین وقفه اجرا شد و همه چیز به مقدار قبلی خودش بازگشت.(انگار نه خانی رفته و نه خانی اومده)
              -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

              حالا بریم سراغ استک:
              قبلا گفتم ، stack یا پشته محلیه برای ذخیره اطلاعات موقتی ( دیدید که چه قدر تو وقفه وجودش مهم بود)
              تو پست هاتون دیدم به پیاده سازی نرم افزاری و سخت افزاری پشته اشاره شده بود، بزارید اول اینو بگم چون خیلی خیلی جالبه:
              ببنید من گفتم : پیاده سازی.
              پس پشته(که یک محل برای ذخیره ی اطلاعات است) میتونه به صورت های مختلف پیاده سازی بشه:
              میتونیم خودمون سخت افزاری و جدا یک حافظه کوچیک بزاریم برا پشته و بگیم این دیگه 100 درصد برا پشته است و منحصرا حافظه پشته است. به این میگن پیاده سازی سخت افزاری .
              (راستی اصلا به حافظه ی cache یا کش پردازنده ربطی نداره ، اون کلا یه چیز دیگه است و برای افزایش سرعت پردازنده است ( با توجه به خاصیت locality of refrence یا محلی بودن مراجعات ، بحثش بسیار زیاده و از مباحث پر تست برای کنکور ارشد کامپیوتره))

              حالا اون نرم افزاری قضیه اش چیه.
              مثلا تو همین میکرو: قبول دارید که ما یه حافظه SRAM داریم که برای ذخیره داده ها است؟
              خوب چرا هزینه کنیم یه حافظه کوچیک و مستقل برای استک در نظر بگیریم.
              میایم از همون sram استفاده میکنیم. و پیش خودمون فرض میگیریم از اینجا تا اینجا مخصوص پشته باشه. عموما اون کف حافظه یا آخر حافظه که دارای آدرس های بالاتری است را برای استک اختصاص میدن.
              این همون پیاده سازی نرم افزاریه.

              خوب پیاده سازیش کردیم ، حالا میخوایم از اون استفاده کنیم.
              مطمئنا دو کلمه ی PUSH و POP را شنیدید.
              با این دوتا عمل میتونید از حافظه ی استک استفاده کنید.
              به طوری که PUSH یعنی یک مقداری را به بالای استک اضافه کن.
              و POP یعنی یک مقداری را از بالای استک بردار و هر کاری دلت میخواد باش بکن.

              به یک چیز توجه داشتید؟
              گفتم بالای استک .
              این خیلی مهمه : بالای استک یا Top of Stack
              استک یه حافظه است و در حافظه همیشه برای دسترسی به خونه هاش به هر خونه یک آدرسی اختصاص داده میشه. پس با آدرس سرو کار داریم :
              بالای استک چیزی نیست جز آدرس خانه ی بالای استک که الان توش مقداره.
              تو پردازنده یک رجیستر وجود داره به نام: Stack Pointer
              کار این رجیستر اینه که همین آدرس ( Top of Stack ) را در خودش ذخیره کنه.
              پس دیگه مهم نیست چطور استک پیاده سازی شده.
              فقط برای اینکه مثلا همون PC را در استک ذخیره کنیم میایم مقدار همین رجیستر(Stack Pointer ) را تغییر میدیم و حالا بسته به اینکه استک چطور پیاده سازی شده مقدار PC را داخل اون حافظه اختصاص داده شده به استک در جایی که Stack Pointer نشون میده ذخیره میکنیم.
              باری restore کردن رجیستر PC در هنگام بازگشت از روتین هم فقط از جایی که Stack Pointer نشون میده مقدار را میخونیم.

              حالا یه چیز:
              دیدیم که استک چیزی نیست جز یک حافظه که به نحو خاصی بهش دسترسی پیدا میکنیم.
              حافظه هم که همیشه محدوده.
              پس اگه زیادی اطلاعات در استک PUSH بشه ، چه اتفاقی میفته؟
              بله استک پر میشه و سرریز میکنه. به اصطلاح Stack Overflow رخ میده.

              در وقفه ها دیدیم که با رخ دادن وقفه اطلاعات داخل استک PUSH میشه و باز گشت از روتین وقفه اطلاعات از استک POP میشه.

              حالا چه طور میشه که Stack Overflow رخ میده؟
              گفتیم هی بدون اینکه POP بشه ، تو استک PUSHبشه.
              این در اینجا یعنی اینکه پشت سره هم وقفه رخ بده ولی بازگشت از روتین وقفه رخ نده.
              این حالت فقط در وقفه های تو در تو رخ میده.(یکم فکر کنید میفهمید چه جوریه)
              -----------------------------------------
              بریم سراغ میکرو AVR :
              در پردازنده این میکرو بگونه ای است که در حالت عادی ما با استفاده از نرم افزار میایم با رخ دادن وقفه ، کلا وقفه ها را ناتوان میکنیم. یعنی دیگه وقتی وقفه رخ داد وقفه دیگه نتونه تو روتین وقفه ی قبلی رخ بده . این یعنی ما داریم از وقفه های تودرتو جلوگیری میکنیم.
              در مجموعه دستورات پردازنده ی میکرو یک دستور به شکل RETI است . این همون دستور RET یا return یا بازگشت است با این تفاوت که اصئلا در بازگشت از روتین وقفه ها استفاده میشه.
              با اینکار به غیر از اینکه مقدار PC از استک POP میشه یه کار دیگه هم انجام میشه:
              اره
              دیدید که با ورود به روتین وقفه ، کلا وقفه های دیگه را ناتوان کردیم با این دستور مربوط به زبان ماشین پردازنده ، دوباره کاری میکنیم که وقفه ها قابل پذیرش باشند.(همون قضیه نه خانی رفته نه خانی اومده)

              نکته مهم:
              پس اصلا نگران این نباشید که با ورود به وقفه خودتون دستی وقفه ها را ناتوان کنید. اینکار خودش رخ میده و بعد از بازگشت دوباره به حالت اول برمیگرده.

              سوال : اگه بخوایم از قصد کاری کنیم که وقفه های تو درتو امکان پذیر باشند باید چه کنیم؟
              معلومه دیگه: اول روتین وقفه دستور SEI که باعث فعال سازی وقفه ها میشه را قرار بدید.

              دیگه.....
              فکر نکنم چیزی مونده باشه
              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

              دیدگاه


                #22
                پاسخ : کدام وقفه زودتر اجرا میشود

                خیلی کامل بود. :nerd:
                [glow=beige,3,300] از همه دوستان تشکر میکنم. [/glow] :job:
                [hr]

                حالا یک سوال آیا میشه sram افزایش داد؟محدوده دارد؟
                الان داخل خود AT32 ما 2کیلو sram داریم چقدرش میتونیم به استک اختصاص بدیم؟

                شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
                [img width=400 height=100]http:///uploads/140623781981451.png[/img]
                [glow=green,2,100]یاحسین تشنه لب[/glow]

                دیدگاه


                  #23
                  پاسخ : کدام وقفه زودتر اجرا میشود

                  نوشته اصلی توسط عمو LED
                  حالا یک سوال آیا میشه sram افزایش داد؟محدوده دارد؟
                  الان داخل خود AT32 ما 2کیلو sram داریم چقدرش میتونیم به استک اختصاص بدیم؟
                  در رابطه با محدودیت حافظه ی sram :
                  بله محدوده . این محدودیت را اندازه ی یک رجیستر در پردازنده معیین میکنه : رجیستر AR یا Address Register
                  این رجیستر یک تعداد بیتی داره که در خانواده ی AVR این تعداد 16 بیت میباشد.
                  با 16 بیت شما میتوانید 2 به توان 16 حالت مختلف ایجاد کنید . یا 64 کیلو حالت مختلف. در اینجا ما با حافظه و خانه های حافظه سروکار داریم پس این حالت ها همون تعداد خانه های حافظه اند. چون خانه های حافظه ی sram در میکرو هرکدام یک بایت است ، پس حداکثر میتوانید 64 کیلو بایت حافظه sram داشته باشید.
                  البته این فقط محدودیته و برای افزایش حافظه در میکرو :
                  برخی از میکروها مثل MEGA128 این قابلیت را دارند(برای اطلاع بیشتر به صفحه ی 24 به بعد دیتاشیت این میکرو مراجعه کنید)
                  البته میکروهایی مثل مگا32 این قابلیت را ندارند.

                  برای تعیین سایز استک ، به دلیل اینکه نرم افزاری پیاده سازی میشه در کامپایلر های مختلف جایی برای تعیین مقدار استک وجود دارد.
                  به عنوان همانطور که جناب رستمی در پست شماره ی 10 همین تاپیک گفتند ، اینکار قابل انجامه:
                  نوشته اصلی توسط محمدصادق رستمی
                  سوال خوبی پرسیدی!
                  چون برای منم سواله که این آدرس ها کجا ذخیره میشن!
                  و تعدادشون رو چطوری باید تعیین کنیم!
                  اما خب دیتاشیت رو دقیق نگاه نکردم!
                  فقط یادمه در کدویژن در تنظیمات
                  دو گزینه داشت به نام:
                  heap size
                  stack size
                  (در IAR هم بود)
                  یکی بیاد ما رو روشن کنه، ممنون میشیم!
                  راستی در رابطه با اون سوال درمورد آدرس های منسوب به وقفه های مختلف ( که به اون میگن: Interrupt Vector Address Table ):
                  این جدول اول حافظه flash به طور ثابت وجود دارد .
                  مثلا دیتاشیت مگا32 صفحه ی 42 را بیارید :
                  یه جدول وجود داره ( جدول شماره 18 )
                  ستون دوم این جدول حاوی آدرس های وقفه های مختلفه .
                  در حالت عادی در برنامه، وقتی ما هیچ روتینی برای وقفه ی مورد نظر ننویسیم در این محل ها از حافظه ی فلش دستور پرش به آدرس صفر که همون reset است وجود دارد .(به خاطره همینه که میگن اگر احتمال رخ دادن برای وقفه ای وجود داره حتما یک روتین براش نوشته بشه وگرنه با وقفه خوردن میکرو ریست میکنه)
                  خوب پس با وقفه خوردن باتوجه به نوع وقفه یک پرش به این آدرسها صورت میگیره.وقتی شما در برنامه یک روتین برای وقفه ی مورد نظر مینویسید در آدرس منسوب به اون وقفه یک دستور پرش به آدرس روتینی که برای اون وقفه نوشتید ، قرار میگیره.
                  پس وقتی وقفه رخ میده پردازنده با دو پرش پشت سر هم به روتین وقفه میرسه.(البته فقط در پرش اول اون آدرس بازگشت و رجیسترها و... در استک سیو میشه)
                  راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                  کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                  نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                  http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                  انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                  دیدگاه


                    #24
                    پاسخ : کدام وقفه زودتر اجرا میشود

                    توضیحات خوبی در مورد وقوع وقفه از طرف دوستان ارائه شد که برای تکمیل و تصحیح بعضی از موارد، نکاتی را ذکر می کنم:

                    1- با وقوع هر وقفه، فلگ I بصورت خودکار پاک می شود و بنابراین امکان وقوع وقفه دیگری در این شرایط وجود ندارد. مگر اینکه در روتین وقفه مورد نظر، این فلگ با اجرای دستور اسمبلی sei یک شود که در این شرایط سایر وقفه ها می توانند وقفه جاری را متوقف کنند.

                    2- اولویت وقفه در AVR از نوع استاتیک است. یعنی در صورت درخواست وقفه بصورت همزمان توسط چند منبع، وقفه ای که دارای آدرس بردار کوچکتر در حافظه flash باشد پذیرفته می شود. اما اولویت از نوع دینامیک به معنای امکان تعریف چند نوع اولویت وقفه با قابلیت ایجاد وقفه در وقفه توسط اولویت های بالاتر، در AVR وجود ندارد ( در 8051 و XMEGA چنین قابلیتی وجود دارد).

                    3- بعد از پذیرش وقفه توسط cpu، فقط مقدار آدرس بازگشت بصورت خودکار در پشته (stack) ذخیره می شود و سایر رجیسترها باید توسط کدهای نوشته شده ذخیره سازی شوند. در کدهای تولید شده توسط برخی کامپایلرها این ذخیره سازی توسط دستورات push و pop انجام نمی شود. بلکه در فضایی به غیر از پشته با دستورات LD و ST و مانند آن ذخیره می شود. به همین دلیل به پشته ای که توسط Stack pointer به آن اشاره می شود و آدرس های بازگشتی در آن بصورت خودکار ذخیره می شود معمولا پشته سخت افزاری، و به محدوده جداگانه ای که برای ذخیره رجیسترهای کاری از آن استفاده می شود، پشته نرم افزاری گفته می شود.

                    4- در صورت عدم تعیین روتین وقفه در کدها و در صورت وقوع وقفه، در هرصورت پرشی به آدرس معین در حافظه flash انجام می شود و cpu به اصطلاح معطل نمی ماند. اما عملکرد برنامه در این شرایط بستگی به کدهایی دارد که در محل این آدرس و آدرسهای بعدی نوشته شده و این مسئله به ابزار برنامه نویسی بستگی دارد. ممکن است در محل این آدرس و آدرس های بعدی، کد معادل دستور اسمبلی nop نوشته شود که در این صورت این خطوط اجرا می شوند تا برنامه به ابتدای کد اصلی برسد که در این شرایط عملکردی مانند ایجاد reset خواهد داشت. اما ممکن است در آدرس های پائین تر، روتین وقفه دیگری در برنامه نوشته شده باشد که در این صورت بعد از رسیدن اجرای برنامه به آن محل، روتین وقفه مورد نظر اجرا می شود و شرایطی مانند reset ایجاد نخواهد شد.

                    5- برای درک بهتر موارد بالا، توصیه می شود عملکرد کد معادل اسمبلی برنامه نوشته شده در محیط هایی مانند AVRStudio مورد بررسی قرار بگیرد تا این مفاهیم به شکل روشن تری قابل درک باشد. واقعیت آن است که یک دلیل اصلی اینگونه سوالات، عدم درک کافی از عملکرد کدهای معادل اسمبلی و بسنده کردن به برنامه نویسی به زبان های سطح بالا است. در حالی که بدون درک کامل از ساز و کار cpu در این سطح نمی توان به درک کاملی از جزئیات عملکرد cpu در هر مرحله رسید.

                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      #25
                      پاسخ : کدام وقفه زودتر اجرا میشود

                      برای نمونه بگم که من خودم یک برنامه نوشتم به این صورت که.
                      وقتی ورودی از سطح 0به 1 رفت بره وقفه و روی 7seg عدد 1 نمایش بده.
                      وتا موقعی که یک هست که هیچی.
                      ولی وقتی دوباره صفر شد (اینجا وقفه کاری نداره فقط یهIF هست) بیاد و عدد 7seg کم کنه مثلا صفر.
                      این برنامه فقط میشه گفت حدود 24 ساعت دوام داره و بعد از اون میکرو ریست میشه!
                      شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
                      [img width=400 height=100]http:///uploads/140623781981451.png[/img]
                      [glow=green,2,100]یاحسین تشنه لب[/glow]

                      دیدگاه


                        #26
                        پاسخ : کدام وقفه زودتر اجرا میشود

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

                        چرا حالا برنامه یک بار درست اجرا میشه؟ میشه اینطور گفت که استک پر میشه این مشکل پیش میاد.چون من وقتی تو روتین برنامه چن call دارم اونارو برمیدارم برنامه خوبه ولی اون call ها که باشن برنامه یک بار خوبه ولی برای بعدا خیر!
                        شمر ۱۴۰۰سال پیش مُرد؛شمر زمانت بشناس.
                        [img width=400 height=100]http:///uploads/140623781981451.png[/img]
                        [glow=green,2,100]یاحسین تشنه لب[/glow]

                        دیدگاه

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