How to develop mbed in offline(mbedの開発をオフライン環境でする方法)

mbedのチームwikiに書いてたのをテケトーに移植したものです．<br>レイアウト等崩れてるかもですが，お許しください．

また，Windows向けに資料を書いているため，OS依存のコマンド等異なるかもしれませんが，ご了承ください．

# 必要なソフトウェア
・Git

・Mercurial

・ARM_GCC

・Python

・mbed CLI（インストール方法は後述）

・エディター※メモ帳以外


>**[追記 2018.8.23]** <br>Windows向けにこれらをまとめてインストールできる，Windows mbed-cli Installerがありますが
>使ってみたところバグがある可能性があるので推奨しません．

>pipの最新版では正常に動作しないかもしれません．9.0.3または1.5.6にダウングレードしてみてください． **[以上]**

メモ帳で，オンラインからクローンしたソースファイルを開くと
改行，インデント等が反映されないため，推奨しません。

また，上記以外にも[sourcetree](https://ja.atlassian.com/software/sourcetree)や[tortoisehg](https://tortoisehg.bitbucket.io/|tortoisehg)
のようなMercurialクライアントがあると便利かもしれません(Windowsの場合Gitは公式のGUIが付属)
</quote>


# 第1章.オフラインコンパイル下準備

## 1.mbed-cliのインストール

```
python -m pip install mbed-cli
```
mbed cli 最新版(2018.8.23現在)では正常に動作しないことがある．うまくいかないときは,
一度アンインストールしてからバージョンを1.3に下げることをおすすめします．

```
python -m pip uninstall mbed-cli
python -m pip install mbed-cli==1.3.0
```

## 2.mbed作業フォルダの作成

mbedで作業するフォルダを作ります

パスに日本語が含まれないように注意※エラー吐きます

上記の点さえ守れば，フォルダ名・作る場所も自由です。

この資料では```C:\mbed```として進めます

## 3.Mbed-CLIの設定

コマンドプロンプト(ターミナル)で以下のコマンドを入力。

```
//PC毎の設定
mbed config --global toolchain GCC_ARM
mbed config --global target NUCLEO_F446RE

//プログラム毎の設定（コントローラーのプログラム等におすすめ）
cd C:\mbed\programname
mbed config target NUCLEO_F103RB
```

Targetについては自分が使うNUCLEOの型番に置き換える。いつもと違うマイコンを使うときは設定変更が必要。

# 第2章.新しいプログラム作成～コンパイルまで

ここでは「newprogram」という名前のプログラムを作りコンパイルを行う

## 1.プログラムの作成から空のソースファイルを作成・開くまで

```
cd C:\mbed //1章で作った作業フォルダに移動
mbed new newprogram //新規プログラムの作成※
cd newprogram
vim main.cpp //エディター起動(Vimの場合)

//※バージョン管理にGitではなくMercurialを用いる場合
mbed new --scm hg newprogram
```

なお以降の説明では，コマンドプロンプト(ターミナル)では既に
プロジェクトフォルダ(C:\mbed\newprogram)に移動しているものとします。

cd C:\mbed\newprogramは省略します

## 2.ソースファイルを編集

## 3.いよいよコンパイル

```
mbed compile

//うまくいかなかった場合，もう一度
mbed compile
//または
mbed deploy
mbed compile

//binファイルが生成されたか確認する(Windowsの場合)
explorer BUILD
```

### mbed-cliは飽きっぽい子
コンパイル中，こんなエラーが出て終了してしまうことがあります．

```
[ERROR] [Errno 0] Error
[mbed] ERROR: "C:\Python27\python.exe" returned error code 1.
[mbed] ERROR: Command "C:\Python27\python.exe -u c:\mbed\gyropractice\mbed-os\tools\make.py -t GCC_ARM -m NUCLEO_F446RE --source . --build
.\BUILD\NUCLEO_F446RE\GCC_ARM" in "c:\mbed\gyropractice"
```

これはPythonが「もう飽きた」と言って作業を放り投げてしまうからです．

※ふざけているようですがこう例えるしかなかった．許してください

この場合はもう一度"mbed compile"ってやるとちゃんと続きからコンパイルをしてくれます．

# 第3章.os.mbed.com(オンラインIDE)でも作業できるようにする

mbed Compilerではバージョン管理(後述)システムにMercurialを用いています

## 0.間違えてGitを使う設定にしてプログラムを作成した場合
```
rmdir .git /S  //.gitフォルダを削除
hg init .//このディレクトリでMercurialリポジトリを作成
```

## 1.リモートリポジトリの作成
1. https://os.mbed.com/users/【ユーザー名に置き換え】/code/ を開く
2. [Create mbed hosted repository]をクリック
3. プログラム名と同じ名前(一文字も間違えないように注意)のリポジトリ(ここでは[newprogram]
というリポジトリ)を作成する。<br>ソースコードの流出を防ぐためRepository visibilityはPrivateを推奨。<br>Choose destinationはチームでの共同作業を想定している場合は，自分のチーム名を選択。
4. リポジトリを作成したら，リポジトリのページのURLをコピー。

## 2.Mercurialの設定
```
vim .hg\hgrc //構成設定ファイルの作成→テキストエディタで開く
```

```
[paths]
default = https://os.mbed.com/users/taro_yamada/code/newprogram/ //コピーしたURLを貼り付け
[proxy] //プロキシ設定（グローバル設定に記載したほうがいいのかも）
host = proxy.example.co.jp:8080 //プロキシサーバーとポート番号
passwd = password //プロキシのパスワード
username = taro_yamada //プロキシのユーザー名
```

<quote>
構成設定ファイルでは1文字目に#を入力した行はコメント扱いとなる
</quote>

## 3.Mercurialで同期
```
hg add main.cpp //以後，ソースファイルやヘッダファイルは同様に処理
hg add mbed-os.lib //必要なライブラリは[ライブラリ名].libでaddする
hg files //必要なファイルが追加された確認できる
hg commit//変更をコミット
//テキストエディタが開くのでコミットメッセージを適当に入力し保存して閉じる
hg push//変更をリモート(オンライン)に反映
```

Mercurialクライアント(sourceTreeやTortoiseHg)を使うともっと楽に作業できる

## 4.mbed Compilerにインポート
1. mbed compilerを開く．
2. [URLからインポート]でリポジトリのページへのURLを入力しインポート

# 参考資料

https://os.mbed.com/users/ytsuboi/notebook/ja-setup-mbed-cli-on-windows/

http://qiita.com/okhiroyuki/items/68ced69cf36de3eac919#windows%E3%81%A7%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89

mbed-CLI
https://developer.mbed.org/users/ytsuboi/notebook/ja-setup-mbed-cli-on-windows/