Цитата(kovigor @ Sep 15 2011, 20:06)

А тут не может быть какой-то хитрой завязки ? Просто эта фраза очень странно звучит.
Еще идея: попробуйте повыключать некоторые обработчики прерываний, насколько это возможно, и посмотрите, что будет. Вообще, почти наверняка дело в одном из обработчиков.
Да, и еще. Это может быть ошибка в использовании типов. Например, вы по ошибке пишете в unsigned char 16-разрядное число.
Нет, просто вывожу в ключевых точках параметры.
Из прерываний только таймер - работает как таймер с жёсткой фиксацией ( т.е. пока не сработает других действий не выполняется - чтото типа задержки только с программным опросом ноги или флага до окончания тайминга) , сброс по внешнему - срабатывает от RTS раз в час, ну и UART, в котором вообще ничего мудрёного... Выключить можно , но тогда программа вообще вся собьётся...
Я вот какую особенность подметил у меня по тексту порядок следования функций такой
1void modem_control(void)
2void protokol_set(unsigned char KEY)
3void main(void)
{
//здесь объявляется переменная которая идет параметром в функцию 2 и которая кстати и "ломается".
}
Так вот - если ошибка пропадает в 1 - то появляется ниже во 2 или 3й. Очень похоже на указатель...Завтра точно их поковыряю. Может быть даже частично перейду на использование нумерованых массивов, правда придётся тогда передавать данные через глобальные переменные
Цитата
Ну и последнее. Как показывает мной многолетний опыт, самые сложные и трудноуловимые ошибки почти всегда имеют до смешного простые причины. Так что ...

Дааа, это есть проблема №1 , у меня всегда так... Видать и тут также
Зы Спасибо за наводящую помощь, будем копать...
ЗЗЫ А всё таки не может это быть в компиляторе или оптимизации дело ?
Сообщение отредактировал MKdemiurg - Sep 15 2011, 17:25