Цитата(forever failure @ Dec 1 2008, 11:00)

В первом случае в условии проверка на ненулевое значение, а во втором - на положительное. Может в этом разница ?
Да собственно говоря в if можно и на равенство 0 проверять, асм будет такой же (постоянство радует

).
Меня просто напрягает, свободное обращение с регистром уарта UDR. Ведь и запись и чтение этого регистра запускают определённые физические процессы в уарте. А тут захотелось ему, он взял и вычитал значение из этого регистра в R24. Неприятное явление.
ЗЫ В IAR и тот и другой случаи работают нормально.
Цитата(Непомнящий Евгений @ Dec 1 2008, 11:09)

? : возвращает результат, if else - нет. Больше вроде бы ничем.
Собственно в строчке LDS R24,0x00CE , насколько я понял, и возвращается результат операции UDR1 = data.
0x00CE это адрес UDR регистра, я не понимаю как это строчка может сообщать о результате операции.

Цитата(_Pasha @ Dec 1 2008, 11:10)

Нескромный вопрос: tty у Вас volatile? Просто не могу себе представить ситуацию, когда селектором устройств является не volatile переменная...
К моему стыду действительно не volatile. Эта переменная часть структуры, описывающей уарт
Код
typedef struct
{
/** \brief tty - One of the defines UART_CHANNEL_0 or UART_CHANNEL_1.
Which defines a number of UART. */
uint8_t tty;
......
.....
.....
} UartDescriptor_t;