Цитата(smac @ Feb 3 2010, 06:56)

Вызывать функции из обработчиков прерываний совсем не комильфо, но если очень хочется, тогда нужно обратить внимание на стек
Стек в порядке.. из других, намного тяжелее функций, вызов идет нормально. К тому же, (правда, не знаю, насколько это оптимально и как правильно работает в компиляторе CAVR) стек увеличен до 300 байт.
Цитата(Сергей Борщ @ Feb 3 2010, 10:00)

все операции с SystemBusy можно смело выкинуть - у вас нет разрешения вложенных прерываний, значит этот код не будет прерван. Покажите объявление currSysStatus. Добавьте в его еще конец одно поле и выводите его вместе с остальными данными. Если увидите там не 0 - у вас нехватка стека, надо переделывать программу, сокращая количество глобальных переменных. Какой смысл делать 20 преобразований АЦП, не используя их результат? Добавьте дерганье ногой в начале и конце этой функции, убедитесь, что прерывание таймера вызывает ее именно раз в 2 сек.
Кристалл не указан - у новых мег есть возможность запускать АЦП от событий таймера. Точне вы не получите. А тем более программно.
20 преобразований это на будущее) Прерывание точно вызывает раз в 2 секунды. Извините, забыл - ATMega16L. Добавил поле, и оно 0.. вот и сама структура
Код
typedef struct sysSettings {
uchar brightness;
uchar contrast;
uint fan1;
uint fan2;
uint temp_L;
uint temp_R;
uint Uplus;
uint Uminus;
uchar LAlarm;
uchar RAlarm;
uchar ACError;
uchar Mute;
uchar test;
} c_SystemSettings;
используется по всей программе, нигде проблем со стеком не замечено. Могу грешить только на adc_data, так как во всех переменных, изменяемых systemCheck() они одинаковые..
P.S. тьфу.. я же из прерывания запускаю преобразование АЦП. Смогу ли я получить прерывание по завершению преобразования, если сейчас нахожусь в другом, более низкоуровневом прерывании?
P.P.S. так как нету прерывания по завершению АЦП, решил следующим образом:
Код
...
currSysStatus.temp_R = ADCW; //вместо currSysStatus.temp_R = adc_data;
...
Прошу прощения за собственную глупость

И спасибо всем за советы, направили мозги в нужное направление)
Сообщение отредактировал Savrik - Feb 3 2010, 15:34