Команда AVR sbi - Ошибка: число должно быть положительным и меньше 32 - PullRequest
3 голосов
/ 10 апреля 2010

Я потратил много времени на настройку системы разработки AVR с помощью полной цепочки инструментов GCC (все являются самой последней стабильной версией), и я решил большинство проблем с ней, кроме одной.

Этот следующий код дает мне ошибку, которую я просто не получаю. В руководстве по сборке AVR указано, что инструкция sbi может принимать 0-7 в качестве константного выражения, но это все равно вызывает ошибку. Кто-нибудь может пролить свет на то, почему это происходит, пожалуйста?

  #ifndef __AVR_ATmega168__
      #define __AVR_ATmega168__
  #endif

  #include <avr/io.h>

      rjmp Init

  Init:

      ser r16
      out DDRB, r16
      out DDRD, r16

      clr r16

      out PORTB, r16
      out PORTD, r16

  Start:

      sbi PORTB, 0
      rjmp Start

Строка, о которой идет речь, sbi PORTB, 0.

Скомпилировано / собрано с:

avr-gcc ledon.S -mmcu = atmega168

Ответы [ 2 ]

6 голосов
/ 10 апреля 2010

Обновление Оказывается, вы должны написать свой ассемблерный код следующим образом при использовании avr-libc :

#include <avr/io.h>
sbi  _SFR_IO_ADDR(PORTB), 0

[удаленные подсказки отладки без реального решения]

2 голосов
/ 10 апреля 2010

Я думаю, что он жалуется на PORTB, а не на число бит (0). Как вы определили PORTB? Это должно быть в диапазоне 0..31. Возможно, вам придется вычесть 32 из PORTB, если ваши порты определены в диапазоне 32..63?

...