kv_addr 0 28 августа, 2011 Опубликовано 28 августа, 2011 · Жалоба Скорее всего это фича. Все дело в том, что младшие регистры r0-r15 не могут быть использованы в некоторых инструкциях, например в ldi. Разработчики компилятора приняли соглашение, что загрузка констант в эти регистры происходит через рабочие регистры.Соответственно и чтение из портов В/В также выполняется через рабочие регистры. Все же, похоже, это - багофича. Потому как: #pragma vector= PCINT0_vect __interrupt void Pcint0(void) { Old_PINB = New_PINB; New_PINB = PINB; PORTB = Old_PINB; DDRB = New_PINB; } дает следующее: ST -Y, R16 // 28 Old_PINB = New_PINB; MOV R14, R15 // 29 New_PINB = PINB; IN R16, 0x03 MOV R15, R16 // 30 PORTB = Old_PINB; OUT 0x05, R14 // 31 DDRB = New_PINB; OUT 0x04, R15 // 32 } LD R16, Y+ RETI Почему-то здесь компилятор абсолютно не стесняется отсылать байт из регистра в порт без посредника. PS: Если попробовать любые порты ввода-вывода, для которых применимы не только IN и OUT, но также и LDS и STS, вывод идет без посредника, а ввод только через регистр-костыль. Что-то айаровцы в этом наглючили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 36 28 августа, 2011 Опубликовано 28 августа, 2011 · Жалоба Нет ничего проще, там же и все пояснения: Мне надо не это, а файл проекта. Т.е. то, что идет с расширением eww и ewp. Самое простое - закать в архив все целиком и приложить к сообщению. Это нужно затем, чтобы проверить, с какими опциями проходила компиляция. Дело еще и в том, что меня тоже в свое время раздражало, что компилятор всё передавливает через промежуточный регистр R16, но после того, как установила оптимизацию medium по size, компилировать стало нормально. Поэтому и с вашим проектом я хотела поиграть режимом оптимизации, тем более что вы мне так не ответили (сообщение #7), проверяли ли вы влияние оптимизации на этот эффект или нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bill 0 28 августа, 2011 Опубликовано 28 августа, 2011 (изменено) · Жалоба . Это не противоречит тому, что я написал выше. Младший регистр находится в правой части выражения, т.е. является источником данных. Изменено 2 сентября, 2011 пользователем IgorKossak Бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kv_addr 0 28 августа, 2011 Опубликовано 28 августа, 2011 · Жалоба Мне надо не это, а файл проекта. Т.е. то, что идет с расширением eww и ewp. Самое простое - закать в архив все целиком и приложить к сообщению. Это нужно затем, чтобы проверить, с какими опциями проходила компиляция. Дело еще и в том, что меня тоже в свое время раздражало, что компилятор всё передавливает через промежуточный регистр R16, но после того, как установила оптимизацию medium по size, компилировать стало нормально. Поэтому и с вашим проектом я хотела поиграть режимом оптимизации, тем более что вы мне так не ответили (сообщение #7), проверяли ли вы влияние оптимизации на этот эффект или нет. И это проблемы не составит. Попробуйте, посмотрите. По поводу оптимизации я вроде бы отвечал, перебрал все варианты. Бесполезно. Test.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 8 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба с вашим проектом я хотела поиграть режимом оптимизации Было бы интересно узнать: удалось ли Вам с помощью настроек проекта исключить этот эффект? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kv_addr 0 2 сентября, 2011 Опубликовано 2 сентября, 2011 · Жалоба Мне надо не это, а файл проекта. Т.е. то, что идет с расширением eww и ewp. Самое простое - закать в архив все целиком и приложить к сообщению. Это нужно затем, чтобы проверить, с какими опциями проходила компиляция. Дело еще и в том, что меня тоже в свое время раздражало, что компилятор всё передавливает через промежуточный регистр R16, но после того, как установила оптимизацию medium по size, компилировать стало нормально. Поэтому и с вашим проектом я хотела поиграть режимом оптимизации, тем более что вы мне так не ответили (сообщение #7), проверяли ли вы влияние оптимизации на этот эффект или нет. И как успехи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 36 2 сентября, 2011 Опубликовано 2 сентября, 2011 · Жалоба И как успехи? Никак. Получается то же, что и у вас: OUT нормально, IN через R16. По-видимому, это не лечится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kv_addr 0 2 сентября, 2011 Опубликовано 2 сентября, 2011 · Жалоба Никак. Получается то же, что и у вас: OUT нормально, IN через R16. По-видимому, это не лечится. Собственно говоря, иного и не ожидал. В любом случае это стало той последней каплей, которая перевесила часу весов в пользу написания критичного по времени прерывания на ассемблере. При наихудшем стечении обстоятельств ему отводилось менее 64 тактов. На си получалось при любых ухищрениях все же больше, на ассемблере в худшем случае не более 52 на все про все. Заодно поставил галочку на одной из "особенностей" EWAVR-а. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться