Проблема следующая (на сколько я понял):
Есть главный цикл работы программы:
Код: Выделить всё
unsigned long volatile int my_var= 0;
int main( void )
{
...............
while (1) {
printr(my_var*60); // Берём глобальную переменную, работаем с ней, и выводим на LED
}
}Код: Выделить всё
ISR(TIMER0_OVF_vect) // Timer0
{
my_var++; // Считаем +1
}
а этот арес ошибки первый - не открывается

На сколько я понимаю - проблема в том что в данный момент начало выполнятся printr(my_var*60);, и в этот момент вылезло прерывание, и начало считать "занятую" переменную...
Как от этого избавиться?
Из того что нашёл - это сделать переменную с типом volatile, но она и так с ним - вылетает(
думал сделать cli(); ... sei(); но не получится, учитывая что с данной переменной вопервых - работа идёт в 5-7 местах, а во вторых - нужно ОБЯЗАТЕЛЬНО считать её, не пропустив ни разу ни одного такта (атомарные часы, если будет выключатся через cli() - пропустит такты - собьются часы)
У кого какие идеи? или вообще проблема не в этом?
и да, почему RAM так по странному распределена, не много в начале, и не много в конце, остальное пустует... какая логика её заполнения?





