//時間が経過するまで留まる。);}}}このコードだけで4つのタスクを実行しています。LEDの点滅を行うだけですが、どのLEDを点滅させるのか?、どれ位の周期で点滅させるのか?そう言ったパラメーターが存在します。コードは1つしか無いので、4つのパターンを指定するのには引数等でそのパラメータを渡す必要があります。起動時引数はこの様な目的で使用できます。タスクスイッチのパフォーマンスを計ってみます。setjmp、longjmp方式と比べてどれ程高速化しているでしょうか?。シミュレーターで計測してみるとsetjmp、longjmp方式は37サイクル、新しい方式だと24サイクルでした。頻繁に呼ばれる処理なので、なるべく少ないサイクル数で処理できればそれに越した事は無い訳です。市販のRTOSの場合、このタスクの切り替えに掛かる時間が、商品の指標の一つになっています。以下のリンク先からプロジェクトを入手できます。Playを利用して音声でコントロールする車の製作です。Wi-Fiを用意すればできたも同然で、相変わらず他力本願ですいません。この作品は、複数の要素技術を組み合わせて作成しています。使った要素技術は以下の通りです。Playを利用します。Playから入手できます。Playの詳細はInterface誌2012年11月号を読んで下さい。Playに喋った言葉がクラウドサーバーで処理されて文字列(ローマ字及び数字)としてAndroid端末に届き、Android端末からこのリモコンカーに無線LANを通して届く物です。すると言ったごく単純な作品です。Playとクラウドサーバーがみんな処理してくれますから、GR-SAKURA側は比較的簡単な処理で済みます。Wi-Fiさえあれば、誰でも音声リモコンが即!作れます。システムの構成は以下の様になります。Android端末に喋った音声はGoogleのサーバーに送られ、日本語に変換されて返ってきます。変換された日本語は今度はYahooのサーバーに送られ、ローマ字と数字に変換されて来ます。Wi-Fiに直接接続された音声合成ICに音声データパターンを送る為のアプリケーションなので、ローマ字や数字以外に若干の制御コードが入って来ますが、単に文字列の比較を行うだけなのでここからの文字列処理はとても簡単です。Car間は無線LANで通信します。無線LANルーターを経由する事となります。2.アナログセンシングクラウドサーバーへ2往復もしている関係上、音声を入力しても実際にGR-SAKURAに届くまで2~3秒程度掛かっています。人が車両の状況を見ながら進行停止や回転停止の指示を行っても、オーバーランしてしまったり、クルクルその場で回ってしまいます。Car自身が判断する必要があります。移動距離に関してはスマートアナログシールドにはセンサーが搭載されていないので今のところ計り様がありません。適当な時間でやっています。回転角度は前回の書込みで電子分度器を作りましたので、これを実装してみます。Carの構成を以下に示します。(1)SAシールド(スマートアナログシールド)はGYROを搭載しているので、角度の検出に利用します。Wi-FiはAndroid端末から無線LANで音声制御を受ける為に用意します。Carは履帯で進行したり方向転換を行いますので、2つのモーターを制御する必要があります。(5)電源にはモバイルバッテリーパックを利用しました。主なソフトウエアの構成は以下の様になっています。3つのタスクを立て、それぞれが独立に動いています。それそれのタスク間で依存性が低い為、例えばどれかのタスクが何かの待ち状態になったとしても、それ以外のタスクの動作は影響を受けず、今まで通り動きます。この値は大域変数に保存され、他のタスクから利用されます。文字列であればそれに応じた動作を行います。期待された文字列ばかりが送られて来る訳では無く、文字にブレが生じていますので、簡単なフィルター処理を行っています。車体の転回は、(1)のタスクが更新を行っている角度の積分値と、上位から受け取った角度の値を比較し、その値に一致するまで車体を回転させ続けます。前進や後退の場合は、10秒間モーターをその方向に動かし続けます。停止の場合は、現在前進または後退中であればその動作を止めさせます。(3)BluetoothでPCと通信しているタスクは、車体の動作モニター(設定角度と積分値の表示)や、PC側からのコマンドに拠る車体の制御を行っています。この処理自体はデバック以外の状況で必ずしも必要とされない処理であり、Bluetoothで回線が開かれるまでは有意な動作を何もしません。実際に組み立ててみて判った事(1)回転の中心とGYROの実装位置の問題なのか、左回転と右回転で補正値に差が有り、時間とゲイン、GYROの出力の計算でスパッと角度を算出できなかった。バッテリーの重量が大きいので設置位置で車体の回転する中心がずれてしまう。その為、実際に動かしてBluetoothでモニターしながら補正値のトリミングを行っている。うまい方法とは言えず、今は90度の回転で精度が最大となるような値となっている。(2)モーターを動かすと車体が回転していないにも係わらずGYROの出力が乗ってしまう。原因は振動の可能性も有るし、電気的なノイズの可能性も有る、、、気がする。モーター側とはシールド処理が必要になるのかもしれない。以下のリンク先にサンプルのプロジェクトを置いて置きます。[RX&SH&H8]β版のスマートアナログシールドには2軸のGYROセンサーが搭載されており、これを使って分度器を作ってみよう!と言うのが今回の企画です。1.スマートアナログICの利用まずジャイロ(ENC03)の出力は結構小さいです。感度が0.67mV/deg/secである事から、出力の最大振幅は201mVpとなります。RXマイコンのADCの入力範囲はVrefで決まってしまいますが、電源電圧をVrefとした場合は3.3Vのダイナミックレンジ。最大3.3V入力できるところに402mVしか入れないのは実に勿体無い。※402mV/3.3Vで約1/8では、12bitの分解能が有っても実質9bit相当で使う事になる。そこでスマートアナログICのコンフィギュレーションアンプの設定でこれを最適化します。Designerで回路構成を見てみます。アンプの組み合わせを行う事ができ、またゲインやオフセットを調整できます。ゲイン設定はマウスオーバーすれば番号とゲイン(dBまたは帰還抵抗の値)の対応が表示されますので、その中から適切な値を選択します。図では4を選択していますが、非反転アンプの場合は16dBとなります。オフセットはDACの出力を設定します。表示の1.9Vは実は5V基準で計算した値で、この辺は直して欲しいのですが、3.3Vなら1.25V辺りとなります。解能ですが、上限、下限の設定で調整範囲をもっと狭くすればより精度を上げる事ができます。スマートアナログIC(SA500)にはこれ以外にフィルター回路やレギュレーター、汎用アンプ等がICの中に組み込まれていますが、今回は初段のアンプのみ使用しています。2つのジャイロセンサーの出力をそれぞれ初段のAMP1、AMP2に入力し、ゲインとオフセットを設定して可能な限りADCのダイナミックレンジを有効に使うようにスマートアナログICを設定します。スマートアナログICを使った設計の支援としてWEB上で実行できるシミュレーターをルネサスは用意していますが、この位の回路なら手元でやってしまうのも手ですね。アナデバ版で動作確認してみました。まあ大体良いんじゃないでしょうか。オフセットを大きくすれば動作点が下がります。振幅が最大、最小を超えなければ、後はソフトウエアで対応可能ですので。2.角度を計算する為にはジャイロセンサーは軸を中心とした回転運動の角速度を出力する物らしい。角速度を時間で積分すれば角度になる筈。ADCで定周期にサンプリングを行い、それを足し算して行けば良いのか!。※実際には先の0.67mV/deg/secの係数とか、ゲインとかから実際の加速度を求めるENC03についてぐぐる先生に聞いてみました。他力本願ですいません。構有るみたいで、その分の補正が必要みたいです。しないとドリフト分を全部積分して謎の角度を出してしまいます。このドリフトをキャンセルする方法として良さそうなのが最小二乗法でした。最小二乗法を使って温度ドリフトの予測値を算出し、それで補正を掛けます。詳しく書くと、静止状態の時に予測する為のデータを収集し、動作中にこのデータを基にした予測値で補正を入れます。して定周期でサンプリングしたADCの値からオフセット分をキャンセルした値を加算して行けば、変化した角度を算出する事ができます。ADCを連動させて定周期でアナログデータの変換を掛け、変換完了後のADCの割込みでバッファに取り込んでいます。定周期を発生するタイマーは8bitタイマーをカスケードに使用して16bitのタイマーとして構成しています。このサンプルでは10ms周期でやっています。ADC自体も、機能として最大4回のサンプリングを加算してレジスタに保存する事ができる加算機能を使ってサンプリングの精度を良くしています。使ってみたかっただけですが。変換結果はADCの割込みでハンドラーを起動し、その中でリングバッファに保存しています。その為、WEBコンパイラのgr_common下に有るintvect.cの内容を修正する必要があります。※通常のanalogReadは割込みを使用していない。※ちょっと訳有で本来はAN001とAN002に入る入力ですが、AMP1の出力をAN004、AMP2の出力をAN005に繋ぎ直しています。4.実際に角度を計ってみよう写真の様に基板を置きます。スマートアナログシールド上のGYROセンサーには、基板を平たく置いた時に検出する軸が無いので、この様な置き方になります。紙に30度刻みで直線を引き、その上に基板を置いて回転させてみて、モニター出力の角度を見てみました。この様にUSB(シリアル)に接続したPC上のTeratermで現在の角度とADC出力の積分値を見る事ができます。※この写真を撮影した後に表示はsen1だけにしてしまいました。本当はGR-SAKURA上の青ボタンを押すと表示上の角度を0クリアするのですが、とてもじゃないけれどまともに触れないので、一定時間出力が安定すると自動的に0クリアしています。※たまに発散する様な現象が見れるのだが、なんだろう?あれは。以下のリンク先にサンプルのプロジェクトを置いて置きます。[RX&SH&H8]あっちが飛んでしまったので、こっちに書き直し。MFT2012のソーシャルツリーに飾るネタとして、やっぱりツリーに飾るのだから音と光を出したいなぁ!と思って急遽作成したものです。BEEP音で音階を作ってやっています。今までのやり方(あくまでも個人的なやり方)だとプログラムは、音を鳴らす部分と演奏する部分、それにデータとして楽譜データを手でチマチマと入れていたのですが、特に楽譜データの入力が手間が掛かってしまいました。そこで従来からMIDIデータを利用できないものかと考えてはいたのですが、これを機会にプログラムを作成してみたものです。情報が沢山落ちていて。ネットに落ちている情報を拾いながらMIDIデータの解析プログラムをなんとか構築できました。基本的に音楽的な素養は一切無いのでMIDIには色々制御コードが出てくるのですが、それが意味するところがさっぱり判りません。音符データと時間データを使って演奏をしていますが、本当のところはまともに動いているのかどうかは不明です。RXマイコンで使用したリソースは8bitタイマーを2個使っています。8bitタイマーの出力端子はTMO0(IO2)とTMO3(IO6)となります。2個の8bitタイマー出力を2個の圧電ブザーに接続し、同時発音可能な音の数を2としています。基本BEEP音なので音の強弱も付けられませんし、実に貧相な音ですが、しかし複数の音が同時発生すると結構楽しいものです。RXマイコンにはタイマーが沢山あるので、出力可能なタイマーの数だけ圧電ブザーを用意し演奏するってのも楽しそうです。接続なんて実に簡単です。タイマー出力端子と圧電ブザーを線で繋ぐだけですから。MIDIデータはSDカードに保存しています。ROOTディレクトリ下に全部のMIDIファイル(拡張子が.midのファイル)を入れておきます。電源の起動後、見つけたMIDIファイルを片っ端から演奏を始めます。同時にLEDも適当にチカチカさせています。どの端子をチカチカさせているのかはソースコードをごらん下さい。MIDIデータの良いところは、1.音のデータではなく演奏データなので、まっとうな音源を用意すればよい音で演奏できる点です。将来的には音源データを搭載?、、、いやいや大変なので止めておこう。2.楽譜データもネットからいくらでも落とす事ができます。著作権を主張しているデータも有りますのでその扱いは慎重になる必要がありますが、個人的に利用する場合は自由に使えるものは沢山あります。3.データサイズの小ささもありますね。MFT2012で動かした時はSDカードにMIDIデータを入れていたのではなく、MIDIファイルをそのままバイナリー化してROMに埋め込んで使っていました。ひとつのファイルサイズはせいぜい数kbyte程度なので、10曲位入れてもROM領域を圧迫する程にはなりません。RXマイコンではなく8bit位のリソースの小さなマイコンで扱ったとしても、ROMに何曲かは入れ込む事ができるのではないでしょうか。MIDIデータの困ったところは、1.フォーマットが複数存在し、あらゆるデータに対応するとなると大変な事になりそう。その為今回のプログラムはSMF、フォーマット0のみの対応となります。2.曲によっては演奏しても何の曲だかさっぱり判らなくなる。複数パートに別けて演奏するようなデータの場合、音が細分化され過ぎて2つしか音源の無い今回の作品ではまともに演奏にならない可能性があります。3.演奏出来ない音階がある(笑)。これはハードウエアの問題で、圧電ブザーなので、数百Hzから4KHz位までしかまともに音が出ません。そんな訳でクリスマスのツリーの飾り付け用の電子工作ネタにはぴったりです。クリスマスに間に合わなくてもお正月休みのネタとしてどうぞ!。サンプルプロジェクトは以下のリンクから。sdmmcライブラリを使用します。[RX&SH&H8]これはマルチタスクではあってもリアルタイムではありません!。今から紹介するのは、全てのタスクが同一、、、と言うより優先度の制御が入っていないマルチタスクシステムであり、μITRONの様にユーザーが意識しなくても優先度に応じてカーネルが自動的にタスク切り替えを行いません。言うかカーネルそのものが無いです。上記欠点はありますが、setjmp、longjmpと言ったC言語でサポートされている関数ライブラリを利用できる点や、タスクを起動する為の初期化手順が単純なため、GR-SAKURA上の動作環境(WEBコンパイラで実現できる範囲内)でマルチタスクを実現できるメリットが有ります。タスクを起動する為の手順が判ってしまえば別のマイコンへの応用も容易です。1.今一度、割り込みの手順を考察(※RX63Nの汎用割り込みの場合)(1)命令実行中に割り込み要求を受付(2)一部の命令を除いて実行中の命令を完了後、割込み処理を開始(3)PSW(ステータスレジスタ)をスタックに保存(4)PC(プログラムカウンタ)をスタックに保存(5)割り込みフラグ等のCPUステータスを変化させる(6)割り込み処理ルーチンにジャンプ(7)割り込み処理ルーチン内で必要なレジスタをスタックに退避する※1~6まではハードウエアが実行し、7からは割り込み処理ルーチンの責任でソフトウエアで実行します。割込時のスタックの状況を図にしてみると図の様になります。事実上、スタック領域Aと、スタック領域Bは別の目的の為に使用されていて、相互に関係を持ちません。概念的には別空間にあると考える事ができます。2.割込とマルチタスクの共通点それぞれ使用目的別にスタック領域を使い分ける概念は、割り込みとマルチタスクで共通しています。言い換えれば割り込みの手続きと同じ事ができればスタック領域を使い分ける事ができ、ひいてはマルチタスクシステムを実現できます。実際のマルチタスクシステムのスタックの例です。※マルチタスクシステムによっては割り込みスタック領域も別に用意するマルチタスク?だがRXマイコンはCPUが一つしか無いマルチコアでないマイコンでマルチタスクシステムを実現?現実的には一つのCPUコアは一つの命令しか実行できません。マルチタスクでそれぞれの処理が平行に動いている様に思えるけれど、実際はCPUで実行する処理を適宜切り替えてるだけで、同時に処理は行っていません。一般的なマルチタスクシステムの処理の切り替え手順タスク1からタスク2へ切り替え手順を解説。※ここでは関数コールで切り替えを実現している為、PSWは保存しない。(1)まずタスク1の中でタスク切り替えを行う専用の関数をコールする。(2)その関数の中でPCや汎用レジスタの一切をタスク1専用のスタック領域に退避する。(3)SP(スタックポインタ)をタスク2のSPに書き換えてしまう。この時、SPはタスク2のスタック領域のアドレスを示している。(4)タスク2のスタック領域に退避されている汎用レジスタを書き戻す。(5)PCにタスク2で実行していたアドレスを代入する事でタスク2の実行が再開される。※関数からのRETで実現※PCや汎用レジスタの退避やロードと言った処理は、割り込みの出入り口処理と同じである事が判る。μITRON等のRTOSは、初期化手順がちょっと難易度が高い。判ってしまえば何等問題無いのですが。由に使えないといけない。定した領域に退避されているレジスタを書き戻す関数が大昔から用意されています。それがsetjmp、longjmpで、これを利用すれば簡易的なマルチタスクシステムを実現できます。※但し割り込みで切り替える訳ではないのでリアルタイム性の実現は困難setjmpが退避する関数であり、longjmpが退避された値をレジスタに書き戻します。以下はsetjmpの逆アセンブル結果で、片っ端から汎用レジスタをR1で示されるメモリに代入している事が判ります。うーん、イマイチ効率の良いコードではない!気がしますね。以下は同じgccですが某マイコンアーキテクチャのsetjmp、longjmpです。命令でバレバレですが。関数コールで実現しているので、必ずしも全てのレジスタを退避する必要は無い筈です。まあ今回はおいて置きます。汎用レジスタR1は退避先のアドレスであり、汎用レジスタR0はRXマイコンの場合はスタックポインタを示します。※赤枠また、関数コールを行っている事からPCは既にスタックに退避されています。タスク1のスタックと、レジスタの退避領域は以下の様になっています。以下はlongjmpの逆アセンブル結果で、片っ端から退避した値を汎用レジスタに書き戻している事が判ります。汎用レジスタR1は退避先のアドレスであり、赤枠に注目すると最初にスタックポインタを元に戻しています。次に退避したPCの値をスタックポインタが示すアドレスに代入しています。これで関数から返る時に実行先のPCの値が代入され、中断していた処理が再開される事となります。ちなみに汎用レジスタを保存する領域、jmp_bufって何?と調べてみるとgccでは以下の様になっています。jmp_buf[_JBLEN];#endif#endifなんて事無いint型の配列ですが、その配列サイズが問題ですね。);と、こう書いてしまうとsetjmpとlongjmpの間で無限ループになってしまいます。そこで以下の様に書く必要があります。);例えばタイマー割り込みでカウントアップされる変数を条件にすると以下の様になります。);}実際のところマイコンの処理のほとんどは「何かを待つ」です。果であったり、シリアルからの受信であったり、送信バッファの空き待ちであったりと、とにかく待ってばかりです。複数の処理を平行して行いたい時、大概の場合シングルタスクでは上手く構成できない事が多いです。先のsetjmp、longjmpのコーディング例では条件が一致するまでループを継続していましたが、条件が一致しないなら別のタスクに処理を切り替えてしまえば良いわけです。//task1にジャンプする}4.如何にしてタスクを起動するかsetjmpは実行中、setjmpが呼ばれた時のコンテキストを保存する関数ですし、longjmpは保存されたコンテキストを展開する関数です。マルチタスクに適用する時問題になるのが、如何にしてタスクを起動するか?となります。タスクを起動する前に初期化処理の中でsetjmpを呼んだとしても、その初期化処理の位置を覚えてしまうに過ぎません。そこでjmp_bufの中身をもう一度思い出してみます。setjmpの逆アセンブル結果から保存領域の先頭にスタックポインタ、最後にプログラムカウンタ(PC)を保存していました。用意された保存領域の先頭と最後にタスク用として確保したスタック領域の再下端とタスクの開始アドレスを保存して、longjmpを行えばそこに飛ぶ事になります。以下の様な処理を書いてみました。E_OK;}(1)それぞれのタスクには予めID番号を振り分けます。(2)tsk_envはsetjmpの保存領域で、タスクの数だけ確保します。(3)スタックポインタの代入される領域にタスク専用のスタックの開始アドレスを代入します。(4)PCの代入される位置にタスクの開始アドレスを代入します。(5)それぞれのタスクの起動状態を代入します。起動していないのでDORMANTとしています。※スタックポインタと開始アドレス以外の汎用レジスタの値はどうでもいいです。この時点では実行に関係しません。全てのタスクがCPUの起動直後に起動するとは限らないので、起動が必要なタスクの状態をREADYに変化させる関数を書いてみました。E_OK;}これを初期化処理の中に記載し、初期化処理が完了する時に以下の関数を呼びます。//}マルチタスクのサンプルを以下のリンク先において置きます。https://dl.dropbox.com/u/60463387/grsakura/start_multitask.zip5.問題はタスク自身が他のタスクへの切り替えを意識して行う必要があります。何かを待つ時、常にタスクの切り替え処理を入れておきましょう。System)はμITRON4.0仕様のRTOSであり、無償で利用可能です。RXマイコンの実装依存部が提供されています。[RX&SH&H8]FB155BCは国内で正式に利用できるBluetoothモジュールの中ではもっとも安い部類の製品だと思います。モジュール基板の外部と接続する端子は2.54mmピッチに配置されている為に、ブレッドボードやユニバーサル基板への実装が容易です。接続性は、Windowsとの接続は問題無くできます。Androidとの接続もOKです。出力はClass2で小さいのですが、安価で、とても使い易いモジュールだと思います。株式会社ジャングルhttp://www.junglejapan.com/products/surfgrid/購入ページhttp://store.junglejapan.com/a/other/bluetooth-module技術的なサイト。「ArduinoからTwitterに投稿するサンプル」とかも紹介されています。http://dev.surfgrid.org/ルネサスナイト2で発表した作品でこのモジュールを使ってみました。GR-SAKURAにはこのモジュールを搭載できるパターンは用意されていませんので、XBeeのフットプリントに変換する下駄を作成しています。2mmピッチに変換するってなんか変ですけれど(笑)。PCに接続するまでのプロジェクトを作ってみました。接続完了後、PCから送られてきたデータを折り返します。以下のリンクにGR-SAKURAのスケッチを置いて置きます。トラックバック(0)RXマイコン。良いのではないでしょうか。[RX&SH&H8]それでRXマイコンのワークショップに行って来たんですよ。Tiny、SH-2Aも有るんですけれどね。ルネサスの最も新しいマイコンなんで、結構よさげです。USBの後継で価格が約半額のE20か、またはフルICEと、従来よりも高機能になったツールが揃っていますし、なかなかパフォーマンスも良さそうですね。使い方はやはりSH、H8系を踏襲しています。Readyだのは当然です。ワークショップは既に締め切りとなっていますが、http://update.renesas.com/registration/campaign/CampSem.do?CampaignID=RX_Stick&language=jp&region=jp&TOPIC=rxstick抽選でRX-Stickが当たるキャンペーンはまだ継続中なので、申し込んでみては如何でしょう。H8-SXやSH-2Aの様にHEW上からデバックも可能です。言うより、HEW上からでしか動作できませんが。※HEWから接続する時に失敗する時は、一旦USBケーブルを抜き差ししてからもう一度試すと上手く行くようです。※ドキュメント類は、RENESASのプログラムグループのマニュアルナビゲーターから開くと、RX関連のドキュメントを見る事ができます。※USB/シリアル変換とRXマイコンの間にR8Cが仲立ちしてしまって、直接ブートモードでの書き込みができません。トラックバック(0)エレキジャックフォーラムで行われたH8/SX基板の講習では、こんな事も行いました。[RX&SH&H8]液晶の仕組みを理解して、描画速度の向上を行う講義でした。あの基板本のプログラムよりも高速化しているそうです。72MHz+グラフィックコントローラIC)でH8/SXのプログラムを移植して動かした物です。ありゃ、なんじゃこりゃ。駒落ちしまくっている。こっちで見た方が良いかも。[RX&SH&H8]藤沢さん(藤沢主管技師殿)とは初めてお会いしました。内容はH8/SXの概要とかHEWの使い方はさらっと解説し、それよりも今回のメインである液晶の仕組みとかをしっかりと講義した上で、実際に自前のパソコンにHEWのワークスペースを入れて、実機で動作をさせます。この液晶の仕組みをちゃんと理解した上で、更に描画の高速化を行うと言うかなり実戦的な講義が行われ、その点ですごく良かったですね。それと、今回の参加費は教材費、マルツ電波さんのあれで言えばTBと言う基板セット(定価9800円)が8820円であったばかりではなく、アクリル板セット(定価2980円)とか、更に何故かCPU基板まで付属?(帰りに特に外して机の上に置いておいてとは言われなかったが、良いんだよね、もって帰って来て。)と、なんだか物凄くおまけが沢山ありました。ええ勿論、家に帰ってから速攻で半田付けのやり直しはしましたが(笑)。SH-2A基板が付属するインタフェース誌も買ってきましたよ。重いので一冊だけですが。あと何冊か買うのは地元の本屋かアマゾンにしようっと。最近のコメントこんなものでよろしければ。場合..ありがとうございます。Electronicsアットマークエレ不要なデバイスドライバーを削除ダウンロードInterface付属SH2基板のSRAM有り/無しデバックモニタとHOS-V4同梱バージョンHOS本のサンプルをH8/3048Fでデバックする為のデバックモニタH8/3048Fのセクション情報ファイルインポートして使います。