マルチタスク処理と組込OS

マイコンにマルチタスク処理をさせるには、FreeRTOSなどの組込OSを使う方法が一般的です。
NXPのLPCXpressoには、 このFreeRTOSを使って評価ボードLEDを点滅させる、いわゆる「Lチカサンプルソフト」が添付されています。
今回は、ARM Cortex-M0/M0+と同程度の性能を持つマイコンの組込OSを考察します。

FreeRTOS Lチカサンプルソフト

LPCXpresso824評価ボード(LPC824/Cortex-M0+、ROM:32KB、RAM:8KB)の赤LEDを0.5秒、緑を2秒、青を1秒毎に点滅させるFreeRTOS Lチカサンプルソースコードが下記です
(出典:lpcopen_2_19_lpcxpresso_nxp_lpcxpresso_824.zip、日本語コメントは筆者追記)。

FreeRTOSのLチカサンプルソフト
FreeRTOSのLチカサンプルソフト
FreeRTOSのLチカサンプルソフトリソース使用量
text data bss dec hex filename
10060 8 780 10848 2a60 freertos_blinky.axf

 

main()処理は、prvSetupHardware()でスタート処理、xTaskCreate()で各LEDトグルタスクを登録し、vTaskStartScheduler()でOSカーネルを起動します(prv/x/vなどはFreeRTOS関数名の接頭語で決まり文句)。
右側のvLEDTask0~2()がタクス本体です。vTaskDelay()の変更で、トグルタイミングが簡単に変えられます。

このように組込OS:FreeRTOSを使えば「タスク単体開発/変更が容易」であることが解ります。

デバッグビルド時のリソース使用量は、約10kBです(弊社マイコンテンプレートで同じ処理の場合は、半分の5KBで実現、どちらもLPCXpresso v8.0.0でLPCOpenライブラリ込みの結果)。ソースコードから、その殆どがFreeRTOS(含むライブラリ)を利用するためのサイズです。

組込OSのメリットは、「タスク開発の容易さ」、デメリットは、「利用のオーバーヘッド」です。このオーバーヘッドには、上記リソースの他に、様々なOS知識やコツ、利用経験など数値に現れないものも含みます。

従ってこのメリットデメリット両方を天秤に掛け、組込OSを使うか否かを判断する必要があります。

またデバッグは、追加したタスクが主ですが、最終的にはOSも含めたトータル動作確認が必要なため、OSをブラックボックスとして扱えるのかも考慮する必要があります。
※Windowsに代表されるOS改版に悩まされる危険性にも配慮しましょう。

ARM mbed OS

ARM Cortex-M0/M0+クラスのマイコンであるLPC824への上記FreeRTOS適用は、まれな例です。
なぜなら、多くの場合FreeRTOSは、Cortex-M3、例えばNXPならLPC17xx、またはより高性能なマイコンへの適用が多いからです(Cortexの性能比はコチラを参照)。天秤判断の結果でしょう。

GNU General Public License (GPL)のFreeRTOSは、その名の通り無償:Freeで多くのマイコン搭載実績もあります。しかし、ROM/RAMが少なく低価格を追求したCortex-M0/M0+クラスのマイコンには、少し「荷が重い」と個人的にも思います。

このCortex-M0/M0+クラスを含むCortex-Mマイコンに向けてARM社自身が開発中の新OSがmbed OSです。2015年10月リリースの予定でしたが、正式出荷はまだです。

IoT向けの機能も追加するmbed OSは、実質上対応OSが無いCortex-M0/M0+にも使える可能性がある組込OSです。

マイコンテンプレートのLチカソフト

FreeRTOSのLチカサンプルと同じマルチタスク処理を、弊社マイコンテンプレートで行った時のソースコード(一部抜粋)が下記です。
FreeRTOSと同じSysTick割込みを1msに設定していますので、解り易いソースコードとなっています。

テンプレートのLチカサンプルソフト
テンプレートのLチカサンプルソフト
テンプレートのLチカソフト使用量
text data bss dec hex filename
4580 8 20 4608 1200 BlinkyLikeRTOS_824.axf

 

トグルタイミングの変更は、FreeRTOSと比べると複雑ですが難しくはありません。何より、処理が全部見えますので理解や変更は容易です。しかもコードサイズは、半分以下です。

Cortex-M0/M0+、または同程度のマイコン性能でマルチタスク処理をさせるなら「マイコンテンプレート」をお勧めする理由です。

* * *

