6
7

この記事は最終更新日から1年以上が経過しています。

Mbed Online CompilerからArm Keil Studioへの移行手順について

投稿日

はじめに

12月にMbed Online Compilerがサービス終了するという事で、利用者はArm Keil Studioへ移行する必要が発生しました。

ディレクトリの移行自体は簡単なのですが、その後の操作が少し面倒なので、備忘録とロボコン部内共有も兼ねて、私自身が把握している範囲でですが記録しておこうと思います。

※間違っている部分が多々あると思われますが、修正すべき点がありましたらコメント等お願い致します。

※この記事は、Arm Keil Studio Cloud User Guideを参考にしております。

この記事の主な対象者

  • 現在までMbed Online Compilerで開発を行っていた方
  • 今までMbed Online Compiler以外のMbed開発環境を触った事がない方
  • Arm Keil Studioにディレクトリ移行したのは良いものの、行き詰っている方

移行手順

移行手順は大きく分けて以下の3つとなります。

  1. ディレクトリをKeil Studioに移行する
  2. Mbed 2からMbed OS 5 or 6へアップグレードする
  3. 互換性のない関数(主に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を選択します。
image.png
すると選択画面が出てきますので、移行したいプロジェクトを選択し、Copy progamsをクリックします。
image.png
画像のように、新しくプロジェクトが追加されたら完了です。
image.png

1.2.2. Keil Studioに他のプロジェクトが存在する場合(追加読み込み)

Keil Studioを開いたら、画面左上のFileタブをクリックします。Import from Mbed Online Compilerを選択したらプロジェクト一覧が出てくると思いますので、インポートしたいプロジェクトを選択してCopy programsをクリックします。
image.png
左側に選択したプロジェクトが追加されていれば完了です。

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を押すことで削除できます。
image.png

2.2. Mbed OSのインポート

プロジェクト名の上で右クリック、メニューからAdd Mbed Library...を選択します。
するとURLとライブラリ名を入力する画面が出てきますので、URLにhttps://github.com/ARMmbed/mbed-osと入力し、ライブラリ名はmbed-osのまま次に進みます。
image.png
以下のような画面が出てきますので、過去にOnline Compilerを使用していた方のうち、SerialクラスまたはRawSerialクラスを利用していた方は、プルダウンから"mbed-os-5.xx.x"を選択するようにしてください。 (それ以外の方は6でも問題ないかと思います。)
image.png
Finishを押し、新たにmbed-osディレクトリが生成されていれば、インポート完了です。
image.png

3. Serialクラス周辺を調整する(Online Compilerからの移行者向け)

Mbed OS 5ではSerialクラスが利用できず、代わりにRawSerialというクラスを利用する必要があります。
(Mbed OS 6だとRawSerialも消え、BufferedSerialとUnBufferedSerialに分割される。こちらは未調査)
image.png

3.1. RawSerialクラスへの変更

変更自体は簡単で、Serial 変数名(TX, RX)で宣言していたものを、RawSerial 変数名(TX, RX, baud[省略可])に変更するだけで可能です。

3.2. 構文の修正

変数名.baud(####)など、ピン宣言とは別でボーレートを指定していた場合、エラーを吐かれてしまいます(多分)。
そのためbaud関数を削除し、代わりにボーレートの値をRawSerial宣言の第三引数に渡してあげましょう。

また、割込みのためにattach関数を使っている方も多いと思われますが、こちらはSerial::RxIrqという引数を、SerialBase::RxIrqに変更してあげましょう(送信割込みの場合はRxIrqの部分がTxIrq)。

以下に修正例を示しておきます

main.cpp
#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ライフを!