سلام ...
وقتی SRAm میکرو پر میشه(برای من پشته زیاد میشه) میکرو ریست میشه
حالا چه جوری میتونیم بفهمیم SRAM پر شده حالا یا نزاریم ریست بشه یا چیزه دیگه راهی داره؟
يعني از ظرفيتي كه براي پشته ها داري ، چيزاي بيشتري تو پشته مي ذاري ؟
اگر اينطوريه كه بايد فضاي پشته ها رو زياد كني.
چطور استدلال مي كني كه SRAM پر مي شه؟ مگر چيكار مي كني ؟
(۳۰-آذر-۱۳۹۱, ۱۴:۱۷:۴۳)sharin نوشته است: [ -> ]يعني از ظرفيتي كه براي پشته ها داري ، چيزاي بيشتري تو پشته مي ذاري ؟
اگر اينطوريه كه بايد فضاي پشته ها رو زياد كني.
چطور استدلال مي كني كه SRAM پر مي شه؟ مگر چيكار مي كني ؟
یه برنامه ای دارم که از الگریتم بازگشتی استفاده میکنه اگه خیلی پیچیدش کنم(مراحل زیاد شه) ریست میشه میکرو
حالا مشکل من این نیست من می خوام بفهمم پر شده که بدونم حالا که ریست شده مال این بوده
حتما شاخه تو شاخه زياد دارهه آرهه ؟!
ميزان شاخه تو شاخه رفتن فكر مي كنم محدود باشه . تعداد پرش هاي تو در تو چندتا استفاده كردي ؟
احيانا تو برنامه از وقفه هم استفاده كرديد؟
(۳۰-آذر-۱۳۹۱, ۱۵:۵۳:۳۹)sharin نوشته است: [ -> ]حتما شاخه تو شاخه زياد دارهه آرهه ؟!
ميزان شاخه تو شاخه رفتن فكر مي كنم محدود باشه . تعداد پرش هاي تو در تو چندتا استفاده كردي ؟
احيانا تو برنامه از وقفه هم استفاده كرديد؟
بله زیاده وقفه هم داره دیگه وا ویلا
حالا روشی میدونید که قبل از ریست شدن بفهمیم پر شده
خوب ، وقتي مي ري به روال وقفه ، هر پرشي نمي توني انجام بدي !
چون روال وقفه كمي خاص تر هست. مثلا در اين روال نبايد به ليبلي پرش كنيد ، از سابروتين و تابع فكر كنم مي شه استفاده كرد ، اما باز ممكنه در شرايطي محدوديت پيش بياد. بهترهه توي وقفه پرش نداشته باشيد و روالش كوتاه باشه.
SRAM فكر نمي كنم پر بشه ، احتمال مي دم در مورد شما آدرس return گم مي شه.
اگر مي تونيد برنامه تون رو ديباگ كنيد تا اشكالش دراد.
در كل ميكرو در چند صورت مي تونه ريست بشه ، WD و Reset خارجي و چه و چه ... .
با اتفاق افتادن اينها ، flag مربوطه 1 مي شه و دليل ريست اينطوري فهميده مي شه ، منتها پر شدن SRAM جزءشون نيست !
بعيد مي دونم SRAM پر بشه ...
موفق باشيد.
(۳۰-آذر-۱۳۹۱, ۲۲:۰۴:۵۵)sharin نوشته است: [ -> ]خوب ، وقتي مي ري به روال وقفه ، هر پرشي نمي توني انجام بدي !
چون روال وقفه كمي خاص تر هست. مثلا در اين روال نبايد به ليبلي پرش كنيد ، از سابروتين و تابع فكر كنم مي شه استفاده كرد ، اما باز ممكنه در شرايطي محدوديت پيش بياد. بهترهه توي وقفه پرش نداشته باشيد و روالش كوتاه باشه.
SRAM فكر نمي كنم پر بشه ، احتمال مي دم در مورد شما آدرس return گم مي شه.
اگر مي تونيد برنامه تون رو ديباگ كنيد تا اشكالش دراد.
در كل ميكرو در چند صورت مي تونه ريست بشه ، WD و Reset خارجي و چه و چه ... .
با اتفاق افتادن اينها ، flag مربوطه 1 مي شه و دليل ريست اينطوري فهميده مي شه ، منتها پر شدن SRAM جزءشون نيست !
بعيد مي دونم SRAM پر بشه ...
موفق باشيد.
تو وقفه که پرش ندارم
بله به احتمال زیاد ادرس گم میشه
ریست هم که مال خود میکرو نیست فکر میکنم خود کامپایلر یه هم چین چیزی رو پیاده میکنه
حالا من مشکلی با هیچ کدوم ندارم مشکل من اینه وقتی این مشکل پیش میاد میکرو از اول شروع به کار میکنه که همه چیز رو خراب میکنه من میخوام وقتی این مشکل پیش میاد هیچ کاری انجام نشه! حداقل از اول شروع نکنه!
ببینم حتما با بسکام برنامه نوشتی؟
(۰۱-دى-۱۳۹۱, ۱۰:۵۹:۱۸)h.unique نوشته است: [ -> ]ببینم حتما با بسکام برنامه نوشتی؟
اگه با بسکام نوشته بودم که از برنامه نویسی سیر می شدم
نقل قول: تو وقفه که پرش ندارم
بله به احتمال زیاد ادرس گم میشه
ریست هم که مال خود میکرو نیست فکر میکنم خود کامپایلر یه هم چین چیزی رو پیاده میکنه
حالا من مشکلی با هیچ کدوم ندارم مشکل من اینه وقتی این مشکل پیش میاد میکرو از اول شروع به کار میکنه که همه چیز رو خراب میکنه من میخوام وقتی این مشکل پیش میاد هیچ کاری انجام نشه! حداقل از اول شروع نکنه!
به همين خاطر مي گم ،برنامه رو ديباگ كنيد تا ببينيد مشكل از كدوم خط دستور هست.
اگر در وقفه پرش نداريد پس آدرس گم نمي شه. اما اگر فضاي Stack كافي نباشه ، مي تونه over write بشه و ...
ممكنه به صورت default WD فعال باشه ؟! ( توسط كامپايلر؟ )
چون برنامه از اول شروع مي شه كمي مشكوكه ...
اگر آدرس return گم بشه ، فكر نمي كنم ميكرو ريست بشه ، اما كاراي عجيب غريب مي كنه و ممكنه شبيه هنگ باشه ، چون در زمان return يه مقدار اشتباهي به ريجستر Program counter فرستاده مي شه و برنامه از خط اشتباهي از سر گرفته مي شه.
دقت كن كه R1~R16 تا ريجستر عمومي بيشتر نداري و ممكنه اشتباه اينا رو مقدار دهي كني.( يا توسط كامپايلر اشتباه مقدار دهي بشه )
البته بايد بفهمي مشكل از روتين وقفه هست يانه.
هر سري يه قسمت از برنامه ات رو غير فعال كن و ببين با غير فعال بودن چه قسمتي از برنامه ، ميكرو كارش رو درست انجام مي دهه ...
اگر خودت فهميدي مشكل از كجاست و چي باعث مي شه برهه خط اول. مي توني خودت ريجستر PC مقدار دهي كني و بري به خطي كه مد نظرت هست !
در كل از هر چيزي مي تونه باشه ،نسخه ي واحد نمي شه پيچيد. يا بايد ديباگ كني ، يا با آزمون و خطا اشكال رو پيدا كني ، كه چون خودمم ديباگر ندارم ، معمولا با تست هاي مختلف اشكال برنامه رو پيدا مي كنم.
اگر فهميدي مشكل از چي بودهه ، خبرش رو بدهه.
موفق باشي.
برنامه زیر رو در نطر بگیرید دقیقا مشکل من همینه! (دوبار کلید رو فشار بدید)
دانود برنامه
برای مشکل خودم یه راه حلی پیدا کردم چون نرم افزاری ریست میشه ریجیستر مربوط به ریست ها صفر میمونه و من با استفاده از این قضیه از شروع مجدد جلوگیری میکنم ولی دلیل این اتفاق که باعث ریست میشود همچنان بر من پوشیده است ...