|
Сразу хочу сказать, что сейчас я обьявил локальную переменную - индекс цикла, как static и временно примирился. Времени нет на скрупулезный анализ. Но это не есть хорошо, потому что пока непонятно, и нет гарантии, что не вылезет потом какой-нибудь глюк.
По сути вопроса. Прошелся в SPY - работает. На железе виснет.
Виснет - не зацикливается. Такое ощущение, что после очередного вызова функции в теле цикла затираются локальные переменные, обьявленные в функции, в которой находится цикл. Вроде бы размер стек виноват. Но я устанавливал размер CSTACK от 0x20 до 0x700(!),
RSTACK тоже варьировал в широких пределах. Ничего не меняется.
Да, процессор - Mega128. Оптимизация отключена.
Флажок "Always do cross call optimization" сброшен.
Пробовал обьявлять переменную индекса как volatile - вообще не работает.
В других местах глюки не появились. Вот уже 3 часа гоняю на макете Ну ладно. Я, собственно, не жду, что мне скажут - в строке программы У меня вопрос - каким образом можно убедиться в переполнении стека, А IAR у меня 2.28.
E-mail:
info@telesys.ru
во всех режимах - все остальное работает.
Я сначала сам грешил на указатели. У меня обьявлен массив структур.
Вызываемая функция является членом структуры, и вызывается по индексу цикла. Я для пробы переделал структуру, исключив из нее функцию. А в цикл включил switch. Функцию вызывал примерно так:
for(index=0;index
switch (index )
{
case 0 :
foo0();
break;
//
//
case n :
foon();
break;
}
Результат совершенно аналогичный.
номер 128 нужно написать не так, а так. Просто хочется направление поиска. Кстати, текст программы сейчас около 5 тысяч строк (если выкинуть комментарии). А приводить куски исходников отвлеченно от всего остального текста, по моему, мало смысла.
или в отсутствии такового?
Ответы