Внимание!!! Баг контроллера!
Плюсую за терпение
- Реклама
Это может объяснить то, что не работает счетчик внутри обработчика АЦП. (хотя 1 раз он срабатывает)Kavka писал(а): Bit 4 – ADIF: ADC Interrupt Flag
This bit is set when an ADC conversion completes and the Data Registers are updated. The
ADC Conversion Complete Interrupt is executed if the ADIE bit and the I-bit in SREG are set.
ADIF is cleared by hardware when executing the corresponding interrupt handling vector. Alter-
natively, ADIF is cleared by writing a logical one to the flag. Beware that if doing a Read-Modify-
Write on ADCSRA, a pending interrupt can be disabled. This also applies if the SBI and CBI
instructions are used.
А как объяснить то, что в 168-ой не работает счетчик в основной программе? ))
И как объяснить влияние на появление бага команд обращения к стеку? ))) Без них-то все работает. ))
К тому же, если сдвинуть момент срабатывания таймера в небольших пределах (чтобы прырывания не накладывались, но по-прежнему не работало) - то это описание не подойдет. ))
Плюс я Вам поставлю за пытливость ума и доскональность изучения ДШ. )) Но вопрос еще остается открытым.Вот и развеян ещё один баг контроллера.![]()
PS: Ставим плюсы, кому не жалко.
Последний раз редактировалось ИС-пытатель Сб мар 15, 2014 15:29:01, всего редактировалось 1 раз.
Т.е. заработало во всех случаях?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Реклама
Пока не проверял. В понедельник проверю. Я имел в виду, что для наложенных друг на друга прерываний эта конструкция актуальна. Но я "двигал" время срабатывания таймера, когда проверял в прошлый раз. Для блокировки счетчика диапазон OCRA0 был примерно от 12 до 19. (точно не помню). В понедельник проверю и отпишусь. И даже если заработает, все равно не очень понятно, причем здесь стек?... +блок счетчика в мейне Mega168...
Я думаю, что выражу мнение всех, кто следит за этой темой - подождём результатов проверкиИС-пытатель писал(а):В понедельник проверю.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Нужно переименовать тему из "Баг контроллера" в "Баг прямоты рук".
А я так надеялся, что они все-таки прямые... )))
Да, все работает. И там, и там. ))) Действительно, мой косяк! Вам, Kavka, ОГРОМНОЕ СПАСИБО за то, что нашли мою ошибку. (Не ожидал, что такое возможно) Буду теперь еще умнее.
P.S. А вообще все-таки странно, почему в 168-й блокировался счетчик в мейне.. И эти push/pop не дают мне покоя.. )
Да, все работает. И там, и там. ))) Действительно, мой косяк! Вам, Kavka, ОГРОМНОЕ СПАСИБО за то, что нашли мою ошибку. (Не ожидал, что такое возможно) Буду теперь еще умнее.
P.S. А вообще все-таки странно, почему в 168-й блокировался счетчик в мейне.. И эти push/pop не дают мне покоя.. )
В таких случаях учиться (получает новые знания) не только тот кто просит помощи, но и тот кто помогает - каждый получает свой опыт.ИС-пытатель писал(а):Нужно переименовать тему из "Баг контроллера" в "Баг прямоты рук".А я так надеялся, что они все-таки прямые... )))
Ну, и, конечно, те кто читает форум и мотает на ус.
Вы просто не представляете какие вообще глюки возможны при ошибках типа "race condition/data race". Понять логику происходящего бывает практически невозможно. Вы, видать, просто ещё не сталкивались с подобными вещами. При программировании многопоточных программ учёт таких ситуаций это очень важный аспект. Причём лучше делать это заранее, а то потом искать замаешься. Вы в одном МК запутались, а представьте сложный параллельный алгоритм работающий, скажем, в нескольких десятках потоков на 32 ядерном серваке - и что там где глючит...ИС-пытатель писал(а):P.S. А вообще все-таки странно, почему в 168-й блокировался счетчик в мейне.. И эти push/pop не дают мне покоя.. )
Было интересно.ИС-пытатель писал(а):Да, все работает. И там, и там. ))) Действительно, мой косяк! Вам, Kavka, ОГРОМНОЕ СПАСИБО за то, что нашли мою ошибку. (Не ожидал, что такое возможно) Буду теперь еще умнее.![]()
Рад, что помог!
Удачи!
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
А Вы и таким занимались? )) Там можно вечность ковыряться. )Kavka писал(а):
а представьте сложный параллельный алгоритм работающий, скажем, в нескольких десятках потоков на 32 ядерном серваке - и что там где глючит...![]()
При программировании многопоточных систем Вы заранее знаете, что идут параллельные процессы и предусматриваете это в коде. А в моем случае я просто этого не ожидал. Понадеялся на "авось". Дурная привычка просчитывать вплоть до такта когда пишешь на ассемблере и особо "не парится" об этом, когда пишешь на СИ.Kavka писал(а): При программировании многопоточных программ учёт таких ситуаций это очень важный аспект
P.S. Буду считать Вас своим сенсеем! )))
Занимался маленько. Имею представление.
Ковыряться вечно можно и в более мелких проектах не зная что искать.
Как я уже писал ранее, в данном случае, объектами, так сказать, внимания являются основная программа, прерывания и работа периферии. Достаточно, того чтобы рассматривать их как несколько параллельных взаимодействующих процессов различной природы (программных и/или аппаратных). Вот вам и почва для ошибок.
Про сенсея - не стоит. Но благодарность принимается.
Ковыряться вечно можно и в более мелких проектах не зная что искать.
Как я уже писал ранее, в данном случае, объектами, так сказать, внимания являются основная программа, прерывания и работа периферии. Достаточно, того чтобы рассматривать их как несколько параллельных взаимодействующих процессов различной природы (программных и/или аппаратных). Вот вам и почва для ошибок.
Про сенсея - не стоит. Но благодарность принимается.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


