ロゴ

鮭男のホームページ


【備忘録】Visual Studio CodeでPICマイコン開発をする方法

2022/05/07
サムネイル

PICマイコン開発をVisual Studio Codeで行う方法を備忘録的にまとめました。
コード編集をVisual Studio Codeで行いたい!って人は真似してください。

注意と免責事項

方法

前提として、Visual Studio Code、MPLAB X IDE、XC8コンパイラは既にインストールされているものとします。
PICマイコンへの書き込みにはMDB(Microchip DeBugger)を使用しています。MDBはMPLAB X IDEに最初から含まれています。mdb.bat(Linuxだとmdb.sh?)の含まれるディレクトリへのパスは通しておいてください。
MPLAB X IDEは5.45、XC8コンパイラは2.32を使用しています。
書き込みにはPickit3を使用しております。
Visual Studio Codeはよほど古くなければ大丈夫かも。C/C++ Extensionはインストールしておいてください。
最終的なプロジェクトディレクトリの構成は以下のようになります。outは空のディレクトリです。コンパイル時の出力ファイルを格納するのに使います。

project
├── .vscode
│   ├── c_cpp_properties.json
│   └── tasks.json
├── mdb_script.txt
├── out
└── src
    └── main.c

src以下のmain.c内にPICマイコン用のプログラムを書いてください。
各設定ファイルやスクリプトの内容を以下に書いていきます。

1. c_cpp_propaties.jsonの作成

Visual Studio CodeがPIC用のヘッダを解釈できるように、c_cpp_propaties.jsonを編集する必要があります。
インストールしているMPLAB X IDEのバージョンによってインクルードパスが異なるため、自身の環境に合わせて適宜変えてください。 また、defines内の12F1822と書かれてある場所は自身のPICマイコンに合わせて変更してください。

{
    "configurations": [
        {
            "name": "PIC-CONF",
            "includePath": [
                "${workspaceFolder}",
                "C:/Program Files/Microchip/xc8/v2.32/pic/include",
                "C:/Program Files/Microchip/xc8/v2.32/pic/include/c99",
                "C:/Program Files/Microchip/xc8/v2.32/pic/include/proc"
            ],
            "defines": [
                "__XC8",
                "__PICC__",
                "_12F1822",
                "__interrupt()="
            ],
            "intelliSenseMode": "gcc-x64",
            "browse": {
                "path": [
                    "${workspaceFolder}",
                    "C:/Program Files/Microchip/xc8/v2.32/pic/include",
                    "C:/Program Files/Microchip/xc8/v2.32/pic/include/c99"
                ],
                "limitSymbolsToIncludedHeaders": true
            },
            "cStandard": "c99",
            "cppStandard": "c++17",
            "compilerPath": ""
        }
    ],
    "version": 4
}

2. MDBスクリプトの作成

MDBには、MDB内のコマンドを列挙したスクリプトファイルを実行する機能があります。書き込みのみを行うためのスクリプトを作り、プロジェクトの一番上においてください。名前はmdb_script.txtにしてください。(tasks.jsonから実行するため)

注意

Device PIC12F1822
Set AutoSelectMemRanges auto
Set programoptions.eraseb4program true
#Set poweroptions.powerenable true
#Set voltagevalue 4.5
Set system.yestoalldialog true
Hwtool pickit3 -p
Program out/main.hex
Quit

3. tasks.jsonの作成

コマンド一発でコンパイルやPICマイコンへの書き込みを行うために、tasks.jsonを編集します。具体的には、以下の3個のタスクを追加します。

一応、Programタスクを実行する際に、一度Buildタスクを実行するようにしてあります。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "detail": "Build C source files",
            "type": "shell",
            "command": "xc8",
            "args": [
                "--chip=12F1822",
                "-Oout/main",
                "src/main.c"
            ],
            "group": {
                "isDefault": true,
                "kind": "build"
            },
            "problemMatcher": []
        },
        {
            "label": "Clean",
            "detail": "Clean output files",
            "type": "shell",
            "command": "rm",
            "args": [
                "out/*"
            ],
            "problemMatcher": []
        },
        {
            "label": "Program",
            "detail": "Program a hex file to a device",
            "type": "shell",
            "command": "mdb",
            "args": [
                "mdb_script.txt"
            ],
            "dependsOn":[
                "Build"
            ],
            "problemMatcher": []
        }
    ]
}

Programタスクを実行した際に、以下のような「大丈夫?本当にデバイスあってる?」という由のメッセージが出力されます。(PIC12F1822の部分はmbd_script.txtのDeviceコマンドに渡したPICマイコン名になってるはず)

CAUTION: Check that the device selected in MPLAB IDE (PIC12F1822) is the same one that is physically attached to the debug tool. Selecting a 5V device when a 3.3V device is connected can result in damage to the device when the debugger checks the device ID. Do you wish to continue?

表示されているPICマイコン名とライタに接続しているPICマイコンが同じならば、Enterを2回押してください。プログラムが開始されます。

Tweet

コメントを投稿

名前:

コメント:


過去のコメント

まだコメントは投稿されていません。