はじめに
12月にMbed Online Compilerがサービス終了するという事で、利用者はArm Keil Studioへ移行する必要が発生しました。
ディレクトリの移行自体は簡単なのですが、その後の操作が少し面倒なので、備忘録とロボコン部内共有も兼ねて、私自身が把握している範囲でですが記録しておこうと思います。
※間違っている部分が多々あると思われますが、修正すべき点がありましたらコメント等お願い致します。
※この記事は、Arm Keil Studio Cloud User Guideを参考にしております。
この記事の主な対象者
- 現在までMbed Online Compilerで開発を行っていた方
- 今までMbed Online Compiler以外のMbed開発環境を触った事がない方
- Arm Keil Studioにディレクトリ移行したのは良いものの、行き詰っている方
移行手順
移行手順は大きく分けて以下の3つとなります。
- ディレクトリをKeil Studioに移行する
- Mbed 2からMbed OS 5 or 6へアップグレードする
- 互換性のない関数(主にUART周辺)を調整する
1. ディレクトリをKeil Studioに移行する
すでにここまではやってる方も多いかもしれませんが、一応書き記しておきます。
幸いにもボタン数クリックで移行が可能なので、手早く行っていきます。
1.1. Keil Studioにログインする
Keil Studioにアクセスし、ログインします。
ユーザー情報はOnline Compilerと同じですので、普段Online Compilerにログインする際と同じ感覚でやってもらって結構です。
初回読み込みはかなり時間がかかった記憶がありますが、気長に待ちましょう。
1.2. Mbed Online Compilerからプロジェクトをインポートする
1.2.1. Keil Studioを初めて開く場合
Keil Studioが開いたら、この場では何も操作せず、左側に画像のようなタブが出ているはずなので、一番下のImport projects from Mbed online Compilerを選択します。
すると選択画面が出てきますので、移行したいプロジェクトを選択し、Copy progamsをクリックします。
画像のように、新しくプロジェクトが追加されたら完了です。
1.2.2. Keil Studioに他のプロジェクトが存在する場合(追加読み込み)
Keil Studioを開いたら、画面左上のFileタブをクリックします。Import from Mbed Online Compilerを選択したらプロジェクト一覧が出てくると思いますので、インポートしたいプロジェクトを選択してCopy programsをクリックします。
左側に選択したプロジェクトが追加されていれば完了です。
2. Mbed 2からMbed OS 5 or 6へアップグレードする
Keil Studioにプロジェクトを追加した状態だと思いますが、このままではまだプログラムをコンパイルする事ができません。
Online CompilerではMbed 2を使っていましたが、Keil StudioではMbed OS 5または6にしか対応しておらず(多分)、アップグレードの作業が必要となります。
2.1. mbed.bldの削除
画像の通り、Mbed 2から移行後のディレクトリ内に存在するmbed.bldを削除します。
mbed.bldと書いてある上で右クリック、メニューの下の方にあるDeleteを押すことで削除できます。
2.2. Mbed OSのインポート
プロジェクト名の上で右クリック、メニューからAdd Mbed Library...を選択します。
するとURLとライブラリ名を入力する画面が出てきますので、URLにhttps://github.com/ARMmbed/mbed-os
と入力し、ライブラリ名はmbed-osのまま次に進みます。
以下のような画面が出てきますので、過去にOnline Compilerを使用していた方のうち、SerialクラスまたはRawSerialクラスを利用していた方は、プルダウンから"mbed-os-5.xx.x"を選択するようにしてください。 (それ以外の方は6でも問題ないかと思います。)
Finishを押し、新たにmbed-osディレクトリが生成されていれば、インポート完了です。
3. Serialクラス周辺を調整する(Online Compilerからの移行者向け)
Mbed OS 5ではSerialクラスが利用できず、代わりにRawSerialというクラスを利用する必要があります。
(Mbed OS 6だとRawSerialも消え、BufferedSerialとUnBufferedSerialに分割される。こちらは未調査)
3.1. RawSerialクラスへの変更
変更自体は簡単で、Serial 変数名(TX, RX)
で宣言していたものを、RawSerial 変数名(TX, RX, baud[省略可])
に変更するだけで可能です。
3.2. 構文の修正
変数名.baud(####)
など、ピン宣言とは別でボーレートを指定していた場合、エラーを吐かれてしまいます(多分)。
そのためbaud関数を削除し、代わりにボーレートの値をRawSerial宣言の第三引数に渡してあげましょう。
また、割込みのためにattach関数を使っている方も多いと思われますが、こちらはSerial::RxIrq
という引数を、SerialBase::RxIrq
に変更してあげましょう(送信割込みの場合はRxIrqの部分がTxIrq)。
以下に修正例を示しておきます
#include "mbed.h"
void Config(void);
void PS3Data(void);
- Seial pc(USBTX,USBRX);
- Serial cont(PA_9, PA_10);
+ RawSerial pc(USBTX,USBRX);
+ RawSerial cont(PA_9, PA_10,9600);
int PS3[7];
int main(void)
{
Config();
//省略
}
void Config(void){
//初期設定
- cont.baud(9600);
- cont.attach(&PS3Data, Serial::RxIrq);
+ cont.attach(&PS3Data, SerialBase::RxIrq);
}
void PS3Data(void)
{
//省略
}
まとめ
おおよその方はこれで動くと思います。
稀によく構文エラーが出ることがありますが、なぜかビルド通るので多分大丈夫です。
引っ掛かりやすい部分をまとめると
- Mbed OSへのバージョンアップが必要
- Serialクラスを使ってる場合は、Mbed OS 5の方がある程度互換効いて使いやすい
- RawSerialクラスへの移行に伴って、若干の構文変更が必要
この辺りだと思います。
本来であれば最新のMbed OS 6を使用するべきであるとは思うのですが、Serial系クラスの一新などと面倒な仕様変更が入ったため、互換性や引継ぎのしやすさという面でMbed OS 5への説明という形で紹介させていただきました。
もし6への移行が上手くいきそうなら、今後そちらも記事にまとめたいと思います。というより誰か作って欲しいです(他力本願)。
12月にサービス終了という事で、取り急ぎ分かってる範囲でまとめてみました。
不明瞭で間違ってる部分もあると思われますが、あくまで参考程度にしていただけると幸いです。
ということで、皆様も良いMbedライフを!