Відповідь: Переповнення стека?
Той прикладі коду що я привів це не той в якому у мене проблема (хоча що то в такому дусі), я його привів для того, щоб мені допомогли определьть скільки там вкладень! Замінювати while на переривання, в цьому циклі досить багато операцій виконується, наприклад чекаємо відповіді з USART і Парс прийняті дані і т.д. Ви пропонуєте це в переривання засунути?
У циклі while (1) у мене передбачених вихід за переповненням таймера. Я ж не питав в цьому питанні чому вісни функція, я ж написав що майже впевнений що через переповнення стека, і просив пояснити що означає переповнення стека.
Хочу уточнити мої питання:
1) який ступінь вкладеності в моєму прикладі?
2) переповнення стека, це перевищення якого ступеня вкладеності і все?
3) яка допустима ступінь вкладеності?
4) який біт відповідає за скидання в разі переповнення стека?
5) якщо не включений сторожовий таймер, і не встановлено біт скидання по переповнення стека, контролер вісни?
Хотілося б трохи поправити мій приклад?
Той прикладі коду що я привів це не той в якому у мене проблема (хоча що то в такому дусі), я його привів для того, щоб мені допомогли определьть скільки там вкладень! Замінювати while на переривання, в цьому циклі досить багато операцій виконується, наприклад чекаємо відповіді з USART і Парс прийняті дані і т.д. Ви пропонуєте це в переривання засунути?
У циклі while (1) у мене передбачених вихід за переповненням таймера. Я ж не питав в цьому питанні чому вісни функція, я ж написав що майже впевнений що через переповнення стека, і просив пояснити що означає переповнення стека.
Хочу уточнити мої питання:
1) який ступінь вкладеності в моєму прикладі?
2) переповнення стека, це перевищення якого ступеня вкладеності і все?
3) яка допустима ступінь вкладеності?
4) який біт відповідає за скидання в разі переповнення стека?
5) якщо не включений сторожовий таймер, і не встановлено біт скидання по переповнення стека, контролер вісни?
Хотілося б трохи поправити мій приклад?
в оболонці компілятора поставте галочки генерувати т.зв. map file.
Там вивчіть дерево викликів
Ніяк, вірніше побудувати справжній (а не те, що привиділося компілятору) сall graph, потім використовувати дані з .map і визначити перекриття. Відразу кажу, необхідність виникає вкрай рідко, якщо граф побудований вірно компілятор лається про нестачу пам'яті.
Стеків при виконанні функції, строго кажучи два (можуть лежати в перемішку, але це не Ваш випадок).
PIC18 - допустима глибина вкладень в 1 пуш / поп стек - 31 і це ер-стек. У Вас глибина вкладеності 3. Для авто змінних, судячи з усього (offset), використовується модель static overlay.
Простіше все, напевно. Що за "умова" для виходу з циклу? Може воно бути до «не волатйл" компілятором соптімізіровано?
Свою проблему я вирішив, справа дійсно було не в стеці. Зараз хочу просто по докладніше дізнатися що це за звір, і на скільки серйозно до нього потрібно поставитися і загрожує це мені в моєму випадку.