реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ошибка операции __swap_nibbles ?
SZ0
сообщение Aug 22 2008, 12:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



IAR C/C++ Compiler for AVR 5.11B/W32 (5.11.2.5)
В следующем коде __swap_nibbles выполняется ошибочно:

Код
    132           buffer = byte;    //передача младших битов 3-0
   \   00000034   2F10               MOV     R17, R16
    133           __swap_nibbles(buffer);//обмен битов
   \   00000036   2F21               MOV     R18, R17
   \   00000038   9522               SWAP    R18
    134           buffer &= lcd_mask;    //выделим старшие биты 7-4 сбросив остальные
   \   0000003A   7F10               ANDI    R17, 0xF0
    135           LCD_PORT &= ~lcd_mask;    //сбросим биты на шине данных ЖКИ
   \   0000003C   91200105           LDS     R18, 261
   \   00000040   702F               ANDI    R18, 0x0F
   \   00000042   93200105           STS     261, R18


Как видим, обмен битов происходит в другом регистре. А buffer используется дальше, нисколько не изменённый swap. Как исправить такое?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 22 2008, 13:04
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Не вижу, где используется buffer.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
SZ0
сообщение Aug 22 2008, 13:16
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(AHTOXA @ Aug 22 2008, 19:04) *
Не вижу, где используется buffer.


Код
    136           LCD_PORT |= buffer;    //вывод 3-0 битов на шину ЖКИ
   \   00000046   91200105           LDS     R18, 261
   \   0000004A   2B21               OR      R18, R17
   \   0000004C   93200105           STS     261, R18
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 22 2008, 13:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



А, Вы уверены что __swap_nibbles() - это процедура, а не функция? Наверное, нужно написать
buffer= __swap_nibbles(buffer);
Go to the top of the page
 
+Quote Post
SZ0
сообщение Aug 22 2008, 14:12
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(Палыч @ Aug 22 2008, 19:30) *
А, Вы уверены что __swap_nibbles() - это процедура, а не функция? Наверное, нужно написать
buffer= __swap_nibbles(buffer);


Вы правы, функция lol.gif

Можно ещё так сделать:

Код
    134           buffer = buffer << 4;
   \   00000036   9512               SWAP    R17
   \   00000038   7F10               ANDI    R17, 0xF0
    135          
    136           buffer = __swap_nibbles(buffer);
   \   0000003A   2F21               MOV     R18, R17
   \   0000003C   9522               SWAP    R18
   \   0000003E   2F12               MOV     R17, R18
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Aug 25 2008, 10:49
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(SZ0 @ Aug 22 2008, 18:12) *
Вы правы, функция lol.gif

Можно ещё так сделать:

Код
    134           buffer = buffer << 4;
   \   00000036   9512               SWAP    R17
   \   00000038   7F10               ANDI    R17, 0xF0
    135          
    136           buffer = __swap_nibbles(buffer);
   \   0000003A   2F21               MOV     R18, R17
   \   0000003C   9522               SWAP    R18
   \   0000003E   2F12               MOV     R17, R18


Ух ты. А без двух лишних mov сделать никак? Типа swap r17 07.gif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Aug 25 2008, 13:52
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Maik-vs @ Aug 25 2008, 13:49) *
Ух ты. А без двух лишних mov сделать никак? Типа swap r17 07.gif
Подозреваю, что нужно включить оптимизацию...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01418 секунд с 7
ELECTRONIX ©2004-2016