そこで、次回以後何回かに分けて、簡単にマルチタスク処理が実行でき、デバッグも容易なマイコンテンプレートのTipsや利用のコツを示します。
現在販売中の5種マイコンテンプレートに興味がある方は、コチラを参照してください。

マイコンテンプレートサイト更新完了

12月30日のPSoC 4、PSoC 4 BLE、PRoCテンプレート発売に間に合わなかったマイコンテンプレートサイトの更新が完了しました。

今回の更新では、LED照明ページを削除し、マイコンテンプレート関連のみのサイトとしました。昨年10月のサイト障害時の、“Simple is Best”の経験が理由です。

LPCXpresso v8.0.0へ更新

Freescaleを買収した新NXP、ARM Cortex-M0/M0+マイコンの今後のラインアップについては、気になるところですが解りません。NXPサイトを観ると、LPC8xx/111x、旧FreescaleのKinetisシリーズ全てがそのまま残っています。暫くは、様子を観察する必要がありそうです。

例えば、Cypressは、2014年末に買収したSpansionのFM0+マイコンを1年経過後の2015年11月、Cypress名で発売しました。このように、買収や合併で既販マイコンがどうなるかの判断は難しいものです。

そんななか、LPCXpressoは、v8へ更新されました(更新日は合併完了直前の2015/11月、LPCOpenは、V2.19のまま更新無し)。また、Kinetis Design StudioやProcessor Expertも更新されております。新マイコン追加等はありませんが、最新版へのUpdateをお勧めします。

Windows XPサポート終了とWindows 10への対応だと思います。どちらのIDEもEclipseベースですので、これも統合などがあるかもしれません。

新NXP誕生

NXPによるFreescale買収完了のお知らせメールが来ました。新NXPによる力強いメッセージは、コチラでご覧いただけます。
NXPとFreescaleのマイコンが今後どうなるかは、未だ不透明です。このままX-mas休暇に入るかもしれません。

ルネサス株式の一部売却や、東芝からSony/シャープへの技術移籍/移管が取りざたされています。日本半導体カンパニの先行きも不透明ですね。

半導体業界動向に惑わされないマイコン技術習得

NXPによるFreescale買収など、マイコン半導体ベンダーの動きが激しい2015年末ですが、唯一ともいえる日の丸半導体、ルネサスエレクトロニクスの筆頭株主の産業革新機構が、保有するルネサス株式の一部売却の検討に入ったというニュースが、11月21日報道されました。

売却先候補は、トヨタやパナソニックなどの日本企業と、ドイツ)インフィニオンなどが挙がっています。

日本企業がルネサスを保持したい理由は、自動車向けの需要や、相対的に弱体化した日本エレクトロニクス業界の現状が背景にあると思います。もちろん、日本人開発者にとっても、日本語環境や日本語コミュニティが提供されるルネサスマイコンは貴重な存在です。

今後の機構の動きは、要注意ですね。因みにルネサスのSynergy詳細が明らかになりました。
記事によると、“既存ファミリ「RX」「RZ」「RL」は長い成功の歴史があり、今後のロードマップが決定しており、顧客に長期サポートを約束しているので、ロードマップ変更ができない”、そこで、新たなCortex-M系を用いたSynergyが米国で開発されたようです。

つまり、「RX」「RZ」「RL」が既存国内資産継承と車載向け、「Synergy」が半導体業界の“Apple”目標のUS発新設計基盤でIoT向けのようです。
だとすると、この2つでルネサスを分割するシナリオが、最もありそうだ、と思いますが…?

マイコンは、「ARMとそれ以外」にコアが別れ、「車載とIoT」でマーケットが決まりつつあります。
自動車産業と同様、国レベルで保護や競争がある半導体業界のM&Aは、予測の域を超えています。しかし、状況がどう変わっても「開発者が生き残れる技術蓄積は必須」です。

シンプルな弊社マイコンテンプレートも、その1つになればと願っております。

ブログカテゴリ修正

マイコンのサブカテゴリを、6種のマイコンとIoT向けPCに修正しました。

ARM Cortex-M0+またはM0コアのマイコン、FreescaleのKinetisマイコン、NXPのLPCマイコン、ルネサスのRL78マイコンとR8Cマイコンです。
IoT向けのPCは、Windows 10 IoTコアを実装できるCPUボードを対象としました。

KinetisとLPCマイコンは、Cortex-M0+/M0マイコンと重複しています。
これは、Cortex-M0+/M0を重視したためで、このカテゴリから、今後新しいマイコンが発売されることを想定しています。

この基になった記事がコチラです。「Cortex-Mプロセッサを軸にしたARMのIoT戦略」の項で、市場早期対応にARMコア利用が優れていること、小さな実装面積と少ない電力要求のIoT市場にはCortex-M系が良く、Bluetoothなどの無線IPをSoC実装した新マイコン発表の可能性を示しています。

正式版がリリースされた無償Windows 10 IoTコアは、Wi-FiとBluetoothサポートなので、この新マイコンとの相性も良さそうです。

ブログ記事検索は、キーワード短縮表記をお使いください

カテゴリ修正に合わせて、過去の記事のタグ追加と修正も試みましたが、記事数が多いので断念しました。従って、記事の検索にタグを使うと、検索漏れが生じます。

ブログ記事のタグ検索
ブログ記事のタグ検索

対策として、関連記事の検索は、「検索窓にキーワードの短縮表記」をお使いください。例えば、LPC812とLPC824の記事を検索するときは、“LPC8” を入力するなどです。タグ検索よりは遅いのですが、検索漏れは防げます。よろしくお願いいたします。

ブログ記事のキーワード検索
ブログ記事のキーワード検索

マイコンIDE習得のポイント

Windows 10 Home Update制御

販売中のマイコンテンプレート説明資料は、テンプレートについて重点的に説明しています。しかし、ご購入者様から頂く質問には、テンプレート動作環境、つまりマイコンIDEに関するものも多くあります。
今回は、このマイコンIDE使い方のコツ、ポイントを説明します。

Windows 10発売を機に、皆さんは今新しいOSの機能や利用方法を習得中だと思います。マイコンIDEと、このWindows 10を関連付け解説を試みます。

マイコンIDEは、OSと考えるべし

Windows 10、旧Windows 7や8と比べると、新ハードウエアやネットワーク、セキュリティ対応に機能満載です。多くの設定項目がありますが、最初はデフォルト設定で動かすのが良いでしょう。慣れてくれば、設定をいろいろに変えて、自分好みにカスタマイズもできます。

マイコンIDEも同じです。IDEは、多くのマイコン機種、使用言語、デバッグ方法に対応できるよう多くの選択肢:プロパティを持ちます。ユーザマニュアルにも、多くのページを使ってプロパティの説明があります。しかし、IDEを使う時に、これら多くのプロパティを、全部知るのは無理ですし不要です。

Windowsと同じく最初はデフォルトで使用し、徐々にカスタマイズするのがIDEやOSなどの環境ソフトの使い方です。

初心者にとって、デフォルト設定でIDEが使えればありがたいのですが、多くのIDEは、中級~上級者へも対応する、いわば「初心者と中級者以上の二兎を追う方式」のため、多少のカスタム設定が必須です。
このカスタム設定が最も少ないのが、IDEベンダ提供の標準評価ボードを使ったマイコン開発時です。弊社テンプレートが、この評価ボードで動作確認しているのもこのためです。

  • マイコンIDEのプロパティ設定が多いのは、しょうがない。
  • カスタムプロパティ設定の少ないIDE+標準評価ボードが、マイコン初心者には適す。

マイコンIDEの使い方ポイント

使用するマイコン、開発言語(C/C++ または アセンブラなど)、IDE(コンパイラやデバッガなどの開発環境)は選定済みとします。この時のIDE設定手順が下記です。3段階から構成されます。

マイコンIDE設定手順
マイコンIDE設定手順

IDEへ使用マイコンとデバッガなどの環境ツール設定が、最初の段階です。ここでは、Rapid Application Development: RADツールを使用するか否かなども選択肢になります。MCU:マイコン本体クロック設定と周辺回路の設定が、次の第2段階です。最後が、IDEが出力したスケルトンソースへ、ユーザソースを追加し、ビルド&ボードデバッグを繰り返し行い、アプリケーションを完成させます。

ポイント1:IDE生成スケルトン理解

直ぐにユーザソースを追記したい気持ちは解ります。しかし、使用するRADツールに応じてIDEが生成するスケルトンが異なることがよくあります。例えば、FreescaleのKinetis Design Studioの場合、RADツールにProcessor Expertを選ぶ場合と、Kinetis Software Development Kitを選ぶ場合とでは、スケルトンが異なります。ルネサスのCS+でも、コード生成の有無でスケルトンは全く異なります。

先ず、IDEが生成する「スケルトン動作を把握することが最重要」です。このために、RAD選択肢を変えることも必要でしょう。殆どのIDEの場合、第2段階のMCUクロックは、デフォルトで安全動作周波数に設定済みです。従って、周辺回路なしでも生成されたスケルトンコードでボードデバッグができます。

