سلام
تو While(1) اینها رو دارم:
ابتدای برنامه تایع چک کردن کیپد رو درج کردم که هر دکمه ای از کیپد فشرده شد بفهمم و در کتابخونه هم هیچ وقفه سخت افزاری ندارم خیلی ساده 4 تا ردیف و نوبتی 1 میکنم و نوبتی 4 ستونش رو میخونم (خلاصه گفتم)
سناریوی اول یعنی فعال شدن DMA در حالت Circular اجرا میشه جهت دریافت پیامک از ماژول SIM800 و ادامه ی ماجرا جهت تحلیل و فرمان به خروجی و غیره که خود این سناریو تو یک شرط قرار داده شده.
سناریوی دوم رو گذاشتم بر این بنا که اگر دکمه ای از Keypad فشرده شد بره تو یک شرط در انتهای همون while(1) که اونجا وارد مد دستی بشیم و نور LCD فعال شه و غیره
مشکل اینجاست که گاهی بمحض ورود به مد دستی و گاهی بعد از مدتی برنامه از حلقه while (1) میپره بیرون تو main() و میکرو به Halt عظمی میره و تا ریست نکنم و دوباره بوت رو با ST Link Utility با ژانگولر بازی رو مدهای Core Reset و غیره بالا نیارم میکرو شناسایی نمیشه.
چی میشه که از حلقه while میپره بیرون در اون شرط ؟!
وقفه سخت افزاری؟
چند تا دارم که در سناریوی اول مثل ساعت بدون مشکل کار میکنند و الویت بندی شده هم هستند!
LCD 128X64 Graphical KS108 Driver هستش که کتابخونش رو خریدم از سایتی و بارها در نرم افزارهای مختلف ازش استفاده کردم بدون مشکل !
Keypad 4x4 هستش و کتابخانش خیلی پیچیدگی نداره و بدون مشکل کار میکنه نمیدونم چی میشه در اون قسمت دوم که میکرو از حلقه while خارج میشه با ورود به اون که البته گاهی اوقات مدتی طول میکشه و بعد از مدتی این اتفاق میفته در زیر منوها …
بدیش اینه که نقطه ی خاصی نیست که بگم به اونجا که رسیدم اینطوری میشه یک وقتها به محض ورود به سناریوی دوم گاهی هم بعد از چند دقیقه کار کردن و ورود به زیر منوها !
(معمولا زمانی هالت میشه که دستم رو دکمست و در حالت Debug mode نرم افزار Keil هستم)
مدل میکرومم بالا نوشتم ! اورجیناله !
چجور میشه اینجا متن انگلیسی رو چپ پین نوشت؟ نتونستم وگرنه شبه کد مینوشتم…
باتشکر
