Хм... Я тоже использую вывод отладочной информации в терминал - уж очень это просто и удобно. Правда использую для этого стандартный сишный printf или его модификацию printf_P. Правда совершенно недопустимо делать такой вывод в прерываниях - убедился наступив неоднократно на грабли. Здесь верную мысль подал sla000:
Цитата(sla000 @ Dec 12 2007, 07:39)

Я в таких случаях использую буфер - массив байт на 50, который заполняю отладочной информацией в критических к времени выполнения участках кода, а потом, когда этот участок кончится выстреливаю в ком-порт все данные из этого буфера.
Как я сам до этого не додумался...
Разного рода ICE-отладчикам я не доверяю, вернее не люблю их. Отладить вычислительный алгоритм можно и на комповской программе при помощи обычного сишного компилятора. Так недавно я писал сравнительно большой код для канального уровня ком-порта после чего его перенес на контроллер, внеся небольшие изменения в хидере исходника.
Тем не менее пару раз делал некое подобие пошаговой отладки через терминал:
Код
uint8_t break_flag = 0;
void break_point(char *message)
{
break_flag = 0;
if (message != 0)
printf("BREAK_POINT: %s\n",message);
while(!bit_is_set(break_flag,0));
}
SIGNAL(SIG_UART_RECV)
{
uart_rec(); // = void uart_rec(void) {while (!(UCSRA & (1<<RXC)) ); return UDR; }
break_flag = 1;
}
Потом в нужном месте кода вставляю строчку
Код
break_point("Break point");
на которой исполнение останавливается, ожидая нажатия кнопки на клавиатуре.
Да, это можно делать, только когда код не загроможден другими задачами, и применимость такого метода его крайне узкая. Тем не менее, я так вполне успешно отлаживал генерацию JTAG сигнала с пошаговым его анализом.
Сообщение отредактировал Aesthete Animus - Dec 14 2007, 08:30