Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Подлый ИАР(+)

Отправлено Quasy 14 сентября 2007 г. 11:50



Навеяло недавним вопросом на сахаре насчет изменения тетрады порта.
Простенькая ситуация. Оптимизатор ИАР (3-10 или 4-21) жжот (потеря одного ANDI):
2 int main( void )
\ main:
3 {
4 char qq=PORTC;
\ 00000000 B315 IN R17, 0x15
5 char tt=PINE;
\ 00000002 B101 IN R16, 0x01
6
7 qq |= ((qq&0xf0)|(tt&0x0f));
8 PORTС = qq;
\ 00000004 700F ANDI R16, 0x0F
\ 00000006 2B01 OR R16, R17
\ 00000008 BB05 OUT 0x15, R16
9
10 return 0;
\ 0000000A E000 LDI R16, 0
\ 0000000C E010 LDI R17, 0
\ 0000000E 9508 RET
11 }

Лечение ситуации:
- делать в разных строках (это понятно и почти всегда выручает),
- делать все без переменных,сразу на портах, или переменные volatile (но коипилер предупредит насчет behavior).
- поменять местами операнды (вот это круто).




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 97:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru