Цитата(forever failure @ May 5 2007, 06:07)

Коренное отличие GCC-ишного асма AVR от IAR-овского состоит в том, в GCC обращение к порту in/out делается через макроподстановку _SFR_IO_ADDR, т. е. Вам придётся в асмовском файле заменить все
in r**, PORT** на in r**, _SFR_IO_ADDR(PORT**).
Ну и проделать тоже с out, cbi, sbi. Тогда заработает.
Не обязательно.
Можно сделать так:
Код
#define __SFR_OFFSET 0
.nolist
#include <avr/io.h>
.list
.section .text
.global main
main:
; запис в OSCCAL - перша операція, щоб не змінювалася адреса
; команди LDI
ldi temp, 0x80 $ out OSCCAL, temp
ldi temp, (1<<ACD) $ out ACSR, temp
; Вихід NO_VIDEO вмикається відразу як активний.
ldi temp, 0x19 $ out PORTB, temp
ldi temp, 0x0B $ out DDRB, temp
и не морочить себе голову этим
_SFR_IO_ADDRДа, они сами пишут, что лучше морочить :-), но я ленюсь писать многа букафф. Даже если вдруг они переделают sfr_defs.h так, что
#define __SFR_OFFSET 0 перестанет работать - напущу SED на те из старіх исходников, которіе надо поддерживать.
Ну а если адреса портов заданы вручную через
#define PORTB и т.п., то тогда
_SFR_IO_ADDR противопоказан, так как адрес задан уже правильно.