この記事は?
VSCode には、C/C++ の文法チェックをしてくれる拡張機能があります。(Microsoft社提供)
C/C++ の構文エラー等をエディター上に表示してくれます。
デフォルト設定では AVR 用ライブラリ等には対応していないので、設定してやる必要があります。
ただエラーを非表示にしたいだけであれば、拡張を一時的に無効にしてやるだけでも良いです。
が、入力補間等を愛用する自分は、AVR 用 Cプログラムでも構文チェックが欲しいです。
この記事では、自分が行ったその設定をまとめました。
環境
項目 | バージョン等 |
---|---|
OS | Linux Mint 20.1 Ulyssa 64 ビット |
avr-gcc (GCC) | 5.4.0 |
Visual Studio Code | 1.57.1 |
C/C++ (VSCode 拡張) | v1.5.0-insiders2 |
この記事では、AVR チップ「ATmega 328p」に対する設定で書いていきます。
インクルードパス
この拡張のデフォルト設定のまま AVR 用 C ソースを記述すると、このようなエラーが表示されてしまいます。
デフォルトでは標準の Cライブラリ/usr/include
しかインクルードパスに入っておらず、AVR 用ライブラリ/usr/lib/avr/include
は検知対象外となっています。
そこで、インクルードパスの設定に、/usr/lib/avr/include
を追加してやります。
コンパイラ設定
さて、avr/io.h
等のヘッダのインクルードが検出されるようになりました。
しかし、今度はレジスタ等関連のものが定義されていないとエラーが出てしまっています。
コード上でavr/io.h
をインクルードした段階では、まだ各チップ固有のレジスタ情報等がまとめられたライブラリは読み込まれていません。
(ATmega328p の場合、avr/iom328p.h
)
各チップ固有のライブラリの読み込みは、avr-gcc
コンパイルの際に行われます。
avr-gcc -mmcu=atmega328p main.c -o main
構文チェックで-mmcu=atmega328p
が適応されるよう、設定をしていきます。
まずはコンパイラパスの設定。
avr-gcc
をコンパイラとしてパスを指定します。
次に、コンパイラ引数に-mmcu=atmega328p
を追加します。
(ここは、使用するチップによって変更してください。)
以上で設定は完了です。
AVR ライブラリが読み込まれ、レジスタ等の情報も正しく表示してくれています。