2015年11月26日

mbed 3.0 OS 15.11 Technology Preview版を試してみたときのメモ 2015

mbed 3.0 OS 15.11 Technology Preview版を試してみたときのメモ 2015
* はじまり
* mbed OS TP版のバージョン表記
* mbed OS 新リンク
    mbed 3.0:
    mbed 2.0:

* mbed2.0 から mbed3.0への移行の話
* タスクスケジューラ minar
    minarスケジューラ:
    minarのポイント:

* ユーザアプリケーション app_start
* LED Blink テスト
    app.cpp:
    問題点:

* コードサイズ

* uVisor
    uVisorのコードサイズ:
    uVisorのドキュメント:
    uVisorのサンプルコード:

* yottaの使い方メモ
    yottaコマンドは「yt」と省略できる:
    yotta自身のアップデート:
    yotta自身のバージョンを表示:
    現在の対象モジュールのバージョンを表示:
    更新可能なライブラリやモジュールがあるかを確認:
    make clean的なもの:
    サポートされているターゲットをリストアップする:
    基板の選択:
    現在のターゲットの確認:
    mbedライブラリやドライバのアップデート:
    ターゲットが使用するライブラリやドライバの依存関係とバージョンを表示

* コンパイル・オプションを追加する方法
* サンプルコードとドキュメント
* mbed client は巨大だった!?
* mbed2.0のオンラインAPIドキュメント?
* 参考ブログ

* はじまり
次世代mbed(ムベッド)のmbed 3.0 OS 15.11 Technology Preview版 をコンパイルしてみた時のメモ。
https://www.mbed.com/en/development/software/mbed-os/releases/mbed-os1511/
https://www.mbed.com/en/development/software/mbed-os/releases/
以下mbed3.0と記す。
ちなみに従来のmbed2.0は「Classic mbed」や「mbed SDK」と表現されているが,
以下mbed2.0と記す。
また以下の記述は現時点のTechnology Preview版(以下TP版)ドキュメントをざっと見て認識した内容なので
正確にはオリジナル・ドキュメントを参照してください。

* mbed OS TP版のバージョン表記
https://github.com/ARMmbed/mbed-os
によると,今までmbed OS 3.0と呼ばれていたものは
TP版の mbed OS 15.11
に改名されたが,このメモでは 
mbed 3.0 = mbed OS 3.0 =  mbed 3.0 OS = mbed OS 15.11 = mbed OS TP版
とする。

* mbed OS 新リンク
mbed OS gitリポジトリ
https://github.com/ARMmbed/mbed-os
mbed 3.0:
    https://www.mbed.com
    上記のURLが今後メインストリームになる。
    新フォーラム
    http://forums.mbed.com/
    サポートされている基板(Platform)のページ
    https://www.mbed.com/en/development/hardware/boards/
mbed 2.0:
    ちなみに,今までのmbed 2.0は以下の様に表現されている
    mbed Classic Developer site
    https://www.mbed.com/en/development/developer-classic-site/

* mbed2.0 から mbed3.0への移行の話
https://www.mbed.com/en/development/software/mbed-os/mbed-os-migration-plan/
将来,最終的にはmbed2.0は公式にはサポートされなくなる様です。
(1) 今あるボード/プラットフォーム(以下,基板)がmbed3.0側で正式対応された時点で,
    そのボードのmbed2.0に於けるサポート(バグフィックスやドライバのアップデート)は
    終了するということです。
(2) さらに,最終的にmbed2.0のフォーラム(https://developer.mbed.org/)はリードオンリーに
    設定され書き込みできなくなります。
上記(1)は,基板によっては数ヶ月先に起こる事態だけど...
まぁ,しばらくは大丈夫でしょう。 :D
(2)は,全ての移行が完了した時なのでもう少し余裕がありそう。
結局mbedの意向としては,mbed2.0は過去の記憶とし,
これからはmbed3.0で行こう
ということの様だ。
mbed2.0の「クラウド・コンパイラIDE」がどういうタイミングで使えなくなる?かは不明。
mbed3.0用の「クラウド・コンパイラIDE」も開発中の様だ。
あと,既存のIDE(MDK-ARM,LPXpresso等々)に対するエクスポート機能が先に出る気もする。

* タスクスケジューラ minar
https://github.com/ARMmbed/minar
mbed3.0から標準でイベント(タスク)・スケジューラの「minar」というものが装備された。
スケジューラの名称が「minar」。
ユーザーコードは基本的にこのスケジューラ・ベースで記述することになる。
mbed2.0との完全互換性はなさそうと思われるので 移行時には書き直しが必要だろう。
ただ,ここを見ると
https://github.com/ARMmbed/mbed-drivers/tree/master/mbed-drivers
例えばDigitalOut()等々の最上位のmbedライブラリは一見そのまま使えそうな感じがする。

minarスケジューラ:
(1) シングルタスクの非リアルタイム・スケジューラ。
    ノンプリエンプティブ型です。
(2) イベント(タスク)をこのスケジューラのキューに登録する。
    登録時にdelay時間や繰り返し周期等を指定可能。
(3) スケジューラはキューからイベント(タスク)を取り出して順に実行する。
(4) キューにすぐ実行できるイベントが無ければSleepモードに移行する。
(5) 各種割り込みハンドラ内でコールバック関数がスケジューラにキューイングされ実行される。
minarのポイント:
(1) 非リアルタイムOS(非RTOS)なので,RTOSに起因する同時処理の複雑性を回避することが
    できる。タスクが増えたときのスタックの消費も少なくて済むだろう。
(2) イベント(タスク)は「無限ループ形式」で書いてはいけない。
    (無限ループを書くとスケジューラが破綻する) 必ず関数としてリターンする必要がある。
(3) mbedライブラリやドライバはノンブロッキング処理に対応している。
(4) イベント(タスク)はできるだけ速くその関数を抜ける必要がある。
    ある処理が長すぎると,他のイベントの実行開始時間が次々に遅れて行く。

従来のmain()関数は以下の様に変化した。
extern "C" int main(void) {
    // "app_start"という最初のユーザ関数がスケジューラにキューイングされる。
    minar::Scheduler::postCallback(
        FunctionPointer2<void, int, char**>(&app_start).bind(0, NULL)
    );
    // 以下,minarスケジューラが無限ループで実行される。
    return minar::Scheduler::start();
}
minarスケジューラの中身を単純化して書くと以下の様になる。
while (true) {
    while ( event_available_to_schedule() ){
        schedule_event();
    }
    sleep();
}
* ユーザアプリケーション app_start mbed3.0のユーザ側(アプリ側)のメイン関数(最初のイベント)は 上述の様にapp_start関数になるのでこの関数の中で 初期化や各種イベント登録などを行います。 このapp_start関数もただのイベントなので必要な処理が終わり次第直ちに終了する必要があります。 * LED Blink テスト ボタンを押す度にLEDの点滅速度が500msec,200msec,100msecと変化します。 同時にUART(USB-CDC)に115200bpsで点滅速度とマイコンの動作クロックを表示し続けます。
 ...
 00025: Delay = 500 msec: SystemCoreClock = 84000000 Hz
 00026: Delay = 500 msec: SystemCoreClock = 84000000 Hz
 00027: Delay = 500 msec: SystemCoreClock = 84000000 Hz
 00028: Delay = 500 msec: SystemCoreClock = 84000000 Hz
 ...
app.cpp: 以下のプログラム(app.cpp)をsourceフォルダに置いて app.cpp
$ yotta build
でコンパイルします。
/*
 * app.cpp
 * LED blink and UART test.
 * Written by audin. 2015/11 
 */
#include "mbed-drivers/mbed.h"

static Serial pc( USBTX, USBRX );
static InterruptIn button( BUTTON1 );
//InterruptIn button( SW2 );    /* For FRDM-K64F ? */

static int delay = 500;

/* Event for blinking LED */
void blinky() {
    static DigitalOut led1( LED1 );

    led1 = !led1;
    minar::Scheduler::postCallback( blinky )
        .delay( minar::milliseconds( delay ) );
}

/* Event for display */
void dispEvent(){
    static int num = 0;

    pc.printf("\n %05d: Delay = %d msec: SystemCoreClock = %u Hz" 
            ,num++,delay,(unsigned int)SystemCoreClock);
}

/* Event setting delay time */
void btn1Event(){
    static int id = 0;
    int dDelay[ 3 ]={500, 200, 100};

    id++;
    if( id > 2){
        id = 0;
    }
    delay = dDelay[ id ];
}

/* Interrupt by pushing button */
void btn1Intr(){
    /* Throw buttn evet function */
    minar::Scheduler::postCallback( btn1Event );
}

/* Program start point */
void app_start( int, char** ) {
    pc.baud( 115200 );
    button.rise( &btn1Intr );
    minar::Scheduler::postCallback( blinky );
    minar::Scheduler::postCallback( dispEvent ).period( minar::milliseconds( 500 ) );
}
問題点: 点滅速度が100msecの時,点滅周期が大きく変化し安定しません。 orz printf()文を実行しなければ問題なさそうなので,STM32のシリアルドライバにまだ問題がありそうです。 * コードサイズ GCC version is: 4.9.3 を使用。最適化はデフォルトで「-Os」でした。 上のapp.cppをコンパイルした*.binのサイズは 31.5Kバイト でした。 現在テクニカルプレビュー版なのでF401REは以下のuVisorを含んでいません。 従って,リリース時には40kbyte弱になると思われます。 ちなみに, コンパイラをarmccに変えればコードサイズはこれよりかなり減ると思われます。 gccの場合,printf()関連と浮動小数関連のオーバーヘッドが大きいことが その理由と思われます。 * uVisor uVisorはCortex-M3以上が持つMPU(メモリ保護機能)を使ってセキュリティを 向上させる機能です。 マルウエアや外部から不正侵入された時に,認証鍵等の秘匿情報の流出を防ぐ ことが可能となる様です。 Cortex-M0にこの機能はありません。 uVisorのコードサイズ: uVisorモジュール部分のコードサイズは,出力されたアセンブラコードをざっと見たところ, 6kバイト〜7kバイト程度 と思われます。(gccの場合) uVisorのドキュメント: https://github.com/ARMmbed/uvisor uVisorのサンプルコード: https://github.com/ARMmbed/uvisor-helloworld * yottaの使い方メモ yottaはコマンドラインで動く統合ビルドツールです。 mbed3.0用のクラウド・コンパイラIDEが一般に使用可能になるまではyottaを 使ってビルドするしかない様です。 まずmbedにユーザ登録が必要です。ログイン認証が強制されます。 yotta init実行時やmbed-driversをダウンロードする時に認証が必要な様です。 yottaコマンドはWindows上ならMS-DOSコマンド・プロンプト上で実行するのがひとまず無難です。 (1) Msys/MinGW+minttyで,特にmintty上だとyotta initが先に進みませんでした。 orz orz orz その先に進んでも結局エラーになり挫折中。 但し,一度MS-DOSコマンドライン上でビルドが成功すると, その後Msys/MinGW+mintty上でも yotta コマンドが動く様だ。やっぱりダメだ。orz (2) Cygwin上では,最後のリンク(ld)時にコケる。 cmd.exeがどうのこうのといわれる。 orz yottaコマンドは「yt」と省略できる: $ yotta build は, $ yt build と同じ。 yotta自身のアップデート: yottaコマンド自体を更新します。 $ pip install --upgrade yotta 気づいた時にそれなりのタイミングで :D 更新していくのが無難。 yotta自身のバージョンを表示: $ yotta --version 現在の対象モジュールのバージョンを表示: $ yotta version 更新可能なライブラリやモジュールがあるかを確認: $ yotta outdated make clean的なもの: $ yotta clean サポートされているターゲットをリストアップする: 以下で,「--limit 1000」の部分がないと表示数が少なくてアセる。 orz $ yotta search --limit 1000 target さらに使いかたが今ひとつ?で,上記だとst-nucleo-f401re-gccが出てこない。 でも以前は出ていた様な気もする。 で, 以下の様にするとnucleo関連が出力される。
$ yotta search --limit 1000 nucleo
st-nucleo-f401re-gcc 0.2.0:
    Official mbed build target for the mbed ST Nucleo f401re development board.
    mbed-target:nucleo-f401re, mbed-official, nucleo-f401re, nucleo, gcc
st-nucleo-f401re-st-ble-gcc 0.1.2:
    Compound target: NUCLEO-F401RE plus X-NUCLEO-IDB0XA1.
    nucleo-f401re, nucleo, x-nucleo, ST, STM, gcc, expansion, board, Bluetooth, BLE, x-nucleo-idb0xa1
stm32f411re-nucleo-gcc 0.1.1:
    Official mbed build target for the mbed st-nucleo-f411re development board.
    mbed-target:nucleo-f411re, mbed-official, stm32f411re-nucleo, gcc
x-nucleo-common 1.0.2:
    Common library for X-NUCLEO expansion boards.
    i2c, debug, spi, mcu, nucleo, generic, common, ST, STM, x-nucleo
    wolfgang.betz@st.com
x-nucleo-iks01a1 1.0.3:
    Firmware Library for X-NUCLEO-IKS01A1 (MEMS Inertial & Environmental Sensors) Expansion Board.
    expansion, board, x-nucleo, nucleo, ST, STM, mems, motion, sensors, sensor, temperature, humidity, magnetometer, pressure, accelerometer, gyroscope, LSM6DS0, LIS3MDL, HTS221, LPS25H, LSM6DS3
    wolfgang.betz@st.com
x-nucleo-sensors 1.0.4:
    Library for STMicroelectronics' Sensors.
    x-nucleo, nucleo, sensor, component, ST, STM, sensors, mems, motion, temperature, humidity, magnetometer, pressure, accelerometer, gyroscope, LSM6DS0, LIS3MDL, HTS221, LPS25H, LSM6DS3
    wolfgang.betz@st.com
x-nucleo-idb0xa1 1.1.3:
    ST driver for the mbed BLE API.
    expansion, board, x-nucleo, nucleo, ST, STM, Bluetooth, BLE
    Andrea Palmieri
frdm-k64f-st-ble-gcc 0.1.4:
    Compound target: FRDM-K64F plus X-NUCLEO-IDB0XA1.
    k64f, frdm-k64f, x-nucleo, ST, STM, gcc, expansion, board, Bluetooth, BLE, x-nucleo-idb0xa1
mbed-hal-st-stm32f401re 0.1.1:
    mbed HAL for stm32f401re microcontrollers
    mbed, hal, stm, f401re, nucleo
    wolfgang.betz@st.com
st-stm32f439zi-gcc 0.0.6:
    Official mbed build target for the st stm32f439zi microcontroller.
    mbed-target:nucleo-f439zi, mbed-official, stm32f439i, gcc
あと, $ yt search --limit 1000 armcc $ yt search --limit 1000 gcc の様に黄色い部分をいろいろ変えて探してみる。 基板の選択: 自分が持っているのはNUCLEO-F411REだけど,F401REのプログラムもひとまず動作するので 「st-nucleo-f401re-gcc」を選択した。 $ yotta target st-nucleo-f401re-gcc 現在のターゲットの確認:
$ yotta target
    st-nucleo-f401re-gcc 0.2.0
    mbed-gcc 0.1.3 
mbedライブラリやドライバのアップデート:
$ yotta update
    info: get versions for st-nucleo-f401re-gcc
    info: get versions for mbed-gcc
    info: get versions for mbed-drivers
    info: get versions for mbed-hal
    info: get versions for cmsis-core
    info: get versions for ualloc
    info: get versions for minar
    info: get versions for core-util
    info: get versions for compiler-polyfill
    info: get versions for mbed-hal-st
    info: get versions for mbed-hal-st-stm32f4
    info: get versions for uvisor-lib
    info: get versions for mbed-hal-st-stm32cubef4
    info: get versions for mbed-hal-st-stm32f401re
    info: get versions for cmsis-core-st
    info: get versions for cmsis-core-stm32f4
    info: get versions for cmsis-core-stm32f401xe
    info: get versions for dlmalloc
    info: get versions for minar-platform
    info: get versions for minar-platform-mbed
ターゲットが使用するライブラリやドライバの依存関係とバージョンを表示 yotta listは yotta lsと同じ。
$ yotta ls
    blinky 0.0.0
    \_ mbed-drivers 0.11.3
      |_ mbed-hal 1.2.0 yotta_modules\mbed-hal
      | \_ mbed-hal-st 1.0.0 yotta_modules\mbed-hal-st
      |   \_ mbed-hal-st-stm32f4 1.1.0 yotta_modules\mbed-hal-st-stm32f4
      |     |_ uvisor-lib 1.0.9 yotta_modules\uvisor-lib
      |     |_ mbed-hal-st-stm32cubef4 1.0.2 yotta_modules\mbed-hal-st-stm32cubef4
      |     \_ mbed-hal-st-stm32f401re 0.1.1 yotta_modules\mbed-hal-st-stm32f401re
      |_ cmsis-core 1.1.0 yotta_modules\cmsis-core
      | \_ cmsis-core-st 1.0.0 yotta_modules\cmsis-core-st
      |   \_ cmsis-core-stm32f4 1.0.4 yotta_modules\cmsis-core-stm32f4
      |     \_ cmsis-core-stm32f401xe 0.1.0 yotta_modules\cmsis-core-stm32f401xe
      |_ ualloc 1.0.2 yotta_modules\ualloc
      | \_ dlmalloc 1.0.0 yotta_modules\dlmalloc
      |_ minar 1.0.1 yotta_modules\minar
      | \_ minar-platform 1.0.0 yotta_modules\minar-platform
      |   \_ minar-platform-mbed 1.0.0 yotta_modules\minar-platform-mbed
      |_ core-util 1.0.1 yotta_modules\core-util
      \_ compiler-polyfill 1.1.1 yotta_modules\compiler-polyfill 
* コンパイル・オプションを追加する方法 フォルダ構造は以下とする。
blinky
    build
    source
    test
    yatta_modules
    yotta_target
上記sourceフォルダに拡張子".cmake"でファイル名は任意のファイルを作る。 ここでは,cflags.cmakeとする。中身に以下を書いて普通にyotta buildする。
 set_target_properties( blinky
            PROPERTIES COMPILE_FLAGS "-g3" )
上は「-g3」フラグを追加した例。そのあと, $ yotta clean $ yotta build します。 gccの場合,あとから追加記述されたオプションが有効になるので "-O0"を追加すればデバッグ用に最適化なしでコンパイルできるはずです。 "はずです"というのは,ここに書いた記述がドライバも含め,全てのソースコンパイルに適用されるか どうかは未確認だからです。そのうち確認しよう。 :D まだまだ続く... * サンプルコードとドキュメント https://www.mbed.com/en/development/getting-started/get-code/ * mbed client は巨大だった!? このmbed clientのサンプルを https://github.com/ARMmbed/mbed-client-examples frdm-k64f-gccで試しにコンパイルしてバイナリサイズを見てみたら, arm-none-eabi-gcc で約257Kバイトだった。 (OoO) orz armccでも200Kバイト程度にはなりそう。 ということは,必要なFlash ROMは256Kバイトだと足りないので,次は512Kバイトになってしまう。 ちとデカい。 なにが巨大なのかよく見てないけど,Ethernet,TCP/IP関係は Wiznetのハード・モジュールを使った方が http://www.wiznet.co.kr/product/ 速度は落ちるけどROM容量は減るんじゃないかと予想してみる。 ていうか, ESP−WROOM−02があればいいのか? :D ところで, yottaでコンパイルしたら予想に反して xD LEDチカチカが NUCLEO-F411REで あっさり動いてしまいました。 コンパイルしたモジュール名は, st-nucleo-f401re-gcc なんだけど, NUCLEO-F411REに書き込んだら普通に動いた (^^)/ * mbed2.0のオンラインAPIドキュメント? 以前はWeb上で自由に見られたんだけど,今は見られない。 ログインしないとだめなのか? orz 囲い込み ? orz * 参考ブログ Todotaniのはやり物Log さんのブログ mbed OSでLチカ http://todotani.cocolog-nifty.com/blog/ 工作とかプログラミングとか さんのブログ mbed OS ベータ版でLチカしてみる http://mia-0032.hatenablog.jp/entry/2015/10/26/221949 * 参考ページ RTOSとは? http://www.semicon.panasonic.co.jp/micom/realtimeos/feature.html
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | mbed | このブログの読者になる | 更新情報をチェックする

2015年10月18日

Windows10が怖い件 2015

最強のスパイウェア「Windows 10」をインストールするな!
http://kaleido11.blog.fc2.com/blog-entry-3768.html

うさん臭いOSだな〜と感じてはいたが、やっぱりってことか。
orz
orz
orz

Asimov ?
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(2) | Windows10 | このブログの読者になる | 更新情報をチェックする

2015年09月07日

ARM: Micro Python 発見編(1) 2015

Micro Python 発見編(1) 2015

* Micro Pythonとは
    その他動作可能なマイコン/ボード:
    * PyBoardの回路図等
    * Micro Pythonの言語仕様
    * 実行速度
    * オリジナル(PyBoard)のMCUはSTM32F405RG

* Micro Pythonに於けるSTM32F4-Discovery情報

* Micro PythonのPythonパーサ/字句解析についての記述
* Ethernet対応
* スケジューラの作成と実行
* マンデルブローとライフゲームのグラフィック・サンプルコード
* ガベージコレクションについてのヒント
* 消費電力についての記述

* STM32F4-Discoveryで実際に動かしてみた
    必要条件:
    注意ポイント:
    コンパイル時に必要なもの:
    コンパイル:
* 加速度センサ(STM32F4-Discovery)
    STM32F4-Discoveryで加速度センサを使う方法:
    バグ修正版 staccel.py:

* STM32F411-Discovery対応
* Nucleo-F401/F411RE対応
    Nucleo-F401で使う方法:
    Nucleo-F411で使ってみる:
    外部スクリプトをロードする方法:
    注意ポイント:

* dsPIC33FJ256GP506版
    コンパイル:
* その他,用意されているプロジェクト,フォルダ
    bare-metal:
    minimal:
    esp8266:

* 今後,参考になりそうな情報や参考ページ
    * LCDやHIDモードを使った例
    * モジュールの作り方


Micro Pythonというものを発見した。
詳細は調査中。

* Micro Pythonリンク集
Micro Python で組み込み Python by Hirotaka Kawata さん
http://sssslide.com/www.slideshare.net/hktechno/micro-python-python

Micro Python本家トップページ
    https://micropython.org/
Micro Python wiki
未読だけどかなり詳しい情報がありそう
http://wiki.micropython.org/Home
Github: Micro Python wiki
ここにも別なWikiがある。情報ありそう。
https://github.com/micropython/micropython/wiki
フォーラム
    http://forum.micropython.org/
ドキュメントや関数仕様等々
    http://docs.micropython.org/en/latest/
PyBoardをちゃちゃっと使ってみるサンプルコード
    http://docs.micropython.org/en/latest/pyboard/quickref.html
クイックスタート
    https://micropython.org/help/
ダウンロード:
    https://micropython.org/download/
Github:
    https://github.com/micropython/micropython

* Micro Pythonとは
(1) Python v3.4の言語仕様に基づき,マイコン上で仮想マシン・インタプリタ/コンパイラを実行する。
(2) STM32F405RGT6(168MHz動作)を使った専用ボード(PyBoard)が発売されている。
    https://micropython.org/store/#/store
    28ポンド
    1ポンド/180円(2015/09)なので5000円くらい。
その他動作可能なマイコン/ボード:
    今回はSTM32F4-Discoveryで動かしますが,
    STM32F746-Discovery, 
    STM32F411-Discovery,
    Nucleo-F401/F411,
    dsPIC33F, 
    NetDuino+2(STM32F405RG), 
    Teensy3.1,
    その他のマイコン,ボードで動く様です。
(3) ソースコードはMITライセンス。
    http://docs.micropython.org/en/latest/license.html
(4) ANSI Cで記述されている。
(5) インライン・アセンブラを装備。(ARMのみ)
(6) 高速実行。
(7) メモリ使用量と実行速度を考慮した3つの"コード生成/実行"。
    詳細は以下の原文とコメントのやりとりを参照。
    The 3 different code emitters 
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/664832
    以下のコード生成(b),(c)を指示する場合,関数定義時にデコレータ指令を使う。
    通常は(a)を使い,少しスピードが欲しい時は(b)を使うといいだろう。
    (a) 通常の仮想マシンコード生成モード(Bytecode emitter)
        デフォルトでは仮想マシンコードが生成され,
        Micro Python内蔵の仮想マシンで実行される。(一部を除きCPythonと同等)
        メモリ(SRAM)使用量は一番小さい。
        デコレータ: @micropython.byte_code (デフォルトは無指定でこれになる)
    (b) Native emitterによるコード生成
        個々のバイトコードを等価なARM-Thumbコードに変換後実行する。
        ローカル変数はC言語のスタック領域に保存され,C言語レベルのランタイムルーチンを
        呼び出して実行する。
        メモリ使用量は中間程度。
        デコレータ: @micropython.native
    (c) Viper emitterによるコード生成
        Native emitterに整数演算の最適化を施したコードを生成する。
        例えば2つの整数の加算はC言語レベルのランタイムルーチンを呼ばず,
        直接ARM-Thumbコードの"adds命令"を生成する。
        状況に依っては,Native emitterより7倍程度高速実行可能な場合があるらしい。
        メモリ使用量は一番大きい。
        欠点: 全てのPython命令をサポートしている訳ではない。
        デコレータ: @micropython.viper
    boot.py内のオプションでデフォルトemitterを変更可能。

以下はViper emitterがデフォルトのBytecode emitterより24倍高速実行可能な例を
説明している。
The 3 different code emitters, part 2 
https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/665145

(8) バイトコードはSRAM上に展開され実行される様だ。
(9) 基本ペリフェラル・ライブラリ
    GPIO, SPI, UART, I2C, Ethernet, Servo, PWM, Timer, ADC, DAC等々は
    標準で用意されている。
    SDカード, 加速度センサーも使える。

* PyBoardの回路図等
    http://micropython.org/resources/PYBv10b.pdf
    http://docs.micropython.org/en/latest/pyboard/hardware/index.html

* Micro Pythonの言語仕様
(1) Python v3.4 の仕様とほとんど同じである。
    ドキュメントは以下
    docs.python.org 
    より詳細な差異: Differences to CPython
(2) 違う部分の説明
    ARM Thumb2のサブセットを使ったインライン・アセンブラ仕様説明
    Inline Assembler for Thumb2 architectures
    http://docs.micropython.org/en/latest/reference/asm_thumb2_index.html    
(3) インラインアセンブラ関連情報
    Inline assembler 
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/667580
    インラインアセンブラのチュートリアル
    http://docs.micropython.org/en/latest/pyboard/tutorial/assembler.html#pyboard-tutorial-assembler

* 実行速度
LEDチカチカの単純ループの比較であるけれど,
Arduino Uno 16MHzのC(++)言語で記述されたものと同等の速度が出る。
最適な書き方をすればMicro Pythonの方が2倍速いらしい。
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/664832
Performance:
別な視点から比較ベンチマークを行っている
https://github.com/micropython/micropython/wiki/Performance

* オリジナル(PyBoard)のMCUはSTM32F405RG
F407(STM32F4-Discovery)との違いはF405側に「カメラIF」と「Ethernet IF」がないこと。
マニュアルが同じなので親和性が高い可能性があるが,
STM32F4-Discoveryボードは使用済みのI/Oが多いので,そのあたりが注意ポイントかも。
STM32F405RG
http://www.st.com/web/jp/jp/catalog/mmc/FM141/SC1169/SS1577/LN1035/PF252144

* Micro Pythonに於けるSTM32F4-Discovery情報
    Board STM32F407 Discovery
    https://github.com/micropython/micropython/wiki/Board-STM32F407-Discovery

* Micro PythonのPythonパーサ/字句解析についての記述
    Stretch goal ideas, and the parser 
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/669549

* Ethernet対応
    Wiznet 5x00系対応
        Wiznet WIZ820io等に対応
    WiFiモジュール Adafruit CC3000に対応
    http://www.adafruit.com/products/1469
    日本で使えるかは不明
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/681998

* スケジューラの作成と実行
    Progress, and some more example code
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/675393

* マンデルブローとライフゲームのグラフィック・サンプルコード
    https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/664040
    examplesフォルダにソースあり。

* ガベージコレクションについてのヒント
コメント欄参照
The C API in Micro Python 
https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/679050

* 消費電力についての記述
Power consumption of the board 
https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/posts/685745

* STM32F4-Discoveryで実際に動かしてみた
必要条件:
    (1) MicroUSBケーブル: CN5に繋いでその先をPCに繋ぐ。
        Raspberry Pi用の物が使えた。 (^^)/
        CN5系由でUSB-Flash-MassStorage機能とUSB-UART(VCP)機能(REPL用)を使う。
    (2) デバッグ用のミニUSB端子 : ケーブルでPCに繋ぐ。
        (a) Micro Python的には単なる電源供給端子である。
        (b) ここにSTLink-UtilityのGUI版を繋いで「firmware.hex」を書き込めばMicro Pythonが動く。
            firmware.hexは自分でコンパイルしたものを使いました。
            コンパイル方法は下記,参考情報ページを参照。
注意ポイント:
    (1) インタラクティブシェル(REPL)用の仮想UART(COM)ポートが出現するので,
        Windows10ならTeraTerm等で115200bpsで接続,Enterキーでメッセージが出る。
        >>>help()
        と入力してみよう。
        Win8/7系は出現したドライブ中の「pybcdc.inf」をデバイスマネージャで
        不明になっているUSB(-COM)デバイスに対して「更新」でインストールする。
        Win10も後からinfファイルをインストールした。識別が容易になるので。
    (2) インタラクティブシェルにコードをコピペする時の注意
            これハマリました。 orz
            TeraTerm上へPyhtonコードをコピペする時は,
            <CR>付きコピペを使うこと。
            CRなしコピペだとうまくコードが認識されず文法エラーが起きたりします。
            orz
    (3) Flashドライブは必ず「取り出し」する
        マスストレージでマウントされた「main.py」が存在するドライブ(Flashドライブ)の取り扱いはSDカード等と同じく,
        ボードリセットやボードの電源を切る前に,必ずエクスプローラから「取り出し」を実行しておきます。
        取り出し完了までに結構時間がかかります。(Windows10)
        これを忘れてFlashファイルシステムが破壊されると以後編集不能になりファーム書き換えでも復活しません。
        orz
    (4) 破壊されたFlashドライブを初期化する
        上記で編集やコピーが不能になった場合,STLink-Utilityから
        「Target」-「Erase Chip」を実行後,ファームを書き込みなおします。
        これで全て初期化された状態で復帰します。
    (5) 「取り出し」なしで編集,実行を繰り返す方法
        main.pyを編集した後,REPLターミナルから「CTRL-D」を押すとMicro Pythonのソフトリセットがかかり,
        Flashドライブとターミナルの接続状態を保持したまま「main.py等」が再読込みされます。
        通常はこの方法で使うのが良いと思います。
        但し,今ひとつ挙動が微妙なところがあるので,結局ハードリセット使ったりします。orz
コンパイル時に必要なもの:
    (1) arm-none-eabi-gcc.exeにパスを通す。
    (2) Python v3.4.x(2.7.x)にもパスを通す。
        https://www.python.org/downloads/
        Pythonはv3.4系を推奨します。一部のツール(tools/pyboard.py)がv2.7系未対応だったりします。
    (3) make.exe も必要。
コンパイル:
stmhalフォルダで,
make BOARD=STM32F4DISC
...
CC usbdev/class/src/usbd_msc_scsi.c
CC usbdev/class/src/usbd_msc_data.c
CC build-STM32F4DISC/pins_STM32F4DISC.c
LINK build-STM32F4DISC/firmware.elf
   text    data     bss     dec     hex filename
 267528      96   27676  295300   48184 build-STM32F4DISC/firmware.elf
Create build-STM32F4DISC/firmware.dfu
Create build-STM32F4DISC/firmware.hex
build-STM32F4DISCフォルダ内の「firmware.hex」をSTLink-Utilityで書き込みます。 * 加速度センサ(STM32F4-Discovery) STM32F4-Discoveryの加速度センサライブラリはバグで動かない様です。orz PyBoardとは関数の呼び出し方が違います。 STM32F4-Discoveryで加速度センサを使う方法: (1) stmhal/boards/STM32F4DISC/staccel.pyをFlashドライブにコピーします。 (2) REPLターミナルから
>>> import staccel
>>> ac = staccel.STAccel()
でオブジェクト化します。 後は, ac.x() ac.y() ac.z() ac.tilt() ac.filtered_xyz() 等の関数が使えるはずですが, 初期化時のバグで加速度センサのIDが正しく取得できず,上記のオブジェクト化で失敗します。 orz 以下その話題。 STM32F4-Discoveryのバグ http://forum.micropython.org/viewtopic.php?f=2&t=595&start=10 現時点で上記「やっつけバグ修正」をしても初期化で失敗します。 orz バグ修正版 staccel.py: STM32F4-Discoveryボード上の加速度センサは2種類あって, 古いボードはLIS320DL 新しいボードはLIS3DSHが載っているようです。 自分のは古い方のICでした。 IC判別は自動で行われるので気にする必要はありませんが,ボードをよく見ると上記文字の一部が 読み取れます。 動作可能な様に修正したものをここに置いておきます。 micropython-fixed-staccel-py-201509-v2.zip : DMA禁止版 準備中 micropython-fixed-staccel-py-201509.zip : 古い版 本家にプルリクエストしておいたので将来反映されるかもしれません。 古いICでしか動作確認していません。 注意ポイント: 初回の加速度センサID取得が失敗するので2度読みするという,やっつけで 動作可能にしていますが根本原因は分かっていないようです。 上記自分の修正版は,それに加えてSPIクロックの極性(Porarity)を1(=CPOL)に変更してあります。 基にしたと思われるSTMicroのサンプルコードはCPOL=0となっていてバグっている様です。 あと,SPIクロックが約330KHz(328125Hz)と低速だったので2MHzに修正しておきました。 328125Hzに何か意味があるのか今のところ不明です。 追記: 「プルリクエストにコメントくれた人がいて,実は最初動いていたけどSPIをDMA化した時に おかしくなったことが判っていて,read_bytes()関数内を割り込み禁止にすればIDを2度読み する必要はない。割り込みを禁止するとDMAは自動で禁止されるから。 でも,どうしてそうしないといけないのかは判っていない」と言われた。 DMA禁止版をプルリクエストしておいた。 * STM32F411-Discovery対応 Audio DACやセンサ山盛り。STM32F4-Discovery(STM32F407)のMCUをF411VEに変えた様なボード。 http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/LN1848/PF260946?s_searchtype=keyword 数日前にコミットされたばかり。 stmhalフォルダで,
make BOARD=STM32F411DISC
* Nucleo-F401/F411RE対応 以下のページでNucleo-F401で使う方法が解説されている。 Running micropyton on STM32Nucleo-F4 http://www.carminenoviello.com/en/2015/06/03/running-micropyton-stm32nucleo-f4/ 現在のところ,本家とは別リポジトリなので注意。 https://github.com/cnoviello/micropython Nucleo-F401で使う方法: 上記リポジトリを取得して stmhalフォルダで,
make BOARD=STM32F4NUCLEO
Nucleo-F411で使ってみる: F401は持っていないのでF411で動かしてみた。 上記F401はデフォルトでコンパイル可能だがF411はソースの修正が必要。 追記 2016/02 : ソース無修正でF401のバイナリをF411に書き込んだほうが良いと思います。 STM32F4NUCLEOフォルダ内の (1) mpconfigboard.h 内の定義を以下に修正
#define MICROPY_HW_MCU_NAME         "STM32F411xE"
(2) mpconfigboard.mk 内の定義を以下に修正
CMSIS_MCU = STM32F411xE
AF_FILE = boards/stm32f411_af.csv
LD_FILE = boards/stm32f411.ld
システムクロック周りやリンカスクリプトはよく見る必要があるかもしれないが, 今回はそのままで実験してみた。
make BOARD=STM32F4NUCLEO
で「build-STM32F4NUCLEO」に生成された「firmware.hex」をSTLink-Utilityで 書き込みます。 仮想COMポートが出現するので、115200bpsで接続してEnterキーを押せば、 インタラクティブシェルが起動します。 外部スクリプトをロードする方法: Windows上のやり方です。 toolsフォルダにあるpyboard.pyを使います。 PC側のPythonはバージョン3.x系である必要があります。 (1) $ python pyboard.py --device=COM4 foo.py これで任意のfoo.pyスクリプトをロード/実行できます。 (COMポート番号はデバイスマネージャから見つけてください) (実際にはpyboard.pyの前にtoolsフォルダまで,foo.pyの前にそこまでの 相対フォルダ又は絶対フォルダが必要です)(必要ならですが) 上記コマンド実行後,自動でソフトリセットがかかるので,foo.pyに実行可能命令が有る場合 自動実行されます。 関数・クラス定義だけならREPLコンソールから呼び出しできます。 注意ポイント: この方法は電源OFFでfoo.pyが消えてしまいます。 Flashに書き込むには次の方法を使います。 (2) $ python pyboard.py --device=COM4 --send foo.py これでFlashにfoo.pyが書き込まれ実行されるはずですがF411の場合, 今のところうまく動きません。 orz * dsPIC33FJ256GP506版 PICの16bitマイコンでも動く様だ。 ただし,現時点ではコンパイル可能なスタートポイントという感じで,必要最小限なLEDチカチカ, UART,ベタ待ちdelay,Switch程度しかインプリメントされていないので, ペリフェラル操作関数は自分で作り込む必要がある。 dsPIC33Fで動くならPIC24F系で動かすことも可能だろう。 コンパイル: pic16bitフォルダで,
make XC16=/c/xc16/v1.23
でコンパイル可能。 XC16はコンパイラへのパス。 「unistd.h」が存在しないエラーが出たら「../py/stream.c」内の「#include <unistd.h>」をコメントし, 代わりに「#include <stdio.h>」を追加する。 コンパイラはv1.23, v1.11でOK。 v1.25はリンクエラーとなった。 orz
...
CC main.c
CC board.c
CC pic16bit_mphal.c
CC modpyb.c
CC modpybswitch.c
CC modpybled.c
CC ../stmhal/pybstdio.c
CC ../stmhal/pyexec.c
CC ../lib/mp-readline/readline.c
LINK build/firmware.elf
   text    data     bss     dec     hex filename
 180248     488    9692  190428   2e7dc build/firmware.elf
Create build/firmware.hex
ペリフェラルIFがほとんどない状態でFlash 180kbyteなので 256Kbyte以上のマイコンが必要そう。 * その他,用意されているプロジェクト,フォルダ bare-metal: STM32F405RGT6 ARM用の仮想マシンのみをコンパイルする最小プロジェクトと思われる。 コンパイル結果は以下,
LINK build/firmware.elf
   text    data     bss     dec     hex filename
  71488       0     404   71892   118d4 build/firmware.elf
minimal: 上記bare-metalよりも現実的なプロジェクト。STM32版はUART経由で使える風。 (1)PC用: minimalフォルダ内でmakeと打つとPC用のバイナリを生成します。 このバイナリでそのままPC上(MS-DOS窓/xterm等)でREPLが動きます。
LINK build/firmware.elf
    text       data        bss        dec        hex    filename
  141528        296       2524     144348      233dc    build/firmware.elf
Windows上だと"alloca.h"がないと言ってコンパイルできない。 Linux上なら問題ない。orz (2)STM32F4xx用: minimalフォルダ内で make clean make CROSS=1 と打てばSTM32Fxx用(デフォルトはSTM32F405)のバイナリができます。 UART1経由でREPLができます。9600bps 。
CC main.c
CC uart_core.c
CC uart_extra.c
CC ../lib/utils/printf.c
CC ../lib/utils/pyexec.c
CC ../lib/libc/string0.c
CC ../lib/mp-readline/readline.c
LINK build/firmware.elf
   text    data     bss     dec     hex filename
  77812       4    2524   80340   139d4 build/firmware.elf
Create build/firmware.dfu
esp8266: WiFiモジュール esp8266内蔵マイコン上でMicro Pythonを動かすプロジェクト。 コンパイラである xtensa-lx106-elf-gcc.exeはArduino1.6.5 IDE用のものが使用できる。 コンパイラへのパスはMsys/MinGWの場合,以下の様に設定する。(Windows10)
export PATH=/c/Users/user_name/AppData/Local/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9/bin:$PATH
現時点ではコンパイルエラーとなる。orz * 今後,参考になりそうな情報や参考ページ * LCDやHIDモードを使った例 planset blogさんのブログ Micro Python http://dkpyn.com/blog/2375 STM32F4-Discovery * モジュールの作り方 MicroPython で遊ぶ(2014/9) http://moxi.jp/wiki/wiki.cgi?page=MicroPython+%A4%C7%CD%B7%A4%D6%282014%2F9%29 MicroPython Pyboard を使ってカラーディスプレイ(μOled128)を動かす http://takesan.hatenablog.com/entry/2015/08/12/204937
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(1) | Python | このブログの読者になる | 更新情報をチェックする

2015年08月02日

Windows10に無料アップグレードした (^^)/ 時のメモ 2015/08

Windos10に無料アップグレードした (^^)/ 時のメモ 2015
* はじまり
自宅のデスクトップPCをWindows7からWindows10に無償アップグレードしてみた感想とメモ。

* 基本性能は向上した
Win7からなので、Win8.1からだと差は少ないと思われる。
GUIをチープにした分もあると思われるが、それを除いてもカーネルコアやデバイス・コントロール周りは
かなり改善している感じだ。
(1) ハードディスク・アクセス性能は劇的に向上した。
    これはビックリでした。良かった良かった。
(2) ネットワークの速度も多少改善している気がする。

* GUIの装飾はチープ
(1) タイトルバーのアクティブ、非アクティブで色が変わらないのは、X(バツ)。
	そのうち以下を試してみる。
    Windows 10向けのオプションを追加したカスタマイズツール「Winaero Tweaker」v0.3 
    http://www.forest.impress.co.jp/docs/news/20150803_714731.html    
(2) Window枠が消滅したのも、X。
(3) デフォルトのシステムフォントがチープ、X。
(4) スタートメニューは、ちゃらちゃらしてて嫌い。:D

* VMWare Playerの挙動が高速になって (^^)/
    これは結構劇的でした。ハードディスクアクセスが改善した効果もあって、
    サスペンドする時の時間が劇的に短縮された。
    劇的に、です。
    仮想マシン内のOSの動作速度もかなり改善した。特にWindows10のInsider Preview版。:D

* その他
(1) コマンド・プロンプトは改善されたが今更感がある。
    Msys/MinGWでOK。
(2) Windows Searchがバックグラウンドでガリガリ動くので、
    ファイル数が巨大なフォルダはプロパティでインデックス化しないようにした。

* 不具合系
(1) VMwareはインストールバイナリを再入手して修復セットアップが必要。
    VMnat0が消失するため。
(2) ATOKも再インストールor修復セットアップが必要らしい。
    タスクバーの検索窓で漢字変換できない。その他は大丈夫風。
(3)あるアプリケーションは長期に渡ってWin7で深刻な不具合があったが、
    Win10にしたら勝手に直った。(^^)/ Win8系は元々大丈夫だった。
    作者がWin7を所有していないと思われる。:D

* マイコン関係
(1) マスストレージ系やUART系書込みのARM系は心配なさそう。
(2) PICkit2,PICkit3,MPLABX等は未確認。

* ここまでの感想
    欠点もあるが修復しながら使えばなんとかなりそう。
    それよりも何よりも基本処理速度が向上したので、
    もうWin7に戻す気にならないのも事実。

* 注意ポイント
Windows 10で高まるプライバシーへの懸念
http://yro.srad.jp/story/15/07/31/2256247/
自分はInsider Previewの時点で気付いたので速攻でOFFにしたけど、
普通の人は気付くまで個人情報だだもれ。
しかも、何が送られているか明示されていないので結構怖い。

* 個人情報流出を抑止する設定
(1) パソコンは必要な時以外マイクロソフト・アカウントではなくローカル・アカウントで
    ログインして使う。
(2) 「スタートメニュー」-「設定」
    -「プライバシー」内の設定をすべてチェックし、 (全てです)
    原則すべてOFFにする。(情報を送らない側)
    
    ただし、使い勝手にかかわる部分は自己判断で許可することになる。

(3) これは怖い
    Windows 10、ダウンロード済み更新プログラムを他のユーザーに送信する機能がデフォルトで有効に
    http://it.srad.jp/story/15/08/01/2159204/
    勝手にP2Pするな!




posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | Windows10 | このブログの読者になる | 更新情報をチェックする

2015年07月25日

P-Study Systemのネイティブ音声mp3を無料で取得する 2015

P-Study Systemのネイティブ音声mp3を無料で取得する

* はじまり
* ネイティブ音声の必要性
* デモ音声
    単語:
    イディオム(熟語):
* 動作環境
    P-Study Systemのバージョン:
* 準備
Download: VoiceGet (2015/10 v2.1)
    古い版:
取得したい単語のリスト:
* ネイティブ音声の取得
* 複数のCSVファイルを一度に使う
* 出力表示
    意味:
* PSS上でVoiceデータを指定する
    発音設定:
* Voiceデータのサイズ
* Voiceデータの取得率
* VoiceGetの仕様
    v2.1:
    任意の単語リストを使って音声データを初めて取得した場合:
    同じ単語リストで複数回voicegetを実行した場合:
* voiceget.exeのコマンドライン・オプション
    特定の拡張子のファイルを一括して読み込んで処理します:
    Voiceデータを一つ取得するたびに,1000msec(1秒)待ちます:
    凡例:
* オンライン英語辞書から英単語情報(音声)を取得するツール VBScript版

* 次回予告

* はじまり
P-Study Systemについては以前書いた。
P-Study System (以下PSS)で英単語を暗記する時に、
ネイティブ音声で発音してくれる 機能がありますが、
音声データが有料だったり、 合成音の場合、今ひとつノリが悪かったりします。xD

そこで、以下のページを参考にして、
 Download the Audio Pronunciation of Words from Google
日本語ページ
http://f.daccot.com/2012/03/29/11245/ネイティブ発音mp3データ」を無料で入手する ツールを作りました。

v2.1以降は英単語リストをドラッグアンド&ドロップするだけで簡単に音声データ取得可能になりました。

* ネイティブ音声の必要性
個人的な感想ですが、ネイティブ発音があった方がメリットが大きいと思います。
絶大です。
(1) 無音だとモチベーションが全くアップしません。:D
(2) ネイティブ音声で正確な発音、アクセントが覚えられる。    
(3) いかにも勉強したって感じになる。:D
(4) 飽きにくいと思う。

* デモ音声
以下の様な音声が取得できます。
NAmE系(アメリカンEnglish)と思われます。
単語:
    circumstance
    discrimination
    excursion
    expenditure
    simultaneously
イディオム(熟語):
    acquaint oneself with
    by leaps and bounds
    on the verge of

* 動作環境
  動作はWinodws10上でのみ確認しましたが,その他のWindows(8.1 / 7)でも動作すると思われます。
  以下の説明はWindows10で説明してあります。

P-Study Systemのバージョン:
    現在Ver.8.5.0 Beta6使用しています。
    http://www.takke.jp/pss/download2.html

* 準備
mp3データはWeb上から取得するのでインターネット接続が必須です。

Download: VoiceGet (2015/10 v2.1)
    (最新版 2015/10):
voiceget-v2.1-201510.zip
    上記ファイルを適当な作業フォルダ(後述)に置いて解凍してください。
    wordlist.txt はサンプルの単語データです。
	注: 実行にはハードディスクの空き容量が20MB程度必要です。
古い版:
    (2015/07):
        voiceget-v1.0-201507.zip
            Ruby スクリプトバージョン
 
取得したい単語のリスト:
カンマ区切りのプレーンテキストで、(日本語があるならshift-jis形式)
最初の列が英単語のリストを用意します。
例えば、
PSSの問題集エディタ(PssEditor)で「CSV」形式でエクスポートしたファイルならOKです。
方法:
    PSSのメインメニューから「ファイル」-「問題集の編集」でPssEditorを起動、
    適当な問題集を選択し右クリックメニューから、
    「エキスポート」-「ファイルの種類(T)」で「CSV File(*.csv)」を選んで保存します。
    保存ファイル名はなるべく英数字のみにした方が良いです。
    以下,
    例として付属の「wordlist.txt」というファイルを英単語リストとして使います。
    このファイルはお試しなので英単語が5個しか入っていません。

* ネイティブ音声の取得
上記ダウンロードファイルを解凍するとvoiceget-v2.1というフォルダが出来ます。
(バージョンが違う場合は適当に読み替えてください)
voiceget-v2.1というフォルダの上位フォルダ名に「漢字,"全角/半角スペース"」が含まれない様にしてください。
voiceget-v2.1フォルダで「wordlist.txt」を「voiceget.bat」にドラッグ&ドロップします。
    (注: 英単語リストファイル(この場合wordlist.txt)とvoiceget.bat/voiceget.exeは必ず同一フォルダに
      置いて下さい。)
voiceget.bat に一度にドラッグアンド&ドロップできるファイル数は9個までです。
出力表示が見えなくても良い場合,voiceget.exeに直接ドラッグアンド&ドロップすれば
ファイル数制限はないと思われます。(未確認)

* 複数のCSVファイルを一度に使う
voiceget-csv.batをダブルクリックすると,カレントフォルダ内に存在する*.csvファイル全てを
使って一度に音声データを取得します。(階層フォルダの再帰処理は行いません)

* 出力表示
以下の様な出力になります。(以下は出力イメージです)
[ Getting voices ... ]

0001 / 0001: [    ] telephone
0002 / 0002: [    ] dial
0003 / 0003: [    ] text
0004 / 0004: [    ] firework
0005 / 0005: [    ] in_front_of
0005 / 0006: [Fail] vvv
0005 / 0007: [Fail] sss

 Available voices / Total words = 5 / 7

 Voices Folder = data/wavvoice/cobuild_mp3

[ End. ]
意味: 左の数字: 取得できたVoiceデータの数 次の数字: 入力した単語の総数 [ ] : 取得OK時の表示 [Fail] : 取得失敗時の表示 右の単語: 取得を試みる単語、イディオム Available voices / Total words = 5 / 7 : 最終的に 5個の音声データを取得し、取得を試みた単語は7個だったという意味。 Voices Folder = data/wavvoice/cobuild_mp3 : Voiceデータはカレントの「data/wavvoice/cobuild_mp3」フォルダ以下に格納された。 * PSS上でVoiceデータを指定する 上で取得したmp3のVoiceファイル群をPSS上で使用できる様にします。 「P-Study system」を起動し, メインメニューから「ツール」-「ファイル」-「音声再生WAVファイルの格納フォルダ」で 上記, data\wavvoice を指定します。 必ず「cobuild_mp3」の一つ上のフォルダ「wavvoice」を指定します。 さらに「wavvoice」の上位フォルダ名は「data」でなければならない様です。 発音設定: 同じ画面の左側のツリーから「音声再生」を選びます。 右のペインで、 「英英辞典のネイティブ音声を自動的に再生する(N)」にチェックを入れます。 これで学習時に自動発音されると思います。 * Voiceデータのサイズ 適当に試したところ、 約2000単語で約35Mバイトだったので、 1個平均 約18kbyte (mp3) 1000単語あたり 18Mバイト程度でしょうか。 * Voiceデータの取得率 2000単語で試した結果です。 Voiceデータ取得時間: 5分 取得数: 1958個 1958/2000 = 98% これくらいの取得率なら文句ないと思います。 但し、 イディオムはほとんど取得できません。 不足分の単語,イディオム音声は無料合成音の「ZiraPro」を導入し補完すれば良いかと思います。 * VoiceGetの仕様 v1.0はRubyのインストールが必要でしたが,v2.1以降は実行ファイル形式にしたので英単語リストを用意 すればすぐに実行出来ます。 v2.1: 任意の単語リストを使って音声データを初めて取得した場合: (1) 音声データをvoiceget.exeがあるフォルダのdata/wavvoice/cobuild_mp3以下に保存します。 (2) 取得に失敗した(サーバ側に存在しない)単語は,voiceget-error-words.logに登録されます。 同じ単語リストで複数回voicegetを実行した場合: (1) 既に取得済(data/wavvoice/cobuild_mp3以下に存在する)の音声データは再取得しません。 (2) voiceget-error-word.logに登録済み(以前取得に失敗した(サーバ側に存在しない))単語は 再取得を試みません。 (3) 従って,同一単語リストを使った場合,単語取得をWebから行わないので一瞬で処理が終了します。 * voiceget.exeのコマンドライン・オプション 上記,voiceget.batはコマンドラインツールvoiceget.exeの単なるラッパーです。 以下はコマンドラインで使う場合の動作仕様です。 コマンドライン・オプション:
$ ./voiceget -h
Usage: voiceget [options]
    -e VAL                           Specify extension of input files. [csv,txt,etc.]
    -t VAL                           Specify wait time [msec] to getting per word
    -v                               Version info
特定の拡張子のファイルを一括して読み込んで処理します:
voiceget -e csv            # カレントフォルダ内の拡張子csvの全てのファイル。
voiceget -e txt            # カレントフォルダ内の拡張子txtの全てのファイル。
Voiceデータを一つ取得するたびに,1000msec(1秒)待ちます: サーバの負荷が心配な場合に使用します。
voiceget -t 1000 file.csv 
凡例: 拡張子eccのファイル全てを待ち時間1.5秒で処理します。
voiceget -t 1500 -e ecc
* オンライン英語辞書から英単語情報(音声)を取得するツール VBScript版 http://blogs.wankuma.com/yaju/archive/2011/08/15/201577.aspx 実は上記リンクのツールの存在を見落としていました。 orz orz * 次回予告 次回はTOEICキクタン600/800の別売テキストデータを PSS用の問題集に変換するというネタです。 単語音声データも今回のやり方で自動取得します。
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(2) | 英語 | このブログの読者になる | 更新情報をチェックする