{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# mbedオフライン開発環境の構築\n", "岡野さんのページを参考にmbedのオフライン開発環境を構築しました。\n", "- https://developer.mbed.org/users/okano/notebook/setup-mbed-cli-on-mac-os-x-JP/\n", "\n", "## 準備\n", "パッケージ管理ソフトHomebrewとXcodeをインストールします。\n", "\n", "App Storeを使ってXcodeをインストールした後、最新に更新してください。\n", "mbed cliではXcode Command line Toolsも必要になりますが、mbed cliがインストールを促してくれます。\n", "\n", "### Homebrewのインストール\n", "以下のコマンドでHomebewがインストールされます。\n", "\n", "```bash\n", "$ ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n", "```\n", "\n", "brewコマンドでpythonとnpmをインストールします。\n", "\n", "```bash\n", "$ brew install npm\n", "$ brew install python \n", "```\n", "pythonのインストールで警告がでるので、以下のコマンドを実行します。\n", "```bash\n", "$ brew link --overwrite python\n", "```\n", "\n", "次にgit、Mercurial(hg)とGCCをインストールします。\n", "```bash\n", "$ brew tap PX4/homebrew-px4\n", "$ brew update\n", "$ brew install git hg gcc-arm-none-eabi\n", "```\n", "\n", "## mbedオフライン開発環境mbed cliのインストール\n", "mbed cliはpipコマンドを使ってインストールします。これでmbedオフライン開発環境が整いました。\n", "```bash\n", "$ pip install mbed-cli\n", "```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 動作確認\n", "動作確認のために、Lチカのサンプル(blink)を作成します。\n", "\n", "```bash\n", "$ mbed new blink --mbedlib\n", "[mbed] Creating new program \"blink\" (git)\n", "[mbed] Adding library \"mbed\" from \"https://mbed.org/users/mbed_official/code/mbed/builds\" at latest revision in the current branch\n", "[mbed] Updating reference \"mbed\" -> \"https://mbed.org/users/mbed_official/code/mbed/builds/tip\"\n", "[mbed] Couldn't find build tools in your program. Downloading the mbed 2.0 SDK tools...\n", "[mbed] Auto-installing missing Python modules...\n", "```\n", "\n", "main.cppは、以下の様にしました。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing blink/main.cpp\n" ] } ], "source": [ "%%writefile blink/main.cpp\n", "#include \"mbed.h\"\n", " \n", "DigitalOut led1(LED1);\n", " \n", "int main()\n", "{\n", " while (1) {\n", " led1 = !led1;\n", " wait_ms(500);\n", " }\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "blinkには、以下のディレクトリとファイルができています。\n", "mbedディレクトリには、必要なライブラリやインクルードファイルがダウンロードされるので、Githubには含めていません。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "main.cpp mbed\tmbed.bld mbed_settings.py mbed_settings.pyc\r\n" ] } ], "source": [ "!ls blink" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### mbed LPC1768で動かす\n", "手元の初期のmbed LPC1768をMacに接続してみます。\n", "\n", "mbed cliが正しくmbed LPC1768を認識するかdetectコマンドで確認します。\n", "\n", "以下の様に入力すると、LPC1768として認識されていることが分かります。\n", "```bash\n", "$ mbed detect\n", "\n", "[mbed] Detected LPC1768, port /dev/tty.usbmodem1412, mounted /Volumes/MBED\n", "[mbed] Supported toolchains for LPC1768\n", "+---------+-----------+-----------+-----------+-----------+-----------+\n", "| Target | mbed OS 2 | mbed OS 5 | ARM | GCC_ARM | IAR |\n", "+---------+-----------+-----------+-----------+-----------+-----------+\n", "| LPC1768 | Supported | Supported | Supported | Supported | Supported |\n", "+---------+-----------+-----------+-----------+-----------+-----------+\n", "Supported targets: 1\n", "Supported toolchains: 3\n", "```\n", "\n", "それでは、toolchainをGCC_ARM、ターゲットをLPC1768にセットします。\n", "```bash\n", "$ mbed toolchain GCC_ARM\n", "[mbed] GCC_ARM now set as default toolchain in program \"blink\"\n", "$ mbed target LPC1768\n", "[mbed] LPC1768 now set as default target in program \"blink\"\n", "```\n", "\n", "mbed OS5では不要ですが、mbed OS2ではライブラリのアップデート(新規の場合ダウンロード)が必要です。\n", "\n", "mbed 2.0 9bcdf88f62b0のバグでLPC1768のdefault targetが見つかりません。その場合には、以下のコメントに従ってください。\n", "- https://github.com/ARMmbed/mbed-cli/issues/391\n", "\n", "```bash\n", "$ mbed update\n", "```\n", "\n", "準備が整ったのでコンパイルを実行します。\n", "\n", "```bash\n", "$ mbed compile\n", "Building project blink (LPC1768, GCC_ARM)\n", "Scan: .\n", "Scan: mbed\n", "Scan: env\n", "Compile: main.cpp\n", "Link: blink\n", "Elf2Bin: blink\n", "+-----------+-------+-------+------+\n", "| Module | .text | .data | .bss |\n", "+-----------+-------+-------+------+\n", "| Subtotals | 27529 | 2496 | 632 |\n", "+-----------+-------+-------+------+\n", "Allocated Heap: 2048 bytes\n", "Allocated Stack: 3072 bytes\n", "Total Static RAM memory (data + bss): 3128 bytes\n", "Total RAM memory (data + bss + heap + stack): 8248 bytes\n", "Total Flash memory (text + data + misc): 30025 bytes\n", "Image: ./BUILD/LPC1768/GCC_ARM/blink.bin\n", "```\n", "\n", "正常にビルドが完了したので、Imageファイル(blink.bin)をmbedに書き込みmbedのリセットボタンを押します。LEDが1秒間隔で点滅したら成功です。\n", "\n", "```bash\n", "$ cp ./BUILD/LPC1768/GCC_ARM/blink.bin /Volumes/MBED/\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## mbedのデバッグ\n", "オフラインの特徴であるデバッグ機能について、順を追って説明します。\n", "\n", "### mbedのファームウェアの更新\n", "私の使っていた初期のものでpyocdを使うには、ファームウェアの更新が必要でした。\n", "\n", "更新が必要かどうかは、PCにmbedを差してマウントされたディスクにあるMBED.HTMをテキストエディタで開いて確認します。\n", " \n", " ```\n", "\n", "\n", "
\n", "\n", "