Отговори на тема  [ 4 мнения ] 
Проблем с четенето на 16b таймер с avr-gcc и mega128 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Пет Юли 01, 2005 10:46 pm
Мнения: 229
Местоположение: Гложене/София
Мнение Проблем с четенето на 16b таймер с avr-gcc и mega128
В една AtMega128 ползвам TIMER1 за мерене на време, за четене на порта ползвам следния код:
компилатора е avr-gcc
Код:
#define __inw_atomic(port) ({            \
   uint16_t t;                        \
   asm volatile (                     \
      "in __tmp_reg__, __SREG__" "\n\t"   \
      "cli" "\n\t"                  \
      "in %A0, %1" "\n\t"               \
      "in %B0, (%1)+1" "\n\t"            \
      "out __SREG__, __tmp_reg__"         \
      : "=r" (t)                     \
      : "I" (_SFR_IO_ADDR(port))         \
   );                              \
   t;                              \
})

когато го извикам с __inw_atomic(TCNT1) - нямам никави проблеми и си работи, с TCNT2 също нямам проблеми при компилиране, но като го извикам с TCNT3 компилатора пищи с следното.
Код:
file.c:586: warning: asm operand 1 probably doesn't match constraints
file.c:586: error: impossible constraint in `asm'
file.c:586: warning: 't' might be used uninitialized in this function

Не мога да го разбера какъв точно му е проблема. Според мен и оплакването му проблема е заради тези "\n\t" (така наречените constraints), но какво не му харесва не ми е ясно.


Пон Дек 11, 2006 3:20 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Виж дали компилираш за мега128. По-малките меги са с по 2 таймера.


Пон Дек 11, 2006 6:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Всъщност не, 3 са, но идексите почват от 0.


Пон Дек 11, 2006 6:46 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Пет Юли 01, 2005 10:46 pm
Мнения: 229
Местоположение: Гложене/София
Мнение 
За mega128 го компилирам, видях си грешка в asm-а
за момента реших проблема по грубия начин, ако имам време бих си поиграл да го видя защо е, но ако тръгне едва ли ще се занимавам.

Код:
#define __inw_atomic3(port) ({            \
   uint16_t t;                        \
   asm volatile (                     \
      "in __tmp_reg__, __SREG__" "\n\t"   \
      "cli"  "\n\t"                  \
      "lds %A0, 0x0088" "\n\t"         \
      "lds %B0, 0x0089" "\n\t"         \
      "out __SREG__, __tmp_reg__"         \
      : "=r" (t)                     \
   );                              \
   t;                              \
})

Компилира се, но не съм го пробвал дали работи.


Пон Дек 11, 2006 7:42 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 4 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни