LPC8xx使用ライブラリとプログラムサイズ

LPC8xxには、2種類ライブラリがあることは以前記載しました。さらにROMにもI2CやUARTなどのライブラリがあるので全部で3種類ですが、今回は、最初の2種類、LPCOpenライブラリと従来ライブラリ(LPCCloseと呼ぶ)で、どの程度Flashプログラムサイズが変わるかを示します。

新規Cプロジェクトサイズ

LPCXpressoでLPC820新規Cプロジェクト作成直後のDebugビルドでのプログラムサイズが下記です。コンパイル最適化などは行っていません。つまり、ブート処理のみ行い、何もしないCプログラムです。

プログラムサイズ CRP有効 CRP無効
LPCOpenライブラリ使用 1952バイト 1540バイト
LPCCloseライブラリ使用 1140バイト 728バイト

※LPCXpresso_7.1.1_125で実施。2014/05/25現在、最新版は、LPCXpresso_7.2.0_153。

CRP: Code Read Protectionとは、Flashプログラムの読取りに制限やプロテクトをかける機能で、この機能を有効にすると約400バイト必要になることが判ります。製品出荷時には必要になる機能でしょう。

何もしないプログラムのFLASH専有率

CRP有無と使用ライブラリで4つの組合せを示しました。LPC8xxデバイスのFlash容量に対するこれらの占有率を示します。

何もしないプログラムのFLASH専有率(%)  専有率
LPCOpen CRP有効 48% 24% 12%
CRP無効 38% 19% 9%
LPCClose CRP有効 28% 14% 7%
CRP無効 18% 9% 4%

 

8ピンのLPC810はFlash容量が4Kバイトですので、LPCOpenライブラリでCRP有効にすると1952/4096=48%のサイズを「何もしないプログラム」で専有します。Cortex-M0+マイコンは、同一処理では他マイコンよりも小さいコードを生成しますが、それでも少ない残り量です。追加開発する処理量にもよりますが、30%以下を一応の目安とすると、LPC810にはLPCCloseライブラリを使う方が良さそうです。

一方、LPC810以外は、LPCOpenライブラリが使えそうです。LPCOpenライブラリは、評価ボード別やマイコン別の層構成になっていますので、LPCCloseに比べオーバーヘッドがある分、サイズが大きくなります。しかし個人的には、標準Cライブラリに近く洗練された感じがして好きなライブラリです。また、オープンな場で、使い方やバグ情報があるのも良い点です。勿論、層構成ですので、別マイコンやボードへの移植性も高いです。今後は、このLPCOpenライブラリが主流になると思います。

LPC8xxテンプレートをLPCOpenライブラリで開発したのは、このような経緯がありました。

LPC8xxテンプレート(LPCOpen+ROMライブラリ版)発売

LPC8xxテンプレート(LPCOpen+ROMライブラリ版)を¥1000(税込)で販売します。テンプレート概要と仕様は下記です。

LPC8xxテンプレート概要(もくじP1)
LPC8xxテンプレート概要(もくじP1)
LPC8xxテンプレート仕様(もくじP2)
LPC8xxテンプレート仕様(もくじP2)

テンプレートは、LED出力とSW入力のみを組込んだ「シンプルテンプレート」と、組込み必要機能をほぼ全て盛込んだ「メニュードリブンテンプレート」の2つをセットにし、もくじ内容のPDF資料添付で¥1000です。

購入ご希望の方は、メール(宛先:info@happytech.jp)にてお知らせください。銀行振込口座を返信いたしますので、税込代金¥1000円を振込でください。入金確認後、全解説ページとテンプレートプロジェクトをメールにてお送りします。後は、ご自由にテンプレートへ変更や修正を加えて頂いて、LPC8xxの習得、本来のアプリ開発に役立てて頂ければ幸いです。

「シンプルテンプレート」は、LPCXpressoプロジェクトファイルで、LED出力とSW入力のみの機能をプログラム済みで、LPCXpressoLPC820評価ボード単独での動作が可能です。

「メニュードリブンテンプレート」は、LPC820評価ボードにBaseBoardを接続し、I2C EEPROM、LCD、UARTなどの組込みマイコンに必要な機能をほぼ全て実装したテンプレートです。PC接続のメニュードリブン方式で作成したため、関数単位で移植性が高いソフトです(もくじP1動作中の写真、P5ファイル一覧、P10ハードウエア構成などを参照)。

テンプレートは、NPX/ARM社提供のLPCOpenライブラリ(V2.01)とマイコンROMライブラリを使っています。LPC8xxには、上記の他に、従来版ライブラリもありますが、本テンプレートは使っていません(もくじP8に詳細記載)。従来版ライブラリ使用のテンプレートも、近日中に開発、別売(予価¥1000)予定です。従来版ライブラリのテンプレートをご希望の方は、しばらくお待ちください。

Cortex M0+マイコンのLPC8xxは、8/16ビットマイコンの置換えを狙った、従来品より高性能な割込み専用回路や低消費電力、低価格が売りの、世界定番ARM32ビットマイコンです。本テンプレートと確実に動作する市販評価ボードを使えば、LPC8xx習得、早期アプリ開発や評価に最適な環境が得られます。

このテンプレート対象者は、初級~中級のソフト開発者です。上級者は、これに似たテンプレートを既に持っているからです。本来は、上級者がテクニックを含む自分のテンプレートを初級~中級者へ教え、教えられた側でさらに、テンプレートに修正を加えれば、技術継承も容易です。しかし、この継承は、習得済みの者にとっては、オーバーヘッドで、未習得の者にとっては、理解困難な面が多いものです。販売テンプレートには、詳細な資料が付いていますので、だれにでもその内容が理解できます。また、テンプレートソースには、「判りにくい英語ではなく、日本語コメント」を豊富につけていますので可読性も高いと思います。

PS:ルネサスのRL78/G1xマイコンのテンプレートもコチラで販売中です。

LPC820 vs. RL78/G13 割込みコントローラ比較

NVICとRL78/G1xの割込みコントローラ比較

LPC820やCortex M0/M0+マイコンは、割込み処理性能を強化した新しいNVIC: Nested Vectored Interrupt Controllerを持っています。RL78/G1xは、4バンク構成の従来型割込みコントローラです。NVICは、これまでソフトで行っていた割込み 処理を、殆どNVICハードで行います。頻繁な割込みに対する効率化(テール・チェイン)などにより、割込み応答時間が均一になり、高速処理が可能です。

CPU LPC820 RL78/G13、RL78/G14
割込み回路 NVIC: Nested Vectored Interrupt Controller Interrupt Controller
レジスタバンク なし 4バンク(RB0/1/2/3)
レジスタ待避場所 スタック バンク
バンク使用時はスタック
PUSH/POP動作 ハード:NVIC処理(ソフト比、応答時間が均一で高速 ソフト処理
多重割込み受付 デフォルト許可 デフォルト禁止(受付はソフトでEI設定要)
テール・チェイン機能 あり なし
割込み優先レベル 4(高0/1/2/3低)、デフォルトレベル0 4(高0/1/2/3低)、デフォルトレベル3
ISR記述 規定ISR名でCソース記述(オーバーライド可能) __interruptを付加し、規定ISR名記述(オーバーライド不可)

 

割込み起因のバグは、再現性が低く、デバッグが厄介なものです。定量的な評価はできませんが、NVICの謳い文句やこの比較表以上に、割込み処理に対して、有効になると思います。

LPC820 vs. RL78/G13 I2C API比較

マイコンによるI2C APIの差

API比較
API比較

マイコンのI2CにEEPROMを接続する例でAPIを比較します。RL78/G13、RL78/G14、LPC820のI2C関連APIの関数名だけを抜き出して列挙しました。太字は初期化関数です。

RL78/G13とRL78/G14は、CubeSuite+のコード生成を使うと、両マイコンとも同じAPI関数でEEPROM制御ができますが、ここでは、あえて出典のアプリケーションノートを使った場合を示しました。これらアプリノートは、最近リリースされたものです。

この表からマイコン、メーカでAPIとアプリの切り口が、かなり異なることが判ります。例えば、RL78/G13の場合は、SCLのHigh/Low出力など、プリミティブなAPIがあります。RL78/G14は、上位/下位の2階層構成(_EepMdl_と_Drv_で分離、各層に初期化があるので太字関数は2つ)で、マルチスレーブが容易です。LPC820は、3つの中では最もシンプルなAPIでCubeSuiteのコード生成出力に近いものです。

一方、最もアプリに近いAPIは、似ています。例えば、R_EEPROM_R、R_IIC_EepMdl_Read、I2C_MstReceiveやR_EEPROM_W、R_IIC_EepMdl_Write、I2C_MstSendなど。

このように比較的よく使われるEEPROM接続でも、APIは様々です。従って、APIを利用するアプリケーションも、残念ながら異なるものとなります。マイコン選定に当たって、デファクトスタンダートや、開発者の経験で選ばれる理由がここにあります。

テンプレートは、市販の入手容易なボードと無償ツールを使って、結局はオーダーメードになるマイコンアプリの初期立ち上がりを加速するためのものです。人気のあるマイコン機種と使い方を厳選し、トリッキーな手法なしに、素のマイコン性能を引出せるテンプレートを目指します。テンプレートに対するご意見、ご希望などは、info@happytech.jp へお寄せください。

I2C接続EEPROMの使用シナリオ

前回の記事で問題にしたLPC8xxテンプレートI2CのAPIは、「LPCOpen」と「内蔵ROM」両方を使うことに致しました。UARTはLPCOpneを使うとデバイス最高速度30MHzで動作しますので、これでLPC8xxテンプレート開発を続けます。

 

さて、I2CのAPIを使ってテンプレートにどのような使用例を追加すべきかを検討しました。接続デバイスは、「I2Cインタフェースで最も利用が多いEEPROM、動作は、ページライト/シーケンシャルリード、保持データは、マイコン再起動時に必須となるデータ、例えば、電源断時のスイッチ状態」などとします。

これは、RL78/G1xテンプレートのデータフラッシュ使用例と同じです。RL78/G1xは、4KBのデータフラッシュを内蔵しており、様々な使い方ができます。私は、このデータフラッシュにEEPROM的な使い方を想定し、RL78/G1xテンプレートに実装しました。

LPC8xxには内臓データフラッシュはありませんが、IAP: In-Application Programmingという64バイトのページ(ページについては後で示す)を持つROM書込み/消去の機能があります。これを使うと、EEPROMの代用ができます。が、ROM自体をプログラムで書換えるのは、少し抵抗があります。従って、LPC8xxテンプレートにはIAPを実装しない予定です。代わりに、応用範囲の広いI2CにEEPROMを実装します。

I2C接続のEEPROM仕様

EEPROM仕様
EEPROM仕様

I2C接続の代表的なEEPROM仕様を示します。容量が大きくなると、ページデータ数が16、32、64、128バイトへ増えます。ページとは、纏めてライトする時の単位です。EEPROM書込み保障回数は、10万~100万回ですので、1バイト毎にライトする代わりに、ページ単位にデータを纏めてライトすると、ライト回数を減らせます。しかしその分、ページライト後に待ち時間も発生します。

リードは、最後にライトしたアドレスのデータを読む、カレントアドレスリードが基本です。任意アドレスリードは、ライトデータを0にしたダミーライトを行い、カレントアドレスを再設定した後で通常リードをします。カレントアドレスから、最大アドレスまでのシーケンシャルリードが可能です。

EEPROM使用シナリオ

これらリード/ライト方法や仕様を俯瞰すると、EEPROMに保存するデータは、ページ単位が適していることが判ります。また、使い方は、マイコン起動時、最後にEEPROMにページライトしたデータをリードしマイコン運用、これらデータ更新時に、更新データを一塊のページ単位でEEPROMへライトし、再起動に備えるなどを想定します。そこで、このシナリオでLPC8xxテンプレートに実装します。

API利用マイコンプログラミング

3種類のAPIライブラリ

LPC8xxマイコンプログラミングのAPIライブラリは3種類あります。以前記事のLPCOpenとLPCClose、加えてLPC8xx内蔵ROMでI2CやUARTのAPIを提供中なので3種類です。

API提供ライブラリ 状況(2014年3月現在)
LPCOpen:Lpc_chip_8xx_lib I2C関連のi2c_8xx.cは、clock enable/disableのみ、他は未実装(V2.01版)
LPCClose:Lpc800_driver_lib 全API提供中(2012/12/18版)
内蔵ROM UARTは、デバイス最高動作速度の30MHzで動作せず

 

2014年3月現在の各ライブラリ状況を示します。個人的に、LPC8xxテンプレートには、「LPCOpen」を使いたいと考えてきました。しかし、最大動作速度30MHzでのテンプレートには、「LPCClose」を使わざるを得ないようです。少ピンLPC8xxの活用には、I2Cインタフェースが重要ですが、LPCOpenライブラリI2C関連は未完成だからです。

私の推測ですが、ROM APIでLPCOpenのi2c_8xx.c未完成部分の代用ができますので、i2c_8xx.cはこのままの状態で落ち着く可能性があります。この場合の問題は、LPC8xx最高速度30MHzでROM APIが動作しない点です。

解決策は2つ。1つは、テンプレート30MHz動作をあきらめ、ROM APIが動作する最高速度24MHzに変更すること、もう1つがLPCOpenの代わりにLPCCloseを使うこと、です。世界標準のLPC8xxは、まだ新しいマイコンなので、状況が変わるまでしばらくは我慢も必要です。

API利用のマイコンプログラミング

開発中のLPC8xxテンプレートは、LPCOpenからLPCCloseへ使用API変更の可能性が出てきました。2つのライブラリを同時に使用することも考えましたが、ソースが煩雑になりますし、気持ちも悪いので止めます。

そこで、使用ライブラリの変更やライブラリ自身のバージョンアップに耐えられるプラグラミングについて検討します。その結果、2つの方法でAPI関数にアクセスします。

API利用方法 説明 使用例 API変更時
直接型 ユーザソースからAPI関数を直接コール クロック設定など エディタ一括変更
間接型 ユーザ前処理関数内でAPI関数をコール I2C、UARTなど 前処理関数内のみ

 

「直接型」は、ユーザソースにAPI関数をそのまま記述する、本来なら一般的な方法です。これに対して、「間接型」は、APIコールの前に何らかの関連処理や前処理が必要な場合で、この処理を1か所に纏めユーザ関数化します。つまり、利用側のユーザソース→纏めたユーザ関数→API関数の順番にアクセスします。今回のような使用APIの種類変更時には、この関連処理を纏めたユーザ関数内のみの変更で済みます。直接型の変更は、エディタの一括変更などで対策します。

例を示します。I2Cマスタ送信API関数は、データの中身は無視して、送信バイト数分を、I2Cバスに送信します。一方、API利用側は、EEPROMとセンサデバイスなどでは、リード/ライトアドレス長が2バイト/1バイトと異なるので、それぞれ別のデータフォーマットを持ちます。そこで、このデバイス毎のデータとAPIフォーマット変換を前処理にして関数化します。I2C送信は、全てこの前処理関数を経由してI2Cマスタ送信APIを利用します。その結果、API変更の対策は、前処理関数内に閉じ込められます。

この方針でAPIを利用すれば、使用APIの変更やAPIバージョンアップに対しても、ユーザソースの変更箇所を集中させ、かつ、簡単に変更できます。

LPC8xxテンプレート開発環境

LPC8xxテンプレートは、デバッガ付きでLPC820実装のLPCXpresso Development Board(LPC820評価ボード)で開発します。この評価ボードにLCDやUARTドライブ回路を追加すれば、テンプレート開発環境が完成します。
RL78/G1xテンプレート開発時は、ブレッドボード上に追加回路を実装しました。しかし、簡単に追加回路を実現するには、ドータボード利用が便利です。そこで、LPC820評価ボードに接続可能なボードを調べましたが、2014年1月時点では適当なものが見つかりません。

LPC1114用 mX-BaseBoardの流用

LPC1114やLPC1343などのLPCXpresso用ドータボードとしては、印)NGX社からmX-BaseBoardが販売中です。ブザー、I2C接続EEPROM、LED、タクトSW、UARTドライバ回路などが追加済みですが、LPC820評価ボードは接続対象ではありません。恐らくLPC820ボード側のIOピン配置に問題があろうと想像します。しかし、LPC820のスイッチ・マトリクス機能を使えばIOピンにLPC820マイコン周辺回路を自由に割当てられるので、この問題は回避できるハズと考えました。また、電源ピンの接続は問題なさそうですので、下記のようにmX-BaseBoard上にLPC820評価ボードを実装し、LPC8xxテンプレート開発環境としました。

