Цитата(AHTOXA @ Jun 12 2008, 22:20)

А я компилировал код, приведённый в посте №9, там нет volatile

Теперь всё понятно, вопрос снят

Да, это я посоветовал попробовать убрать volatile т.к. на версиях 3.4.? оно
вызывало варнинг и небольшое изменение кода.
Т.к. я пока сижу на 3.4.6 проблем с регистровыми переменными не наблюдалось,
но ведь когда-то все равно придеться переползать на что-нить поновее хотя бы
из-за поддержки новых чипов... поэтому и пытаюсь понять на какую версию
стоит переползать (отказываться от регистровых переменных очень не хочется, иногда это
дает выигрыш в разы...)
Потестировал немного 4.2.2 , вроде все корректно, правда выигрыша по оптимизации
я не получил по сравнению с 3.4.6, где-то один быстрее где-то другой,
по сумме, 3.4.6 на моих проектах оказался даже чуть быстрее, но разница не принципиальна.
Единственный не до конца приятный/понятный момент при работе с регистровыми переменными
на 4.2.2 это при чтении/записи IO в/из регистровой переменной:
Код
volatile register unsigned char pinb asm("r2");
........
//запись
PORTB = pinb;
; 8e: 28 ba out 0x18, r2; 24
// чтение
pinb = PINB;
; a8: 86 b3 in r24, 0x16; 22
; aa: 28 2e mov r2, r24
Почему при записи он писал прямо а при чтении читал в r24 ?
3.4.6 обходился без r24