NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2285 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 14 از 14

موضوع: ترفند استفاده از سگ نگهبان

  1. #1
    کاربر فعال saeed210 آواتار ها
    تاریخ عضویت
    May 2010
    نام
    سعید
    نوشته ها
    320
    تشکر
    442
    تشکر شده 78 بار در 61 پست

    پیش فرض ترفند استفاده از سگ نگهبان

    سلام
    توی کتاب ره افروز گفته که از تایمر watchdog دو جور استفاده میکنند
    1- توی همه لوپ ها تایمر مستقیم ریست بشه ( که خودش بعدش گفته اگه توی یک لوپ گیر کنه تایمر هی ریست میشه و نمی تونه میکرو رو ریست کنه)
    2- یک متغیر تعریف کرده و توی هر حلقه یک بیتش رو ست کرده بعد یک جا بررسی کرده که اگه بیت های مورد نظر یک شده بود تایمر ریست بشه( مثل فلگ و چک کردن اون)

    حالا مثلا من یک جا از یک while استفاده کردم که اونجا صبر کنه تا یک کلید زده بشه خوب دوتا فرض
    1- اگه از روش دوم استفاده کنم شاید 1 ساعت کلید زده نشه اینحوری شرط بررسی اجرا نمیشه و میکرو هی ریست میشه
    2- اگه توی این وایل بیام تا وقتی کلید زده نشده هی تایمر رو ریست کنم اینجوری اگه توی این وایل گیر کنه که همش تایمر ریست می شه و نمی تونه میکرو رو نجات بده.

    حالا اگه یک وایل دیگه داشته باشم که مثلا یک کاری بکنه که 15 ثانیه طول میکشه اون وقت بازم مثل قبل نمی شه از این روش ها استفاده کرد
    شما چه روشی رو پیشنهاد می کنید

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    سلام

    بهترین روش برای استفاده از تایمر نگهبان اینه که شما از یکی از تایمرهای میکرو استفاده کنی تا توی سرریزش تایمر نگهبانو ریست کنه.

    مثلا فرض می کنیم شما تایمر نگهبانو روی 2048 تنظیم کردی. این یعنی این تایمر تقریبا هر دو ثانیه یکبار میکرو رو ریست می کنه. حالا برای اینکه در شرایط عادی این اتفاق نیفته شما میای مثلا با تایمر 1 زمان 1 ثانیه درست می کنی و هرموقع که تایمر 1 سرریز شد توی زیربرنامش تایمر نگهبانو هم ریست می کنی. اینجوری تایمر نگهبان هیچوقت به زمان 2 ثانیه نمی رسیه تا میکرو رو ریست کنه. مگر اینکه میکرو هنگ کنه و زیربرنامه تایمر 1 اجرا نشه.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  4. کاربران : 5 تشکر کرده اند از شما morteza_rk برای ارسال این پست سودمند:


  5. #3
    کاربر فعال saeed210 آواتار ها
    تاریخ عضویت
    May 2010
    نام
    سعید
    نوشته ها
    320
    تشکر
    442
    تشکر شده 78 بار در 61 پست

    پیش فرض

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

  6. #4
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    من اکثرا از همین روش استفاده می کنم. حتی اگه از هر سه تایمرم استفاده کرده باشم! (البته اکثر مواقع)

    مثلا فرض می کنیم من اومدم تایمر 1 رو طوری برنامه ریزی کردم که هر 300 میلی ثانیه یکبار سرریز میشه. حالا میام یه متغیر تعریف می کنم که هروقت تایمر 1 سرریز شد یک واحد زیاد میشه. حالا اگه این متغیر 4 یا 5 بار سرریز بشه یعنی 1200 یا 1500 میلی ثانیه گذشته ، پس الان وقته ریست کردن تایمر نگهبان هست.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  7. کاربران : 3 تشکر کرده اند از شما morteza_rk برای ارسال این پست سودمند:


  8. #5
    کاربر فعال saeed210 آواتار ها
    تاریخ عضویت
    May 2010
    نام
    سعید
    نوشته ها
    320
    تشکر
    442
    تشکر شده 78 بار در 61 پست

    پیش فرض

    بله حق با شماست خیلی ممنون از راهنماییتون

  9. #6
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

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

  10. کاربران : 2 تشکر کرده اند از شما esisafa برای ارسال این پست سودمند:


  11. #7
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

    داداش مرتضی عزیز. بعدا شما مطمئن هستی که اصلا این واچ داگ بالاخره ریست میشه.
    کوچیکتم احسان جان. والا من تا حالا پروژه ای نداشتک هنگ کنه خدارو شکر! این واچ داگ رو هم واسه محکم کاری میذارم.

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

    به نظر من (البته مطمئن نیستم) حتی اگه میکرو هنگ کنه یا در یک حلقه گیر کنه در هر صورت تایمر وقفه هاش اتفاق میافته
    نظر شما چیه
    منم همچین حسی دارم (چون کلاک تایمرها بطور جداگانه تامین میشه). ولی نکته ای که موجوده ما تایمر واچ داگ رو در وقفه ی تایمر ریست نمی کنیم! این کار توی برنامه ی اصلی انجام میشه.

    توی وقفه ی تایمر فقط یه یبت رو یک می کنیم. مثلا متغیر نوع بیت t1_flag رو یک می کنیم. حالا این وظیفه ی حلقه ی اصلی هست که با چک کردن این شرط ـیک بودن T1_flag) واچ داگ رو ریست کنه. ولی چون میکرو هنگه نمی تونه این شرط رو چک کنه! استنباط من اینه. فکر می کنم درسته.

    سایر عزیزان هم نظر بدن تا ببینیم روش درستی هست یا نه!
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  12. کاربران : 2 تشکر کرده اند از شما morteza_rk برای ارسال این پست سودمند:


  13. #8
    کاربر فعال saeed210 آواتار ها
    تاریخ عضویت
    May 2010
    نام
    سعید
    نوشته ها
    320
    تشکر
    442
    تشکر شده 78 بار در 61 پست

    پیش فرض

    توی میکرو اگه pointer روی یک خط بمونه و عوض نشه یعنی برنامه تا یک جا که اجرا شد وایسه و دیگه اجرا نشه و هیچ کاری انجام نشه می گویند میکرو هنگ کرده. درسته؟ بعد برای رفع اون Watchdog رو گذاشتند
    حالا اگه میکرو توی یک حلقه گیر کنه و لی دستورات توی اون رو اجرا کنه اما دیگه از حلقه بیرون نیاد به اینم هنگ کردن حالا...
    سوال اول: ابن جور هنگ کردن فقط بخاطر ضعف برنامه نویسی (یاهمون باگ نرم افزاری) ممکنه پیش بیاد؟ یا ممکنه بخاط نویز ها و این جور چیزا هم ای مشکل پیش بیاد؟
    سوال دوم:تایمر watchdog برای رفع این نوع هنگ کردن هم طراحی شده یا هدفش فقط مورد اول بوده؟

  14. #9
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

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

    حالا اگه میکرو توی یک حلقه گیر کنه و لی دستورات توی اون رو اجرا کنه اما دیگه از حلقه بیرون نیاد به اینم هنگ کردن حالا...
    این مورد هم ممکنه پیش بیاد. دلیلشو نمی دونم. باز هم مثل پخش کردن فیلم از روی cd که این بار یه بازه ی زمانی مثلا 0.5 ثانیه ای هی تکرار میشه.

    تایمر watchdog برای رفع این نوع هنگ کردن هم طراحی شده یا هدفش فقط مورد اول بوده؟
    تایمر واچ داگ هر دو مورد رو می تونه خنثی کنه.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  15. کاربران : 2 تشکر کرده اند از شما morteza_rk برای ارسال این پست سودمند:


  16. #10
    عضو جدید
    تاریخ عضویت
    Oct 2008
    نوشته ها
    6
    تشکر
    5
    تشکر شده 4 بار در 4 پست

    پیش فرض

    نقل قول نوشته اصلی توسط morteza_rk نمایش پست ها
    سلام

    بهترین روش برای استفاده از تایمر نگهبان اینه که شما از یکی از تایمرهای میکرو استفاده کنی تا توی سرریزش تایمر نگهبانو ریست کنه.

    مثلا فرض می کنیم شما تایمر نگهبانو روی 2048 تنظیم کردی. این یعنی این تایمر تقریبا هر دو ثانیه یکبار میکرو رو ریست می کنه. حالا برای اینکه در شرایط عادی این اتفاق نیفته شما میای مثلا با تایمر 1 زمان 1 ثانیه درست می کنی و هرموقع که تایمر 1 سرریز شد توی زیربرنامش تایمر نگهبانو هم ریست می کنی. اینجوری تایمر نگهبان هیچوقت به زمان 2 ثانیه نمی رسیه تا میکرو رو ریست کنه. مگر اینکه میکرو هنگ کنه و زیربرنامه تایمر 1 اجرا نشه.
    دوست عزیز هیچ موقع از این ساختار استفاده نکن
    به جرات میتونم بگم غیر منطقی ترین کار همینه
    چون مطمئن باش به احتمال زیاد اگه میکرو شما هنگ بکنه زیر روال اینتراپت اتفاق میفته
    این روش یک روشی هست که فقط بشه گفت من واتچ داگ را فعال کردم و کاری به کارکردش ندارم
    و مطمئن باش اگه این کار کارایی داشت خودشون یه زیر روال اینتراپتی برای واتچ داگ میذاشتند تا شما هم اذیت نشید و همه جا برنامه نخایید کد بنویسید
    ویرایش توسط spartan : 08-06-2013 در ساعت 00:51

  17. #11
    مدیر کل انجمن ها morteza_rk آواتار ها
    تاریخ عضویت
    Apr 2009
    نام
    مرتضی رحیمی کردمحله
    نوشته ها
    2,071
    تشکر
    2,376
    تشکر شده 2,899 بار در 1,263 پست

    پیش فرض

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

    البته به پست های بعدی دقت کنید می بینید که کاملتر توضیح دادم.

    چون مطمئن باش به احتمال زیاد اگه میکرو شما هنگ بکنه زیر روال اینتراپت اتفاق میفته
    یه بار دیگه هم میگم. زیرروال تایمر به احتمال قوی اتفاق می افته (چون کلاک تایمر جداگانه بدست میاد) ولی توی زیرروال فقط یک متغیر ، تغییر وضعیت میده (واچ داگ ریست نمیشه). حالا وظیفه ی برنامه اصلی اینه که با توجه به تغییر وضعیت این متغیر بیاد واچ داگ رو ریست بکنه یا نکنه. که نمی تونه ریست کنه. چرا؟ چون میکرو هنگه و اصلا برنامه ی اصلی اجرا نمیشه.
    .
    اَللّهُمَ صَلّ عَلی مُحَمَّد وَ آلِ مُحَمَّد وَ عَجّل الفَرَجَهُم


    وبلاگ شخصی من

  18. کاربران : 2 تشکر کرده اند از شما morteza_rk برای ارسال این پست سودمند:


  19. #12
    کاربر علاقه مند esmaeil57 آواتار ها
    تاریخ عضویت
    Nov 2008
    نوشته ها
    66
    تشکر
    46
    تشکر شده 14 بار در 7 پست

    پیش فرض

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

    پروژه های میکرو کنترلر محمدزاده - Part 3
    ویرایش توسط esmaeil57 : 30-06-2013 در ساعت 16:15

  20. کاربران : 2 تشکر کرده اند از شما esmaeil57 برای ارسال این پست سودمند:


  21. #13
    کاربر علاقه مند serjik آواتار ها
    تاریخ عضویت
    Jan 2013
    نوشته ها
    51
    تشکر
    39
    تشکر شده 23 بار در 19 پست

    پیش فرض

    نقل قول نوشته اصلی توسط morteza_rk نمایش پست ها
    توی اون پست جمله بندی من یکم بد بود. منظور من این بود که ما توی زیر روال تایمرها واچ داگ رو ریست نمی کنیم. بلکه یه متغیر اونجا می ذاریم و بعد توی برنامه ی اصلی با چک کردن اون متغیر دستور ریست واچ داگ رو میدیم.

    البته به پست های بعدی دقت کنید می بینید که کاملتر توضیح دادم.



    یه بار دیگه هم میگم. زیرروال تایمر به احتمال قوی اتفاق می افته (چون کلاک تایمر جداگانه بدست میاد) ولی توی زیرروال فقط یک متغیر ، تغییر وضعیت میده (واچ داگ ریست نمیشه). حالا وظیفه ی برنامه اصلی اینه که با توجه به تغییر وضعیت این متغیر بیاد واچ داگ رو ریست بکنه یا نکنه. که نمی تونه ریست کنه. چرا؟ چون میکرو هنگه و اصلا برنامه ی اصلی اجرا نمیشه.
    با سلام، بنده کاملاً با آقای spartan موافقم در صورتی که میکرو هنگ کند هیچ دلیلی ندارد که بردارهای وقفه هم از کار بیفتند، به نظرم قشنگتره که سیستم را چه از لحاظ سخت افزاری و چه از لحاظ نرم افزاری طوری طراحی کنیم که احتمال هنگ کردن را به صفر برسانیم، WDT خوب است اما استفاده کمتر ویا حتی نکردن خیلی بهتر(بلی می دانم در سیستمهای Critical عالی است، خودم فیضها برده ام)، WDT سیستم را بعد از هنگ کردن زنده می کند، اما بعد از ریست تازه دردسر شروع می شود آیا سیستم شما باید از نقطه ای که هنگ کرده ادامه کار بدهد یا مهم نیست ، HANDSHAKING ها و synchronize ها چگونه می شود؟

    اگر سیستمی طراحی کنید که هر ۵ دقیقه نیاز به مرحمت WDT داشته باشد؟!؟!؟ (فرض کنید هر ۵ دقیقه موبایلتان ریست شود).......
    در هر حلقه از if استفاده کنید حافظه کد را به هدر داده و سرعت اجرای برنامه را کم کردید که به نظر من کار جالبی نیست.

    بنده WDT را بصورت زیر طراحی می کنم:

    while(1)// external main loop
    }
    */
    i need reset WDT only here ** small code and flash memory usage also more SPEED in code execution

    /*
    ;resetWDTFlag

    scanKeyboard(); //no internal loop
    checkSerialPort(); //no internal loop
    .
    .
    .
    if i calculate above codes cycle machines or time execution will overflow the WDT */
    i need to reset WDT in second time
    /*
    ;resetWDTFlag
    .
    .
    scanPIOBits();//no internal loop
    main loop//{


  22. #14
    تازه وارد
    تاریخ عضویت
    Jun 2017
    نوشته ها
    2
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض

    افرین خیلی روش جالبیه .. باید امتحان کنم منم

موضوعات مشابه

  1. پاسخ: 3
    آخرين نوشته: 24-03-2013, 18:38

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •