6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

はじめに

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ライフを!

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?