PC8xxテンプレート開発環境
PC8xxテンプレート開発環境

LPC8xxの2種類のAPIライブラリ

LPC8xxのサンプルコードには、2014年2月現在、2種類の既成APIライブラリ(ドライバ)があります。

1. LPCClose:LPCXpresso_7.0.0_92付属のNXP_LPC8xx_SampleCodeBundle.zip

2. LPCOpen:LPCOpenサイトのLPCOpen-LPCXprersso LPC812, LPC800-MAX/LPCXpresso, Keil_IAR

両者の違いは、2が3階層ライブラリ(私は下図のように理解)、1は、従来からある階層なしのライブラリです(詳しくは、コチラ)。LPCCloseは、LPCOpenに対して、私がかってに付けた名前です。

LPCOpenの目的

LPCOpenの構造
LPCOpenの構造

 私は参照してもLPCOpen理解度はイマイチなのですが、目的は周辺回路のライブラリ汎用化、ひいてはCライブラリのような標準化とOpen開発によるAPIバグ取り、CMSISのドライバ版と理解(想像?)しています。

既成API利用のプログラミング

一方、LPCClose側のライブラリ評判は、良くありません。既成API利用のプログラミングは歴史が浅く、ドライバ側の改版も順次進むでしょう。また、いずれのサンプルもLPC8xxの最大特徴、スイッチ・マトリクス・ツール(ver1 20130602版):SMTの出力を使ったコードはありません。SMT完成が2013年6月なので、サンプルコード開発に間に合わなかったのが原因と思います。が、現状でもSMT出力をLPCOpenソースへ代入するとコンパイルエラーが生じるなど、新しい製品なのでしかたがないのでしょう。ソフト開発を複数人で行うと必ず生じる副作用だと思います。

LPCOpenの選択

ポイントは、既成ドライバの改版時、ユーザ開発部分に影響が少ない(理想はゼロ)構成にしておくことです。LPCOpenヒストリーを観ると、現在のv2.01までに5回改版されています。

このような状況ですが私は、LPCOpenライブラリを使います。バグ取りの進み具合がOpen開発なので早そうなのと、Cライブラリの雰囲気があるからです。その分、LPCCloseに比べ、解読しにくい箇所もありますが、組込みマイコン標準周辺回路ライブラリを夢見て活用したいと思います。

サンプルソフトの構造

LPC8xxテンプレート開発時に参考にするサンプルソフトの構造について説明します。

サンプルソフトの構造
サンプルソフトの構造

RL78/G1xの無償IDEは、CubeSuite+、GUIで周辺回路のパラメタを設定すると、使用分の周辺回路APIが生成される優れものです。詳しくは、コチラの記事などを参照してください。一方、LPC8xxの無償IDEが、EclipseベースのLPCXpressoです。パソコンへのインストとアクティベーションなどは、トラ技2014年2月号やLPCXpressoサイトを参照してください。LPCXpressoもCubeSuite+と同様、サンプルソフトがIDEに付属しています。

スタートアップ処理とユーザプロジェクト処理

LPCXpressoをインストし、付属サンプルNXP_LPC8xx_SampleCodeBundle.zipをIDEへ展開後、そのソースを読む際のポイントは、サンプルソフトの構造です。構造の解説文が少ない(見あたらない)ので、説明を加えます(付属LPCXpresso User GuideはIDEの使い方解説書です)。

Blinkyを例に示します。組込みソフトは、2つの処理から成ります。「スタートアップ処理」と「ユーザプロジェクト処理」です。スタートアップ処理は、電源ONで自動的に実行されるResetISR()で、メモリなどの初期設定を行います。次にSystemInit()で、動作クロックなどのシステム関連の設定を行います。その後、ユーザプロジェクト最初の関数main()をコールします。

ユーザプロジェクト処理は、無限ループの前に2関数をコールします。HdwInit()で、使用する周辺回路の初期設定を行い、UserInit()でその他の初期設定を行った後に無限ループします(HdwInit()とUserInit()は、説明の都合上作成した関数名です)。

各関数は、NXP社提供のLPC8xxライブラリと、ARM社提供のCortex-M0+コアライブラリを使っています。またユーザが作成する関数も、これらライブラリを使って作成します。つまり、これらのライブラリがAPIを提供しているのです。ライブラリで初めから全てのAPIを提供しているところが、CubeSuite+と違う箇所です。

スタートアップ処理は、全てのサンプルプロジェクトでほぼ共通ですが、ユーザプロジェクト処理は、サンプルにより使う周辺回路が違いますので異なります。普通は、1個のサンプルプロジェクトで、1種類の周辺処理を紹介しますので、無限ループは文字通り簡単な無限ループで終わるものが殆どです。

スタートアップ処理の要は、最低限の動作ができる環境を作成するのが目的で、ブートストラップと呼ばれるゆえんです。パソコンのBIOSに相当する部分と言えば解り易いでしょうか? IDEのデバッガ動作時には、この部分は飛ばしてメイン関数の入口からデバッグを開始します。つまり、本来は、必要性が無い限り、変更不要と考えても良いでしょう。

ユーザプロジェクト処理も、無限ループ前を「周辺回路の初期設定:HdwInit()」と「その他のユーザ初期設定:UserInit()」に分けて考えると、参考にする部分がより明確になります。HdwInit()は、周辺回路の使い方が同じならそのままコピー利用もできます。但し、CubeSuite+と違って、LPCXpressoの場合はAPIパラメタで回路動作が変わるので、APIソースを解読する必要もあります。

サイズが大きいプログラムも、結局は無限ループ部分が大きいだけで、構造は同じです。大きな無限ループ部分の流用性や可読性を上げるために、ファイル分割などの技術を使っているだけです。

テンプレート工夫箇所

この構造が理解できると、サンプルプロジェクトの見通しが良くなります。そして、せっかく提供されているサンプルを上手く利用し、複数処理を実行するには、「無限ループ箇所を工夫すれば良さそうだ」、ということも判ります。組込み用のリアルタイムOSなども、この工夫の結果できたものと理解しても良いでしょう。但し、リアルタイムOS利用時は、OSの理解や面倒なオーバーヘッドも生じます。販売中のRL78/G1xテンプレートやLPC8xxテンプレート(近日発売予定)は、もっと手軽に複数処理を実現するものです。

ARMマイコンの選択方法

LPC8xxの特徴

コア差別から、周辺回路差別へシフトしているARMコアマイコン群。その中で8/16ビット市場を狙う低価格、低消費電力な32ビット最新コアCortex-M0+を搭載したLPC8xxの差別化周辺回路は、下表です。最も特徴的なスイッチ・マトリクス(SWM)を解説します。

LPC8xxの差別化周辺回路 概要
スイッチ・マトリクス IOピンに内臓デジタル回路の入出力を割当てる機能。IOピン数≦内蔵回路数時に有効、かつ、ピン配置自由度大。
アナログ・コンパレータ ADコンバータの代わりにコンパレータ搭載。正負入力可能。
ステート・コンフィギュラブル・タイマ:SCT 通常タイマ機能に加え、状態遷移図からステートマシン生成もできるタイマ。
ROM API(I2C、UART、Power Control等) ROMによる(周辺回路の)API提供。
LPC8xxブロック図
LPC8xxブロック図

スイッチ・マトリクス(SWM)

トラ技2014年2月号掲載のLPC810は8ピンDIPです。電源(VSS/VDD)とデバッグインタフェース(SWDIO/SWSCL)を除くと、4ピンだけがGPIOとして使えますが、内臓デジタル周辺回路は4種以上あります。これら周辺回路は、内臓スイッチ:SWMでGPIOの任意ピンに接続が可能です。もちろん、4ピン以上の接続はできませんが、任意ピンに配置できるので、基板化する時にアートワーク設計者にも歓迎される機能でしょう。

スイッチ・マトリクスの接続(UM10601より抜粋)
スイッチ・マトリクスの接続(UM10601より抜粋)

このSWMは、既存8/16ビット機のアプリケーション置換えを狙ったLPC8xxの特徴が最も現れた機能ブロックです。パッケージ構成は、8/16/20ピンで少ピンですが、SWMのおかげで、未使用ピンが少なく使い易い32ビットマイコンになると思います。タイマIC555にも追加RC無しで置換え可能です。

ARMマイコンの選択方法

このようにARMコアマイコンは、同じコアでも周辺回路に差があるマイコンが各社から発表されます。また、デジタル周辺回路だけでなく、アナログ周辺回路の実装も増えてきました。ARMマイコンの選択は、ARMコアの特徴と、各社が差別化のために実装した周辺回路による特徴、この2つを理解した上での選択が重要になります。従来の汎用性よりも、どこに、どのように使うかというよりアプリ重視のマイコンが発表されるからです。