В моем проекте Atmel ASF я пытаюсь создать следующий встроенный ассемблерный код. Однако при компиляции я получаю невозможное ограничение.
Компилятор указывает на эту строку __asm__ __volatile__
, я что-то пропустил?
#define OUTPORT PORTD
#define OUTBIT 3 // PD.3
uint8_t rport ,rbits;
uint8_t *buf = message;
asm volatile( "in __tmp_reg__, __SREG__ \n\t" // 1 Save SREG for later
"cli \n\t" // 1 Clear interrupts
"in %[rport], %[port] \n\t" // 1 Move PORTB adress to rport
: //Outputs
[rport] "=&r" (rport)
: //Inputs
[port] "I" (_SFR_IO_ADDR(OUTPORT)) // Adress to port register, 6-bit positive constant
: //Clobber list (compiler must restore)
"r0" // This is __tmp_reg__
);
- Что разрушает эту сборку?
- Интересно, неправильный ли синтаксис asm? Я следую этому руководству
"M"
будет более подходящим, чем"I"
. - person Michael Petch   schedule 12.06.2016_SFR_IO_ADDR(OUTPORT)
? - person David Wohlferd   schedule 12.06.2016avr-gcc -mmcu=attiny2313
(версия 4.7.2). - person Jester   schedule 12.06.2016