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

 
 
> Обращение к порту из gcc ?, Как заставить компиллировать в "IN R16,0x10" а не
Григорий2000
сообщение Mar 28 2008, 08:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 13-03-06
Пользователь №: 15 210



Как заставить компиллировать в gcc-avr чтение порта
"IN R16,0x10",(как в IARe)
а не
" LDI R30,0x30
LDI R31,0x00
LDD R24,Z+0 "
в последней версии все inp();
и inb();
не работают(не приводят к ожидаемому эффекту)
есть ведь какое-то волшебное слово которое хочет увидеть gcc-avr? что-бы читать порт быстро и красиво

Сообщение отредактировал Григорий2000 - Mar 28 2008, 08:31
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Григорий2000
сообщение Mar 28 2008, 10:50
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 77
Регистрация: 13-03-06
Пользователь №: 15 210



сорри.
В одном случае
код

...
if (answer == 0)
{
in=(PIN_DAT_IN) << 2;
...
компилируется в

249: if (answer == 0)
LDS R24,0x006A Load direct from data space
TST R24 Test for Zero or Minus
BREQ PC+0x02 Branch if equal
RJMP PC+0x0095 Relative jump
252: in=(PIN_DAT_IN) << 2;
LDI R30,0x30 Load immediate
LDI R31,0x00 Load immediate
LDD R24,Z+0 Load indirect with displacement
LSL R24 Logical Shift Left
LSL R24 Logical Shift Left
STD Y+2,R24 Store indirect with displacement

в другом случае(IAR 4.20)
в
249: if (!answer)
LDS R16,0x00B0 Load direct from data space
TST R16 Test for Zero or Minus
BREQ PC+0x02 Branch if equal
RJMP PC+0x005D Relative jump
251: in=PIN_DAT_IN << 5;
IN R16,0x10 In from I/O location
MOV R17,R16 Copy register
BST R17,3 Bit store from register to T
LDI R17,0x00 Load immediate
BLD R17,5


разница в операциях со сдвигом это из-за неиспользования остальных бит в дальнейшем
компилил в среде CodeBlocks8.02, gcc-avr из установленного WINAVR от 20071221.
Мысли о makefile оставил CodeBlocks. сейчас попробую в WINAVR свой маке нарисовать
видимо зря доверил маке этой среде... со своим маке

249: if (answer == 0)
LDS R24,0x0068 Load direct from data space
TST R24 Test for Zero or Minus
BREQ PC+0x02 Branch if equal
RJMP PC+0x004F Relative jump
252: in=(PIN_DAT_IN) << 2;
IN R19,0x10 In from I/O location
LSL R19 Logical Shift Left
LSL R19 Logical Shift Left
спасибо за внимание!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:51
Рейтинг@Mail.ru


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