純粋なCでのArduinoのプログラミング

arduinoの生活の中で、遅かれ早かれ、通常の開発環境で混雑する瞬間が訪れます。 スケッチに十分なメモリがない場合は、ハードリアルタイムが必要で、中断して作業するか、単にハードウェアに近づける必要があります。それから、Cに切り替えます.Arduinoの言及で経験豊富なエレクトロニクスエンジニアが即興で顔をしかめ、はんだごてのためにラジオストアに新人を送ります。 これは最悪のアドバイスではないかもしれませんが、当面はそれに従いません。 Arduino IDEと配線/処理言語を破棄すると、マイクロコントローラーが動作するために必要なものがすべて装備された優れたデバッグボードが手に入ります。 そして、重要なことは、ブートローダーが既にコントローラーのメモリに縫い込まれているため、プログラマーを使用せずにファームウェアをダウンロードできることです。



Cでプログラムするには、AVR GCC Toolchainが必要です。



Windows:

WinAVRをインストールします。これには必要なものがすべて含まれています。



DebianおよびUbuntu:

sudo apt-get install gcc-avr binutils-avr avr-libc









MacOs X:

AVR開発用のCrossPackをインストールする



また、インストール済みのArduino IDEも必要です。 ファームウェアをコントローラーにダウンロードするために必要なavrdudeユーティリティが含まれています。 CrossPackにもavrdudeが含まれていますが、CrossPackに付属するバージョンではArduinoの操作方法がわかりません。



すべてをインストールしたら、最初のプロジェクトを作成します。 まず、 Makefileを書きます 。 これにより、コンパイルとファームウェアのダウンロードのたびに長いコマンドを手動で入力する必要がなくなります。



 #,   .   ,  atmega328 DEVICE = atmega168 #  16  CLOCK = 16000000 #  avrdude.     Arduino IDE. AVRDUDE = /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -carduino -P/dev/tty.usbserial-A600dAAQ -b19200 -D -p atmega168 OBJECTS = main.o COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) all: main.hex .co: $(COMPILE) -c $< -o $@ .So: $(COMPILE) -x assembler-with-cpp -c $< -o $@ .cs: $(COMPILE) -S $< -o $@ flash: all $(AVRDUDE) -U flash:w:main.hex:i clean: rm -f main.hex main.elf $(OBJECTS) main.elf: $(OBJECTS) $(COMPILE) -o main.elf $(OBJECTS) main.hex: main.elf rm -f main.hex avr-objcopy -j .text -j .data -O ihex main.elf main.hex avr-size --format=avr --mcu=$(DEVICE) main.elf
      
      







このファイルでは、avrdudeを実行するコマンドを入力する必要があります。 異なるシステムでは、見た目が異なります。 バージョンを確認するには、Arduino IDEを実行し、[アップロード中に詳細な出力を表示する]チェックボックスをオンにします。





スケッチをArduinoにロードし、ウィンドウの下部に表示されるメッセージを確認します。 そこでavrdude呼び出しを見つけ、-Uflashパラメーター以外をすべてコピーし、「AVRDUDE =」の後にMakefileに貼り付けます。





短いメモ:Makefileのすべてのインデントはタブ(Tabキー)を使用して行われます。 テキストエディタがこれらの文字をスペースに置き換えた場合、makeコマンドはプロジェクトのビルドを拒否します。



さて、 main.cファイルを作成しましょう。実際にはプログラムのテキストで、従来はLEDを点滅させていました。



 #include <avr/io.h> #include <util/delay.h> #define LED_PIN 5 int main() { DDRB |= 1 << LED_PIN; while(1) { PORTB |= 1 << LED_PIN; _delay_ms(1000); PORTB &= ~(1 << LED_PIN); _delay_ms(1000); } return 0; }
      
      







プロジェクトの準備ができました。 プロジェクトのディレクトリでコンソールを開き、コマンド「make」を入力します。





ご覧のとおり、結果のファームウェアのサイズは180バイトのみです。 同様のArduinoスケッチは、コントローラーのメモリで1116バイトを使用します。



コンソールに戻り、「make flash」と入力して、コンパイル済みファイルをコントローラーにロードします。





ダウンロードにエラーがなかった場合、ボードの13番目の接点に接続されているLEDが楽しく点滅します。 時々avrdudeがボードを見つけられないか、タイムアウトで落ちる-この場合、USBケーブルを動かすと助けになります。 また、ボードへのアクセスの競合を避けるため、「make flash」コマンドの前にArduino IDEを閉じることを忘れないでください。



おそらく、この記事で説明されていることの多くは、ベテランの開発者には明らかなように思えます。 私は初心者のアルドゥイノイストにとって最も理解しやすい言語でプロセスを説明し、さまざまなソースから取得した情報を1か所に集めて実験的に検証しようとしました。 たぶん、この記事は誰かを数時間節約するでしょう。



マイクロコントローラのマスタリングで頑張ってください!



明けましておめでとうございます!



All Articles