Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено defined1 25 января 2004 г. 21:09
В ответ на: 1)зависает, означает ли что зацикливается в этом цикле, или падает в какой- нить trap по stack underflow ..? - что происходит 2)какова вероятность, что некорректной работой с указателями не портится память и пр. т.е. не появились ли глюки в другом месте? отправлено иа 25 января 2004 г. 20:25

Сразу хочу сказать, что сейчас я обьявил локальную переменную - индекс цикла, как static и временно примирился. Времени нет на скрупулезный анализ. Но это не есть хорошо, потому что пока непонятно, и нет гарантии, что не вылезет потом какой-нибудь глюк.
По сути вопроса. Прошелся в SPY - работает. На железе виснет.
Виснет - не зацикливается. Такое ощущение, что после очередного вызова функции в теле цикла затираются локальные переменные, обьявленные в функции, в которой находится цикл. Вроде бы размер стек виноват. Но я устанавливал размер CSTACK от 0x20 до 0x700(!),
RSTACK тоже варьировал в широких пределах. Ничего не меняется.
Да, процессор - Mega128. Оптимизация отключена.
Флажок "Always do cross call optimization" сброшен.
Пробовал обьявлять переменную индекса как volatile - вообще не работает.

В других местах глюки не появились. Вот уже 3 часа гоняю на макете
во всех режимах - все остальное работает.
Я сначала сам грешил на указатели. У меня обьявлен массив структур.
Вызываемая функция является членом структуры, и вызывается по индексу цикла. Я для пробы переделал структуру, исключив из нее функцию. А в цикл включил switch. Функцию вызывал примерно так:
for(index=0;index {
switch (index )
{
case 0 :
foo0();
break;
//
//
case n :
foon();
break;
}
Результат совершенно аналогичный.

Ну ладно. Я, собственно, не жду, что мне скажут - в строке программы
номер 128 нужно написать не так, а так. Просто хочется направление поиска. Кстати, текст программы сейчас около 5 тысяч строк (если выкинуть комментарии). А приводить куски исходников отвлеченно от всего остального текста, по моему, мало смысла.

У меня вопрос - каким образом можно убедиться в переполнении стека,
или в отсутствии такового?

А IAR у меня 2.28.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru