3

AVR 開発システムを完全な GCC ツール チェーン (すべて最新の安定版) でセットアップするのにかなりの時間を費やしましたが、ほとんどの問題は 1 つを除いて解決しました。

この次のコードは、私が得られないエラーを私に与えます。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

4

2 に答える 2

6

更新avr-libc を使用する場合、アセンブリ コードを次のように記述する必要があることがわかりました。

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

[実際の解決策がないデバッグのヒントを削除]

于 2010-04-10T10:32:06.647 に答える
2

ビット数(0)ではなく、PORTBに文句を言っているのだと思います。PORTB をどのように定義しましたか? 0..31 の範囲である必要があります。ポートが 32..63 の範囲で定義されている場合、PORTB から 32 を引く必要がある場合があります。

于 2010-04-10T10:17:45.467 に答える