スケルトン動作把握とは、「マイコン電源投入後、順番にどの処理を行い、main()を呼出しているか、次に、割込み処理の記述はどこで行っているかを知ること」です。

main()呼出しまでの処理(スタートアップ処理)は、MCU動作クロックを変更する場合などを除けば、大体把握できればOKです。また、マイコン機種による違いも少ないです。

一方、割込み処理記述は、使用マイコンやIDEにより様々です。経験的に、IDEと標準評価ボードの組合せで用いる記述方法が、解りやすさや柔軟性に優れます。素直に、この方法でユーザ処理を追加することをお勧めします。

  • IDE生成スケルトンは、使用RADツールにより異なる。
  • 生成スケルトンの動作を把握することが最重要。

ポイント2:デバッガ接続

最初は、MCUクロックはデフォルト設定、周辺回路なし、スケルトンコードのみでビルドします。このビルドは、IDE生成分のみですので100%成功するハズです。

問題は、デバッガ接続です。

IDEがサポートするデバッガは、通常4~6種類もあります。デバッガに応じてさらに詳細設定が必要ですので大変です。ここは、ユーザマニュアルの「対応デバッガ部分のみ」を注意深く読んで、設定する必要があります。ユーザマニュアルが分厚いのは、このように対応種類が多いためです。使用するデバッガのみに絞って読めば、恐れるに足りません。

IDEとデバッガを接続後、ビルド出力をボードへダウンロードし、デバッガで動作確認します。何もユーザ処理を追加していない時の動作、例えばスタートアップ処理後のRAMクリア状態などが確認できます。

ユーザ処理は追加していませんが、これでIDEの処理全体を一通り試すことができます。

  • IDEとデバッガ接続は、ユーザマニュアルの対応部分を拾い読み。
  • 最初のビルドは、スケルトンコードのみでデバッガ接続しIDE全体処理を体験。

ポイント3:サンプルソフトAPI利用例を活用

スケルトンは、骨組みです。この骨組みに、ユーザ処理を追記すれば、アプリケーションが完成します。

骨組みには、IDEが使用周辺回路に応じてライブラリを生成します。このライブラリへのインタフェースがAPIです。IDEの役割は、APIの中身を作ることです。

ユーザソースは、このAPIの使用順序を記述するのみと考えても良いです。少し前までは、このライブラリもユーザが開発していました。しかし最近は、ライブラリはベンダが提供します。ベンダ提供ライブラリを使えば、ユーザソースは、API使用順序のみですので、移植性やメインテナンスも楽です。

APIの使用法は、これも分厚いAPIレファンスマニュアルに記述されています。しかし、真面目にこれを読む前にサンプルソフトを参照します。典型的な周辺回路APIの使い方、これがサンプルソフトです。サンプルに出てくるAPIのみをレファレンスマニュアルでチェックすれば十分です。サンプルソフトの選び方は、コチラを参照ください。

  • IDEは、スケルトンと、使用周辺回路に応じたAPIを生成。
  • サンプルソフトを参照し、典型的なAPIの使い方を学ぶ。

まとめ

多くのプロパティがあり、付属マニュアルも厚いので取っ付きにくいマイコンIDEですが、ここで示した方法を用いれば、早く効果的にIDEを習得できます。

具体的な話が少ないので、皆様のお叱りを受けそうですが、少しでもご参考になれば幸いです。

* * *

Windowsには、様々なTipsがあります。各マイコンIDEのTipsも少なからずありますが、ここでは個々のIDEによる違いは無視して説明しました。実は、IDEで差が生じるのはRADです。RADに対しては、初心者の方は、少し力を入れてマニュアルを読む必要があるかもしれません。
但し、これも必要な周辺回路の箇所のみを拾読みすれば、事足ります。分厚いマニュアルは、読む箇所を間違わないように、拾読みで対処しましょう。

Windows 10 Home UpdateコントールTips

マイコンIDEで具体例が無かった代わりのTipsです。
Windows 10 HomeでOS Updateをユーザが制御できない問題に対し、フリーソフト: Winaero Tweakerが役立つかもしれません。Technical Preview対応ですが、製品版にも使えそうです。

Windows 10 Home Update Control
Windows 10 Home Update Control

速報 Windows10 Homeで各社マイコンIDE起動確認

Windows10 Home
Windows10 Home
Wnidows10で動作中の各社マイコンIDE
Wnidows10で動作中の各社マイコンIDE

