Цитата(smalcom @ Apr 24 2008, 20:15)

да, кстати, проблема была в том, что прогу скомпилил новым набором утилит - gcc-4.3.0, binutils-2.18, glibc-1.6; раньше были gcc-3.4.0, binutils-2.17, glibc-1.4
И всё-таки, как это может влиять не на "тотальное" зависание, а на "1 из 10".
Что касается разницы между 3.х и 4.х, то 4.х гораздо агрессивнее оптимизирует работу с не-volatile-переменными, скажем,
Цитата
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned cnt;
unsigned foo(void)
{
int tmp;
uint8_t sr = SREG;
cli();
tmp = cnt;
SREG = sr;
return tmp;
}
Успешно компилируется в
Цитата
foo:
/* prologue: frame size=0 */
/* prologue end (size=0) */
in r24,95-0x20
/* #APP */
cli
/* #NOAPP */
out 95-0x20,r24
lds r24,cnt
lds r25,(cnt)+1
/* epilogue: frame size=0 */
ret
Т.е. по сути в
Цитата
uint8_t sr = SREG;
cli();
SREG = sr;
return cnt;
Что вполне соответствует стандарту

, cnt тоже надо объявить volatile, чтобы сохранился интересующий порядок операций.
Цитата(Flasher @ Apr 26 2008, 00:08)

Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания.
Удивляюсь

Вот чего не знал, того не знал...
И как дурак уже 15 лет на столе держу в качестве источника для отлаживаемых плат компьютерные блоки питания

Если место позволяет - часто даже на плате кроме штатного разъёма ещё штыри заложены под флопарный разъёмчик, чтобы переходник не был нужен.
И ничего не "рестартует в лучшем случае", включая сам комп, внутри которого стоит такой же блок питания. И изделия серийные выпускаются в компьютерном корпусе и с компьютерным блоком питангия - там и микроконтроллеры, и ПЛИС, и АЦП горстями (ну да, по питанию АЦП фильтры дополнительные).
Может это? Прокладочку поменять?