اطلاعیه

Collapse
No announcement yet.

تایمر سگ نگهبان! یا watchdog timer

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

    تایمر سگ نگهبان! یا watchdog timer

    سلام خدمت دوستان عزیز
    مقدمه: همانطور که می دانید میکروهای stm32 دارای دو واچ داگ هستند. که یکی ساده (iwdg) و دیگری پیشرفته تر(wwdg) میباشد. و البته هرکدام مزایای خودشان را دارند، از جمله اینکه واچ داگ ساده دارای اسیلاتور مجزا از اسیلاتور اصلی میکرو هست و این باعث میشه در صورت fail شدن اسیلاتور میکرو بر روی این واچ داگ تاثیری نداشته باشد. از طرف دیگر واچ داگ پیشرفته امکاناتی دارد مثلاً دارای بازه زمانی (window) برای ریست کردن هست و یا دارای امکان گرفتن وقفه می باشد.
    حال با توجه به مطالب بالا سوالات من از قرار زیر می باشند.
    1- همانطور که اطلاع دارید بایستی در زمان مناسب کانتر واچ داگ را دوباره با مقدار مناسب لودکنیم تا از ریست شدن میکرو جلوگیری شود. اما به نظر من این کار وقتی برنامه پیچیده می شود سخت است. مثلا فرض کنید در while(1); برنامه، چند تابع فراخوانی شود. در هر کدام از این تابع ها بایستی محاسبه کنیم که چه زمانی کانتر را دوباره لود کنیم. این کار موقعی پیچیده تر میشود که قرار باشه از wwdg استفاده کنیم (چرا که حد بالا و پایین دارد و اگر زودتر از موعد لود کنیم هم موجب ریست میکرو می شود). حالا تازه بعد از این همه محاسبه و داستان فرض کنید بعداً قرار باشه که تغییری در برنامه رخ دهد. همه این محاسبات به هم میریزه و باید دوباره همه جا تغییراتی در خصوص زمان لود کردن کانتر ایجاد کنیم. برای این منظور راه حلی هست؟ یا همینه که هست؟
    البته این رو هم بگم که می دونم برای واچ داگ wwdg در رفرنس منوال گفته می تونید از وقفه اش برای لود کانتر استفاده کنید و با این کار خیلی کار راحت میشه و دیگه نباید نگران زمان بندی بود. اما این کار اصولی نیست و ممکنه حتی با اینکه میکرو هنگ کرده وقفه هنوز فعال باشه و دائم ریلود بشه و مانع از ریست میکرو بشه.
    2- سوال دیگری که برای من پیش اومده اینه که ظاهراً هنگامی که مقدار کانتر از 80 به 79 تغییر می کند ریست رخ می دهد و قبل از این ریست یعنی وقتی که به 80 می رسد وقفه اتفاق می افتد. حالا سوال من اینه که وقتی به وقفه می رود کانتر واچ داگ می ایستد و وقتی که خارج شد شروع به کم شدن دوباره می کند یا اینکه در حین وقفه هم کانتر کار خود را می کند ولی چون سرعتش از سرعت میکرو کمتر است عملاً اتفاقات درون زیربرنامه وقفه بسیار سریع اجرا می شوند.
    3- یکی از کاربردهای وقفه در واچ داگ ها رو این ذکر می کنند که با استفاده از آن می توان دیتا لاگینگ انجام داد تا متوجه شویم ایراد از کجاست و چه چیز باعث این شده که میکرو هنگ کند. منظور از دیتا لاگینگ ذخیره چه نوع اطلاعاتی است؟ آیا میشه با استفاده از آن متوجه شد که در کدام قسمت برنامه این مشکل به وجود اومده -مثلاً در چه تابعی به مشکل برخوردیم-؟
    پی نوشت: این سوال عالی بود و از مطالب مطرح شده تو اون تاپیک خیلی استفاده کردم -بخشی از مواردی که بالا گفتم هم از اونجا یاد گرفتم- رو همین حساب :
    Roholamin: 1+ for good question
    جدیدترین ویرایش توسط phoenix2000; ۰۷:۲۴ ۱۳۹۵/۰۵/۲۶.

    #2
    پاسخ : تایمر سگ نگهبان! یا watchdog timer

    من در حدی که به سوال شما جواب بدم بلد نیستم، اما فلسفه تعریف سگ نگهبان همین هست که تایمر معکوسی مدام بشمره و اگه ریلود نشه، فرمان ریست بده
    در مورد WWDG شخصی به نام Robert Thomas توی یوتیوب توضیح داده که البته من چون کارم با همین IWDG راه میفته چندان دقیق دنبالش نکردم
    کد HTML:
    https://www.youtube.com/user/BR549DBH/videos?view=0&sort=dd&live_view=500&flow=grid
    جدیدترین ویرایش توسط روح الامین; ۰۸:۴۷ ۱۳۹۵/۰۵/۳۰.

    دیدگاه


      #3
      پاسخ : تایمر سگ نگهبان! یا watchdog timer

      سلام چرا در ورژن2078بیسکام Watchdog رو ارور میگیره؟اپدیت کردم از دم تمام برنامه هایی که Watchdogداره رو ارور میگیره و کمپایل نمیکنه
      { خلاف قوانین - پاک شد }

      دیدگاه

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