Если стоит ключ языка - стандарт ANSI (C89/С99), то ключевое слово asm отсутствует, пожтому оно воспринимается как идентификатор и дальше уже идут ошибки в зависимсоти от версии компилятора и что он думает про этот идентификатор. В данном случае подумал, что это должна быть (необъявленная до сих пор) функция, а после её имени должна быть "(".
Так что привыкайте писать __asm__.
(2 aeosk - всё забываю написать - в некоторых заголовочных файлах встречается asm - в eeprom.h уже поправили, кажется, в interrupt.h осталось, выдаёт ошибки в случае -std=c99. Можно этот ключ и не ставить, но...)Кроме этого просто PORTD имеет адрес памяти, а не IO-пространства, для правильной адресации надо вернуть его в IO-зону.
Итого:
Код
__asm__ __volatile__ (
"in %0, %1"
: "=r" (value)
: "I" (_SFR_IO_ADDR(PORTD))
);
Цитата(nicname @ Apr 26 2008, 18:36)

Вот файл целиком :
asm volatile("in %0, %1" : "=r" (value) : "I" (PORTD) : );
Ого!
Ну тогда всё написанное мной читать после того, как файл примет нужный вид