7月29日から配布開始されたWindows10 Homeで、ルネサスCS+、NXP LPCXpresso、フリースケールKDSの各社マイコンIDE起動を確認しました。

予約後、順次Windows10へのUpdateが開始されています。私のノートPC:Windows8.1無印64bit版が、無事Windows10 HomeへとUpdateされました。早速、各社のマイコンIDEを起動しましたが、問題なく動作しています。今のところ。

Windows8の時と比べると、問題が少ない感じがします。他の開発PC:Windows 7 UltimateとWindows8.1 Proは、Updateを遅らせ様子をみる予定でしたが、この感じだと全てUpdateしても良さそうです。

Windows10 HomeはUpdateをコントロールできない

Windows10 Homeは、Windows自身のUpdateタイミングをユーザがコントロールできません。コントロールパネルにWindows Updateが無いのです。意識しなくても自動的に常に最新Windowsが使える反面、更新による既存アプリの動作トラブルリスクもはらんでいます。

リスク回避には、Windows10 Pro以上の版に備わるUpdateタイミングコントロールが必要です。しかし、結局、最新OSで正常に動くことがWindowsアプリには要求されるでしょう。Windows10アプリ開発は、これまで以上に大変そうだと感じるのは私だけでしょうか? 各社のIDE開発担当者の負担は、増える一方です。

EclipseベースのIDEが増えつつあるのは、こうした背景があるのかもしれません。ルネサスのCS+は、独自開発の使い易いIDEですが、Eclipseベースのe2 Studioも視野に入れる必要があるかもしれません。

NXPのFreescale買収、株主承認取得

NXPによるFreescaleの買収に進展があり、7月2日株主承認が得られました。後は、規制当局の承認を得て、予定通り今年の終わりまでに完了するようです。

気になる両社のCortex-M0/M0+マイコンの今後については、未だ不明確です。
個人的には、統合開発環境IDEは、NXPのLPCXpresso、Rapid Application Development : RADツールは、FreescaleのProcessor Expertが好みなので、折衷的なIDEができると嬉しいです。両社同じEclipseベースIDEですが、異なります。

ルネサスの新マイコン:Renesas Synergy MCUも、EclipseベースIDE(E2Studio?)でARM Cortex-M0+/M3/M4コアと予想しています。この新マイコンの詳細発表は2015年4Qで、NXP買収完了とほぼ同じタイミングです。

Kinetis Design Studio V3.0.0リリース

FreescaleのKinetisマイコン無償開発環境KDSの新バージョンV3.0.0が2015年5月5日リリースされました。関連資料から、特徴を探ります。

ポーティングガイトが詳しくなった

以前は、Code Warriorからの移行ガイドのみでしたが、これに旧KDSからの移行も加わりました。つまり、KDS V3.0.0で旧版プロジェクトを変更すると、変更後は、旧版では、Openできないということです。KDS V2.0.0を継続して使われる方は、注意が必要です。

Processor Expert V3.0.0へ更新

旧PEで、TSS_LibraryがFRDM-KE02Z40評価ボードで正常動作しない不具合が解消されたかは、後日報告します。

Kinetis SDK v1.2.0でサポート評価ボードが増えた

KSDK v1.2.0サポートボード一覧
KSDK v1.2.0サポートボード一覧

残念ながら、Kinetisテンプレートで使用したKシリーズマイコンのFRDM-KE02Z40Mボードは、V3.0.0でもSDKサポートはありません。SDKメリットは、ボード動作確認済みのサンプルソフトが、Freescaleから提供されることです。
次期Kinetisテンプレート候補のLシリーズは、多くの低価格評価ボード(FRDM-KLxxx)がサポートされていますので、この中らか対象マイコンと評価ボードを選定する予定です。

以上、KDSV3.0.0リリースの速報でした。

CypressとSpansion合併

2015年3月15日、Spansionは、Cypressと合併しました。

ARMコアでプログラマブルなアナログ周辺回路が特徴のCypressと、自動車/産業機器に強いシェアをもつSpansion、「新生Cypressは、車載、産業機器、民生機器、ウェアラブル端末、IoTなどの世界市場でシェアを拡大すべく、組み込みプロセッサやメモリの製品ポートフォリオの拡充を図っていく」とのことです。

ARMマイコン業界も数年前の自動車業界と同様、会社規模の集約化が進んでいくのでしょうか?  NXPとFreescale合併後、ARM Cortex-M0/M0+の製品ポートフォリオの変化の有無が気になる今日この頃です。