Перейти к содержанию
    

CVAVR 1.24.6 Ошибка

CVAVR 1.24.6

При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union».

Пример: PORTG.2=1 – ошибка,

PORTF.0=~PORTF.0 – ошибка.

Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает.

При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования.

Режим совместимости с MEGA 103 не включен.

В чём дело?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CVAVR 1.24.6

При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union».

Пример: PORTG.2=1 – ошибка,

PORTF.0=~PORTF.0 – ошибка.

Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает.

При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования.

Режим совместимости с MEGA 103 не включен.

В чём дело?

Спасибо.

К этим портам нужно обращаться как к ячейкам памяти. Я делаю так:

 

PORTG=PING&0xfe;

#asm("nop")

PORTG=PING|0x01;

#asm("nop")

 

В этом примере формирую отрицательный импульс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CVAVR 1.24.6

При попытке записать бит или проделать какую-либо операцию с отдельным битом портов F или G возникает ошибка «left side of ‘.’ requires struct/union».

Пример: PORTG.2=1 – ошибка,

PORTF.0=~PORTF.0 – ошибка.

Пробовал реализовывать последнюю операцию при помощи асм. вставки – возникает ошибка ассемблирования; с портами А-Е проблем не возникает.

При указании компилятору использовать порт F для ЖКИ также возникает ошибка ассемблирования.

Режим совместимости с MEGA 103 не включен.

В чём дело?

Спасибо.

В хелпе CVAVR написано:

It is important to note that bit selector access to I/O registers located in internal SRAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can’t be used for SRAM access.

Т.е. прямые битовые операции не поддерживаются для портов F и G.

Управление светодиодом, не трогая остальных бит регистра, можно сделать так:

 

#define LED_RED_OUT PORTG // Red LED output PORTG PIN0

 

LED_RED_OUT = (LED_RED_OUT & ~0x01) | (led_red_flag ? 0x00 : 0x01);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...