このブログ的には、mrubyって「ムルビー」って読みがち。 (オイ 軽量Rubyへの取り組み http://www.iij.ad.jp/company/development/tech/activities/mruby/ * mrubyをコンパイルしてみた 2012/05 2012/04/20あたりにgithubでアップされていたらしい。 git://github.com/mruby/mruby.git https://github.com/mruby/mruby ググってみると、まだアップされて20日くらいしか経っていないのに 多くのフォロアがいて驚いた。さすがに国産だけあって注目度が高いのが伺える。 自分の環境ではMinGWにbisonを追加するだけでコンパイルと動作確認出来た。 mingw-get install msys-bison gccはv4.6.2でデフォルトの「-O3」オプションで920kbyteくらいだった。(stripかけて) これを、いわゆる超組み込み向けの「-Os」オプション :D に変更すると 720kbyteまで減った。(注1)mruby\bin>size mruby.exe text data bss dec hex filename 717200 2992 2680 722872 b07b8 mruby.exeこのブログ的なターゲットマイコンとしては、 IF誌付録のSH-2Aマイコン(DRAM 1Mbyte) STM32F4Discoveryボード(Flash 1Mbyte/ SRAM 192kbyte) 等が考えられる。 上のコンパイル結果(x86用)をみると、上記マイコンではシステム的に アンバランスなもののFlashが720kbyteで収まったのはちょっと予想外だった。 (I/Oモジュールなしなので、これだけではアレだけど) 動作に必要なヒープ量が100kbyte〜200kbyte程度なら何とか上記マイコンでも動きそうな 気がするが今のところ必須最低ヒープ量は未調査。 フォロアが多いのでそのうち誰かが... (オイ (注2) ちなみに、このブログ的な物件としては、ざっくり PyMite(p14p) Flash 30kbyte〜 , SRAM 8Kbyte〜 Pawn Flash 64kbyte前後〜 , SRAM 32kbyte程度? 探査中 eLua Flash 200kbyte前後〜, SRAM 32kbyte〜 というのが今までの経緯なので、 mrubyはやはり「別カテゴリ」に属するのは明らかなわけだけど。 * PC上で動かしてみた 上でコンパイルした「mruby.exe」でスクリプトを動かしてみた。 スクリプトを「hello.rb」とすると bin/mruby.exe hello.rb とすれば動く。 以下は、実験用のスクリプトなので深い意味はない。class Msg def initialize( str ) msg( str ) @instr = "internal" end def msg( str="Hello mruby !") puts str + " --- " + @instr end def rx( txt ) for i in 0..txt.length do puts txt.upcase[i] end end end def func_main() obj = Msg.new("Init hello") obj.msg() obj.rx("nbnbnb") obj.rx("abcdefg"[1..4]) puts 3.1 * 5 end func_main()上は、一応意図通り動きました。 正規表現比較の「=~」が使えなかった。 orz と、いうか、 ドキュメントがなさそうなので、どういう予約語が使えるとか使えないとか、 「素のruby」の言語仕様ってなに? とか、今のところ不明な点は多い。(メーリングリストがあるらしい) 予約語については「src/keywords」で大まかにわかる。 仮想マシンコードを実行: bin/mrbc.exe hello.rb とすると「hello.mrb」という仮想マシンモジュールが生成される。 これを、実行するには bin/mruby.exe -b hello.mrb とする。 仮想マシンモジュールのC言語配列を出力 上のスクリプトのメイン関数「func_main()」をC言語の配列として出力できるみたい。 bin/mrbc.exe -Bfunc_main hello.rb とすると以下の様な仮想コード配列「hello.c」が出力される。const char func_main[] = { 0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x39, 0x30,0x30,0x30,0x30,0x4d,0x41,0x54,0x5a,0x20,0x20,0x20,0x20,0x30,0x30,0x30,0x39, ......ARMコンパイラでコンパイル irukaさんのページで、armコンパイラを使って実際のサイズが出た様です。 http://hp.vector.co.jp/authors/VA000177/html/2012-04.html なんと、Flashサイズ640kbyteまで来ました。 (注1)x86系のコンパイルサイズとARM Cortex-M系のコンパイルサイズはだいたい 同じだろうという予測に基づく。(±数十%程度と予測) (注2)gdbで見ればいいわけだけど。 参考: Big Sky システム開発屋がひっそり語るぼやき http://mattn.kaoriya.net/software/lang/ruby/20120420121729.htm mruby を Ash エミュレータ上の Linux (uClinux) 環境で動かしてみる http://pylone.jp/blog/mruby_on_qemu_ash rubyco(るびこ)の日記 Windows XPでmrubyをビルドして動かすAdd Star http://d.hatena.ne.jp/rubyco/20120424/mruby mrubyコンパイルできなかったけど-std=gnu99つけてコンパイルした。 http://kimoto.hatenablog.com/entry/2012/05/01/155911
マイコン風雲録
2012年05月14日
mrubyをコンパイルしてみた 2012/05
2012年05月05日
雑多なメモ 2012/5
* 以前、Maple/STM32用に作ったEthernetライブラリ(w5100/5200)を
http://avr.paslog.jp/article/2379948.html
w5200でフォーラムの中の人が試してくれたみたい
http://forums.leaflabs.com/topic.php?id=1420
一応UDPの場合、2Mbpsで動いたみたい。
* STM32-H407 PROTOTYPES ARE READY
OlimexのSTM32F4の新手のボード
EUR29.95なので、今日の某Palレートなら「3220円」だ。
Micro SDスロットやArduino風のシールドソケット付
http://olimex.wordpress.com/2012/04/26/stm32-h407-prototypes-are-ready/

http://avr.paslog.jp/article/2379948.html
w5200でフォーラムの中の人が試してくれたみたい
http://forums.leaflabs.com/topic.php?id=1420
一応UDPの場合、2Mbpsで動いたみたい。
* STM32-H407 PROTOTYPES ARE READY
OlimexのSTM32F4の新手のボード
EUR29.95なので、今日の某Palレートなら「3220円」だ。
Micro SDスロットやArduino風のシールドソケット付
http://olimex.wordpress.com/2012/04/26/stm32-h407-prototypes-are-ready/

guidude: Arduinoに任意のHEXファイルを書き込む。 AVRライタ不要
* はじまり * AVRライタ不要でArduinoに任意のHEXファイルを書き込める * guidude * インストールと実行 * 使い方 * ダウンロード * バージョンアップ方法 * 4つの画面 * 動作確認環境 * Windows XPのみ:.NET Framework 2.0のインストール * guidudeの持つ機能 TeraTerm自動終了機能: 日本語メニュー/メッセージ対応: 英語/日本語モード切り換え機能: * アンインストール * ライセンスと再配布 * はじまり 実は、Arduinoというのは全部含めてArduinoなんだけど、:D 例えば、Arduino DuemilanoveやUnoボードだけを観察してみれば、 AVRマイコン(ATmega328p) + 基板や部品など という構成になっている。 そうすると、ArduinoというのはArduinoIDEからAVRマインコンにHEXファイルを書く システムと見ることができる。(注3) じゃ、任意のHEXファイルをArduinoIDE経由でArduinoボードに書けるかというと、 今のところそうはなっていない。 任意のHEXファイルが書き込めれば Arduinoボードを「一般的なAVRマインコンボード」(注2)としても使える様になるのだ。 * AVRライタ不要でArduinoに任意のHEXファイルを書き込める 追加配線や改造も不要。 ArduinoさえあればOK。 HEXファイル: HEXファイルの入手方法は、例えば ここに書いた方法とか、 WinAVR環境、(注4) AVR Studio環境 http://www34.atpages.jp/avrwiki/wiki.cgi mikroC, mikroBasic, mikroPascalの無料版 http://www.mikroe.com/eng/product_downloads/download/ 等でコンパイル、生成することが可能。 原理: Arduino IDE(開発環境)が内部的に使っている「avrdude」というソフトにHEXファイルを渡せば Arduino IDEと同じ原理でHEXファイルをArduinoボード上のAVRマイコンに書き込めるんです。 従って、この方式ならAVRライタは必要ないのだ。(注1) 改造や追加配線も一切不要で、 当然、そのままで元のArduinoシステムでも問題なく使えるのだ。 メリットだけがある話なんです。:D もう少し書くと、以下の様なコマンドを発行すればArduinoボードにHEXファイルを書込み可能。avrdude.exe -c arduino -P COM6 -p m328p -b 115200 -u -e -U flash:w:"blink.hex":a上はOptiboot化したDuemilanoveにHEXファイルを書き込むコマンド。 このコマンドをバッチファイル化すれば、ひとまずOKなもののメンドクサイので、 GUI化してみました。 * guidude yuki-labさんのavrdude-GUI(以下、avrdude-GUI) http://yuki-lab.jp/hw/avrdude-GUI/ というのがあって、これのソースコードを利用させていただいて作ったのが 「guidude」 ベタな名前でアレだけど、 まぁ、名前はぶっちゃけ何でもいいんだけどね、識別できればいいわけで (爆avrdude-GUIに「Arduino簡単HEX書き込みモード」と言うのを追加してみました。 (外見はちょっと違うけど。かなりか。) (^^; 上は、Optiboot化したDuemilanoveにHEXファイルを書き込むときの設定。 リストからArduinoボードを選ぶだけでHEXファイルを書き込み可能です。 簡単、簡単 (^^)/ * インストールと実行 1,ダウンロードしたzipファイルを空白や漢字を含まないフォルダに解凍します。 例えば、c:\guidudeに解凍します。 2,上記フォルダ内の「guidude.exe」をダブルクリックで実行します。 以上です。 デスクトップにショートカット作っておくのが良いかも。 Windows XPの場合は後述の.Net Framework 2.0のインストールが必要です。 * 使い方 用意する物: 例として以下のArduinoボードを使います。 Arduino Duemilanove (atmega328p) または、互換ボード AE-ATmega(atmega328p/16MHz)
![]()
COMポート番号の確認: まずは、Arduino IDEを使って正常に動作していることが前提です。 ArduinoボードとパソコンをUSBケーブルで接続します。
ArduinoIDEを起動して、上図の様に「COMポート番号」(Port)を確認しておきます。 この場合、「COM6」となります。 (普段Arduinoで使っているCOMポートなので、人によって番号が変わります) Arduino IDEは念のため終了しておきます。(COMが競合しないように) guidudeを起動する: 上で調べた「COM6」を下図の@の「Port」のところに設定、 (@のすぐ右の部分をクリックすれば選択できます) Aをクリックして「led_blink_atmega328p_16MHz.hex」を選択します。
「Arduino 簡単 HEX 書込みモード」を設定する 初回起動時は設定済みです。 無改造のArduino Duemilanove (atmega328p) 16MHz/5V、及び互換ボードなら次へ進んでください。 Optiboot化改造がしてある場合、「Arduino 簡単 HEX 書込みモード」のリストから、 適切な物を選択してください。 今の時点では1種類しかないです。(^^; AVRライタなしでArduino DuemilanoveにHEXファイルを書く: これで準備完了です。 下図の「書込み」ボタンで書き込みを開始します。
書き込みが終われば自動でリセットがかかります。 Arduino Duemilanoveボード上のLEDがドキドキすれば成功です。(^^)/ TeraTermなどのターミナルツールで「COM6」に38400bps, s1/np で接続すると以下の様に ゆっくり文字列が表示されます。 1〜9の数字を押せばLEDの点滅速度が変化します。
* ダウンロード 現在、制作途中のデモバージョン、Development demo 略して「DD版」を制作中。 バージョンや動作仕様、外観、使い方等はこのページの説明と異なる可能性があります。 guidude-v0.1.2.31-201205.zip TODO: いっぱい。(オイ 認識済みの不具合: Arduinoモード中にavrdude.exeを切り換えると設定が乱れる。 (Arduinoモードのチェックをし直せば直るはず。又は再起動) * バージョンアップ方法 新しいバージョンのguidudeを使う時の方法が3つあります。 1,新しいほうで、古いファイルを上書きする方法。 以前の設定項目を保つことが出来ますが、不調な場合は「2,」を実行してください。 2,別フォルダに解凍して使う方法。 複数バージョンのguidudeを使うことが出来ますが設定は個々に初期化されます。 3,古いフォルダを削除して、同じ名前で新しい方を使う。 「2,」と同じ結果になります。(たぶん) * 4つの画面 使用状況に応じて4つの画面(上と合わせて)に素早く切り換えることが出来ます。
![]()
![]()
これは、実行過程の出力画面
上図は見やすいように加工してあります。実際はパス情報が付加されるのでもっと見にくいです。(^^; * 動作確認環境 Windows XP でしか確認していませんが、XPより後のWindowsでもそれなりに動くと思われます。 またWindowsの画面設定の諸条件により文字が全部読めなかったりするかもしれません。 1、Windows XP SP3 デスクトップスタイル: Windows XP スタイル 配色: 青 画面のDPI: 96DPI フォントサイズ: 標準 注意:Windowsデスクトップのフォントサイズは標準以外だと画面が微妙に変になるので、 フォントは標準を使って下さい。 画面のDPIも同様です。 2、画面解像度 1280x1024 * Windows XPのみ:.NET Framework 2.0のインストール Windows XP では、guidudeを動作させるために.NET Framework 2.0のインストールが必要です。 以下の2つをインストールするか、 Microsoft .NET Framework Version 2.0 再頒布可能パッケージ(x86) Microsoft .NET Framework 2.0 日本語 Language Pack (x86) 或いは、「Microsoft update」を実行し選択肢から2つを選択して下さい。 * guidudeの持つ機能 外観は大きく違いますが、内部機能的には元になったyuki-labさんのavrdude-GUIと だいたい同じというか、ほぼ同じです。(^^; avrdude-GUIでできることは、guidudeでも同様に出来ます。 以下は、guidudeに固有の機能です。 TeraTerm自動終了機能: ArduinoIDEが書込み時(アップロード時)に自動でシリアルモニタを閉じるのと同様な機能ですが、 guidudeは「TeraTerm」を自動終了させます。 この機能はUARTとアップロードを同じUARTライン(USB-CDC含む)で使うシステムでは、 非常に便利、と言うか、ほぼ必須の機能と言えると思います。 終了させたら今度は起動ボタンが欲しくなりますが、今後のバージョンで追加予定。 日本語メニュー/メッセージ対応: 現在、各種メッセージは大部分がavrdude-GUIと同じ物が出ますが、徐々に日本語化対応していきます。 英語/日本語モード切り換え機能: 英語メニュー(メッセージ)に切り換えることが出来ます。 初回起動時は、表示言語を自動判別します。 * アンインストール 次の手順です。 1,guidudeを終了します。 2,guidudeフォルダごと削除します。 3, C:\Documents and Settings\[ユーザ名]\Local Settings\Application Data\guidude というフォルダを削除します。(Windows XPの場合) 以上です。 * ライセンスと再配布 現在guidude自身(実行ファイル)はBSDライセンスです。 従って、BSDライセンスに従って自由に転載、再配布することが可能です。 その他の同梱ツールについては「License.*」ファイルに記載してあります。 内容物の個別再配布も個々のライセンスに従うことで可能となりますが、 ややこしいので、まとめた方が無難と思われます。 guidudeの使用や再配布は自己責任でお願いします。 (注1)書き込み可能なFlashサイズについて、 書き込もうとするFlashサイズはコンパイル時に確認してください。(HEXファイルのサイズではないです) 例えば、Arduino Duemilanove(atmega328p)の場合、書き込もうとするFlashサイズは30Kbyte以内にしておくのが 無難です。(Bootloaderやavrdude側にリミッタがあるかどうか未確認なので)(あるとは思うけど) (注2)ブートローダ付のボードね。 (注3)正確にはHEXファイルに含まれているマイコン用のFlashデータ。 (注4)WinAVRはArduinoの中に一式含まれているのだ。 参考リンク: avrdude-GUI (yuki-lab.jp Version) http://yuki-lab.jp/hw/avrdude-GUI/ 外付けAVRライタ無しでBootloaderを書き込む http://www.geocities.jp/arduino_diecimila/bootloader/index.html 外付けAVRライタ無しでBootloaderを書き込む old http://www.geocities.jp/arduino_diecimila/bootloader/index_old.html 千秋ゼミ avrdude00
2012年04月09日
衝撃のArduino 1.0.1登場 ?! (rc2)
*Arduino 1.0.1-rc2 2012/04/08にArduino 1.0.1-rc2がリリースされた。 Windows: http://files.arduino.cc/downloads/arduino-1.0.1-rc2-windows.zip Mac OS X: http://files.arduino.cc/downloads/arduino-1.0.1-rc2-macosx.zip Linux (32-bit): http://files.arduino.cc/downloads/arduino-1.0.1-rc2-linux.tgz Linux (64-bit): http://files.arduino.cc/downloads/arduino-1.0.1-rc2-linux64.tgz Source: http://files.arduino.cc/downloads/arduino-1.0.1-rc2-src.tar.gz 変更点: 日本語だけでなく各国語が選択できる。 http://arduino.cc/pipermail/developers_arduino.cc/2012-April/006444.html *Arduino 1.0.1-rc1 Arduino 1.0.1-rc1がリリースされている。 Mac OS X: http://files.arduino.cc/downloads/arduino-1.0.1-rc1-macosx.zip Windows: http://files.arduino.cc/downloads/arduino-1.0.1-rc1-windows.zip Linux (32-bit): http://files.arduino.cc/downloads/arduino-1.0.1-rc1-linux.tgz Linux (64-bit): http://files.arduino.cc/downloads/arduino-1.0.1-rc1-linux64.tgz Source: http://files.arduino.cc/downloads/arduino-1.0.1-rc1-src.tar.gz もうすぐrc2が出る。 Arduino 1.0.1の正式版は2012/04末が目標らしい。 以前書いたように、今回の目玉の一つはIDEの「日本語化(多言語化)」である。 2012/03に出された今回(v1.0.1)の変更概要は以下である。 http://arduino.cc/pipermail/developers_arduino.cc/2012-March/006331.html In particular, changes include: - fixing the ArduinoISP sketch (lowering baud rate from 19200 to 9600) - internationalization and Japanese translation 多言語化と日本語化 - including of AVR toolchain on Linux - improved compilation speed (only compile changed files) コンパイルスピードの改善 - addition of INPUT_PULLUP argument to pinMode() - ability to do repeated starts in the Wire (TWI) library - Ethernet.maintain() function for renewing DHCP leases - various other bug fixes and improvements 今まで、Arduinoでがっかりさせられていたのが、 「必ず発生する無駄なフルビルド時間」 だった。 ソースコードをたった1行変更しただけでも「フルビルド」が発生。 さらに なんと、「検証(コンパイル)」で「フルビルド」が発生し、 「書き込み(アップロード)」で「またフルビルド」が発生するという、 なんとも非効率なのがArduinoIDEだった。orz orz orz AruduinoIDEから派生したMapleIDE(STM32)もこの欠点を受け継いでしまっているのだった。orz ところが、同じArduinoIDEから派生したmpideというchipkit用のIDEは、独自の 改良がされていて大丈夫らしいという話も小耳に挟んでいる。(未探査) mpideはArduinoでも使えるようだ。 ちなみに、MapleIDEはArduinoの祖先にあたる「Wiring」のIDEに統合される。 というか、現在統合作業が進行中だ。 http://leaflabs.com/2011/11/were-teaming-up-with-wiring/ 実際にコンパイルしてみる 。。。 「も、もう、もっと早くこの機能を導入してほしかった!」 と、小一時間。 涙なくして使えない。 と、言ってみる。 日本語化の威力 メニューやメッセージが見やすいのは当然だけど、 特に、エラーが起きた時、日本語で表示されるのが、分かり易くて非常に良いと思います。 気づいた点を挙げると、 avr-gccが出してくるメッセージ、エラーは英語のままである。 これは、まぁ、しょうがないか。orz 日本語メッセージで検索すると日本語しかヒットしない (^^; 当たり前なんだけど、まぁ、これも許容範囲と。Auduino開発者用メーリングリスト 今回初めて発見したのだった。 いままでフォーラムしか知らなかったけど、 このメーリングリストは必読かも。(必要な人は) http://arduino.cc/pipermail/developers_arduino.cc/
2012年04月06日
雑多なメモ 2012/04
* Arduino Leonard型の OLIMEXINO-32U4出る Arduino レオナルドがいまだ(2012/04)発売されてないなんて。 そうこうしているうちに、Olimexの猛攻が始まるのだった :D これはレオナルドタイプのある程度互換型と思われる。 価格は12.95EURなので、今の某Palレートなら「1420円」で買える。 http://www.olimex.com/dev/olimexino-32u4.htmlこれをブレッドボードに載せたタイプがある。 AVR-T32U4。 これもレオナルドタイプ。 http://www.olimex.com/dev/avr-t32u4.html 価格は12.95EURなので、今の某Palレートなら「1420円」で買える。
![]()
* STM32F4のNetduino http://forums.leaflabs.com/topic.php?id=1522 Netduinoです。Flash1MB/SRAM192kbでこの値段ならOKかも。 FEZ Cerb40 $24.96 40pinのDIPマイコンと同じ寸法らしい。
FEZ Cerberus Mainboard $29.95
*秋月I2C LCD登場 ようやく秋月にI2C LCD。I2Cブーム到来か。 http://akizukidenshi.com/catalog/g/gP-05693/ 秋月も、 最近、ARM系の基板の入手が早かったり、 ようやく3.3V系のLCDを出し始めたりで、 あとは、PIC24FJ64GB002を250円で出せば完結する。(ナンダソリャ *秋月PIC18F26J50が売りきれ http://akizukidenshi.com/catalog/g/gI-05396/ 秋月の様な、ある程度まとまった数を在庫する店で、発売後2ヶ月で 売り切れるというのは、まとまった数を買った人や企業がありそう。 何かが発売されるのか。 お陰で回転が良くなって次回は新しいリビジョンのPICが入手出来そうな予感。 良い良い。(オイ ちなみに、PIC18F26J50にEEPROMは搭載されていないので秋月の記述は間違いだ。 気をつけた方がよい。 * ArduinoIDEの多言語化 2012/04 メニュー関係の文字が世界の国々の言語で表示されるように改良された模様。 以下の方のページで知りました。 http://picgames.tumblr.com/day/2012/04/05 arduino.cc のブログ http://arduino.cc/blog/2012/04/03/arduino-ide-i18-in-the-making/ 大きめの動画 http://vimeo.com/39733963 arduino.ccのブログに、Shigeru Kanemoto氏による「偉大な貢献」とあり この方がスイッチサイエンスの人らしい。 ユーザ層(入門者)を考えると「自国の言語を学んでいる最中の人」 も多いと思います。それを考えると今後の発展も含め、 確かに「偉大な貢献」だと思います。 こういうのって、ほっとくと何年経っても英語のままっていうのがありがち。 ちなみに、「Preference」って単語、高校でも出てこないよね。(オントカヨ 高校3年で習う英単語一覧 http://www.eigo-duke.com/tango/kou3.html にありました。 自分は高校生未満だってことが分りました。orz
2012年04月04日
Pawn Language をマイコン上で動かす メモ(1)
* はじまり 2012年に日本語の書籍が発売された。 書籍はPawn言語を使ってロボットを制御するのが目的の模様。 ここでは、Pawn言語の特質や、STM32マイコンにポーティングするための探査内容をメモする。 libmaple上でなんとか動かしてみたいのだった。 Windows,Linux上で動作させる事も可能。 The Pawn language http://www.compuphase.com/pawn/pawn.htm 新フォーラム http://www.compuphase.com/bitboard/index.php 旧フォーラム? http://www.compuphase.com/fluxbb/index.php ドキュメント http://www.compuphase.com/pawn/pawn.htm#DOWNLOAD_DOCS ダウンロード http://www.compuphase.com/pawn/pawn.htm#DOWNLOAD_WIN * ちょっとややこしい話: コンパイラと仮想マシン 以下のメモでは、「コンパイラ」がなんと3種類も出てくるのだった。 Flash ROM上で仮想マシンをスタティックリンクする場合の概略は以下のような感じ。
| 入力 | 出力 | 入力をコンパイルするコンパイラ | |
| (a) | 「Pawn言語コンパイラ」のソースコード C言語(*.c) |
(2)pawncc.exe | (1)パソコン上のgcc, vc++, bcc等 |
| (b) | Pawn言語のソースコード (*.p) + Native関数用のヘッダファイル(*.inc) |
P-code(*.amx) | (2)pawncc.exe |
| (c) | 仮想マシンのソースコード (amx.c) |
amx.o | (3)ARMマイコン用コンパイラ arm-none-eabi-gcc |
| (d) | Targetコード(*.c)+P-code(*.amx)
+ Native関数等(*.c) + amx.o(仮想マシン) |
最終Targetバイナリ (*.elf, *.hex, *.bin) |
(3)ARMマイコン用コンパイラ arm-none-eabi-gcc |
/* This file implements three the native functions:
digitalWrite(pin, value)
pinMode( pin, mode )
delay( msec )
*/
#include "wirish.h"
#include "amx.h"
static cell n_digitalWrite( AMX *amx, const cell *params )
{
/* digitalWrite( pin, value );
* params[1] = pin
* params[2] = value
*/
cell result = 1;
digitalWrite( params[1], params[2] );
return result;
}
static cell n_pinMode( AMX *amx, const cell *params )
{
/* pinMode(pin, mode);
* params[1] = pin
* params[2] = value
*/
cell result = 1;
pinMode( params[1], params[2] );
return result;
}
static cell n_delay( AMX *amx, const cell *params )
{
/* delay( msec );
* params[1] = msec */
cell result = 1;
delay( params[1] );
return result;
}
int amx_PinIo_Init( AMX *amx )
{
static AMX_NATIVE_INFO pinIo_Natives[] = {
{ "digitalWrite", n_digitalWrite },
{ "pinMode" , n_pinMode },
{ "delay" , n_delay },
{ 0, 0 } /* terminator */
};
return amx_Register(amx, pinIo_Natives, -1);
}
int amx_PinIo_Cleanup( AMX *amx )
{
return AMX_ERR_NONE;
}
加えて、Pawm言語用のヘッダファイル(includeファイル)を作る必要がある。
pawnのソースコードをコンパイルするときに必要なincludeファイル。
native digitalWrite( pin, value ) native pinMode(pin, mode) native delay( msec )*Native関数を作る (2) Flash ROMに内蔵する場合 上のやり方は、P-codeをRAM 上にロードして実行する時の記述方法だったので、 P-codeをFlash ROMに置いた時(仮想マシンとスタティックリンクした時)の方法を記す。 Native関数を名前(文字列)で定義するのではなく、以下の様に「負の数値」に対応させる必要がある。
AMX_NATIVE pinIo_Natives[] = {
digitalWrite, /* -1 */
pinMode, /* -2 */
delay, /* -3 */
};
このテーブルを仮想マシンに通知するため、以下を仮想マシンのコンパイル時に追加
CFLAGS: -DAMX_NATIVETABLE=pinIo_Natives
Pawn言語用のincludeファイルに、上で対応させた負数インデックスを使う。
native digitalWrite( pin, value ) = -1; native pinMode(pin, mode) = -2; native delay( msec ) = -3;*Compiler: 「pawncc」という名前。内蔵しても独立させても良い。 includeフォルダを作ってその中に"default.inc"ファイルを置く。 コンパイル時に"default.inc"ファイルを参照しにいく。 includeフォルダ: コンパイラの直下、又はコンパイラと同レベルに置く。 例えば、p:/pawn/binフォルダに「pawncc」を置いたとすれば、 コンパイラは以下のフォルダを探しに行く。 p:/pawn/bin/include p:/pawn/include default.inc: このファイルに含むべき内容: 全てのアプリ固有の定数 全てのネイティブ関数 全てのオーバーロード・オペレータ 全てのストック関数 全てのpublic関数の前方参照宣言 public変数の宣言 Compiler: コンパイル時にcompilerと同じフォルダにある"pawn.cfg"を参照する。 (WindowsとLinuxの場合) このファイルにコマンドラインオ・プションを書いておく。 実際にコマンドラインで指定したオプションが優先される。 *仮想マシン: CFLAGS: -DNNNという表記は、「仮想マシン」をコンパイルする時に CFLAGSに追加するオプション。 amx.c: 仮想マシンは「amx.c」ファイル1つだけで構成されている。 従って、Native関数は含んでいない。 言い換えれば、「amx.c」以外のファイルは「Native関数」を含むファイルか、 間接的な補助プログラムである。 AMX_ASM: 上のC言語バージョンのP-codeインタープリタ部分に、アセンブラバージョンを使う指定。 CFLAGS: -DAMX_ASM デバッグオプション: 「amx.c」内のassert()関数を無効にするには、「amx.c」コンパイル時に「NDEBUG」オプションを 付ける。( CFLAGS: -DNDEBUG) Unicode / UTF-8サポートを禁止する: CFLAGS: -DAMX_ANSIONLY Threadタイプ: "token threading" == packed opcodes == AMX_TOKENTHREADING == default setting "direct threading" == no packed opcodes == AMX_NO_PACKED_OPC == faster "switch threading" == ANSI C version only supports 1,Flash ROM上のP-codeを実行する時は、 CFLAGS: -DAMX_TOKENTHREADING とする(デフォルト)。オーバヘッドは増えるが、これが必要条件である。 2,P-codeをRAM上で実行する場合、オーバヘッドの少ない CFLAGS: -DAMX_NO_PACKED_OPCの指定が可能。 Flash ROM上のP-codeを実行するために必須な仮想マシン・コンパイルオプション: CFLAGS: -DAMX_DONT_RELOCATE CFLAGS: -DAMX_TOKENTHREADING CFLAGS: -DAMX_NODYNALOAD CFLAGS: -DAMX_NATIVETABLE=pinIo_Natives この場合、ダイナミックロードが不要なので、仮想マシンをコンパイルするときに 「AMX_NODYNALOAD」オプションを付ける。 Native関数テーブルのインデックスはハードコードする必要がある。(マイナス値で) 従って、amx_Register関数は必要ない。 さらに、default.incの先頭に
#pragma libray -を追加する。 コンパイラに「コードとRAMの使用上限」を通知する。(default.inc内)
#pragma amxlimit 8192 /* 8 kiB available for code */ #pragma amxram 4096 /* 4 kiB available for data + stack */AMX_TERMINAL ライセンス: Apacheライセンス2.0(例外付)。 商用利用も可。 alloca redeclaration warning on MinGW http://www.mail-archive.com/bug-autoconf@gnu.org/msg00235.html
2012年03月17日
Maple/libmaple: SdFatライブラリ (1)
*はじまり *サンプル・デモを全部動かす *サンプル・デモの動作 *「SdFatBench.pde」の実行結果 *「SdFatInfo.pde」の実行結果 *「SdFatLs.pde」の実行結果 *「SdFatMakeDir.pde」の実行結果 *「SdFatPrint.pde」の実行結果 *「SdFatTimeStamp.pde」の実行結果 *Arduino1.0の「SDクラス」(SD.h, SD.cpp, File.cpp)をポーティングする *「CardInfo.pde」の実行結果 *「DataLogger.pde」の実行結果 *「Files.pde」の実行結果 *「listiles.pde」の実行結果 *「ReadWrite.pde」の実行結果 *SdFat for Maple/libmaple ダウンロード *インストール *ライブラリの初期化設定 *はじまり Maple/libmaple用のSDカード・ドライバ・ライブラリの話。(注1) SDカードを使うならChaNさんのFatFsがダントツに良いと思うものの、 既にMapleにポーティングされたSdFatライブラリを発見した。 mapleSDfat.zip http://code.google.com/p/maple-sdfat/downloads/list LeafLabsの該当フォーラム・スレッド Has any user created a SD memory ... http://forums.leaflabs.com/topic.php?id=112 SdFatライブラリの流れ: SdFatライブラリの本家はここ、「sdfatlib」 http://code.google.com/p/sdfatlib/ 元々、Arduino用に作られた物らしい。 この「sdfatlib」の、ある時点のものがMaple用に改変され、 同様にArduino1.0用に改変されている。 Maple用のものとArduino1.0用の「SdFatコア部分」は、ほぼ同じと思われる。 で、最新の「sdfatlib」は、かなり「仕様の追加、性能改善」がされていて Arduino1.0なら当然すぐ動くものの、これをMapleにポーティングするのは ちょっと大変そうなので(ToDoかも)、今回は「Arduino1.0互換」のものを目指すことにする。 *サンプル・デモを全部動かす 上のMaple用のSdFatポーティングでは、せっかく20個あるサンプル・デモが 放置状態(コンパイルが出来ない)なので、可能な限り修正を加えて コンパイルと動作確認をしてみました。 その過程で発見されたバグの修正や、その他の修正をSdFatライブラリに加えています。 以下、examplesフォルダにあるデモ(修正済み)。 1. コンパイル不可なもの SdFatGPSLogger_v3: ウォッチドッグ・レジスタを使っているのと、 動作確認が出来ないので放置。 2. 動作未確認なもの(コンパイルはOK) SdFatRawWrite: 高速に500MB書くデモ。時間がかかりそうなので今回はパス。 sdFatGPS_CSVSensorLogger: GPS持ってないので未確認。 SdFatAnalogLogger: 今のところ動作が理解出来ないので:D、未確認。 (というか、SDカードがいっぱいになるまで?書き続ける感じなので 安易に実行しない方が良いと思います。)(注3) 上記以外のデモ動作を実際に確認しました。 以下は、全てのデモの概略。
| 1. | SdFatAnalogLogger | データロガー |
| 2. | SdFatAppend | アペンドモードで書き込む「APPEND.TXT」が生成される |
| 3. | SdFatBench | 下記参照。 read/write 速度のベンチマーク |
| 4. | SdFatCopy | 上のアペンド・デモで作られた「APPEND.TXT」を 「ACOPY.TXT」にコピーする |
| 5. | SdFatGPSLogger_v3 | データロガー |
| 6. | SdFatGPS_CSVSensorLogger | データロガー |
| 7. | SdFatInfo | 下記参照。 SDカードの詳細情報を表示 |
| 8. | SdFatLs | 下記参照。 lsコマンド風 |
| 9. | SdFatMakeDir | 下記参照。 フォルダとファイルを生成する |
| 10. | SdFatPrint | 下記参照。書き込み時にprintクラスを使うデモ |
| 11. | SdFatRawWrite | Adafruit Wave Shieldで高速書き込みするデモ |
| 12. | SdFatRead | 既存ファイルの内容をターミナル画面に出力する |
| 13. | SdFatRemove | 2.で生成された"APPEND.TXT"ファイルを削除するデモ |
| 14. | SdFatRewrite | seekSet()を使って既存ファイルの中間あたりのデータを 上書きするデモ |
| 15. | SdFatRmDir | 9.で生成されたフォルダとファイル群を削除する |
| 16. | SdFatTail | seekSet()を使って、ファイルの最後の方を読み出す |
| 17. | SdFatTimestamp | 下記参照。 |
| 18. | SdFatTruncate | ファイルを途中でカットするデモ |
| 19. | SdFatWrite | "WRITE00.TXT"にテキストを100行書き込む |
| 20. | FileSys | テキストファイル"Read.txt"の中身を表示する。 "Read.txt"は自分で用意する必要がある。orz |
*「SdFatBench.pde」の実行結果
SdFatライブラリの性能:
マイコンボード:Olimexino-STM32(Maple rev5互換)
CPU clock = 72MHz
Type is FAT16
File size 5 MB
| SPI clock | Write speed | Read speed |
| 4.5MHz | 109[KB/sec] | 168[KB/sec] |
| 9.0MHz | 120[KB/sec] | 192[KB/sec] |
| 18.0MHz | 119[KB/sec] | 192[KB/sec] |
Type is FAT16 File size 5 MB Starting write test. Please wait up to a minute Write 119.03 KB/sec Starting read test. Please wait up to a minute Read 192.44 KB/sec Doneデータロガー程度なら無問題。 速度を追求するなら、ChaNさんのFatFsが良い。 「sdfatlib」の最新版も改良されている模様。 *「SdFatInfo.pde」の実行結果 SDカードの詳細情報を読み出して表示するデモ。 (オリジナルのポーティングは、バグがあって表示内容がおかしいので、 SdFatライブラリを修正してあります。)
init time: 1
Card type: SD2
Manufacturer ID: 1B
OEM ID: SM
Product: 00000
Version: 1.0
Serial number: 3xxxxxxxxx
Manufacturing date: 8/2009
cardSize: 3964928 (512 byte blocks)
flashEraseSize: 128 blocks
eraseSingleBlock: true
part,boot,type,start,length
1,0,6,251,3964677
2,0,0,0,0
3,0,0,0,0
4,0,0,0,0
Volume is FAT16
blocksPerCluster: 64
clusterCount: 61940
fatStartBlock: 252
fatCount: 2
blocksPerFat: 242
rootDirStart: 736
dataStartBlock: 768
type any character to start
*「SdFatLs.pde」の実行結果
"lsコマンド風"
ルートにあるファイルの"サイズと日付"を表示した後、
サブフォルダも含め、全てのファイルをリストアップする。
このような性質から、次の「SdFatMakeDir」を実行後に、このデモを実行すると、
数千個のファイルをリストアップし始めます。orz(数分で終わりますが)
Volume is FAT16 Files found in root: BENCH.DAT 2000-01-01 01:00:00 5000000 APPEND.TXT 2000-01-01 01:00:00 347950 ACOPY.TXT 2000-01-01 01:00:00 347950 PFF.H 2009-12-14 21:13:20 26033 PFF.C 2009-12-14 20:58:04 24916 DISKIO.C 2009-12-14 21:11:56 1738 README.TXT 2009-12-14 21:12:58 1522 DISKIO.H 2009-12-09 21:45:08 1146 INTEGER.H 2009-06-15 01:40:06 833 READ.TXT 2012-03-10 23:40:04 86 DATAS/ 2012-03-10 23:40:04 Files found in all dirs: BENCH.DAT APPEND.TXT ACOPY.TXT PFF.H PFF.C DISKIO.C README.TXT DISKIO.H INTEGER.H READ.TXT DATAS/ TEST.TXT Done*「SdFatMakeDir.pde」の実行結果 サブフォルダを作って、その中に2000〜3000個のファイルを生成するデモ。 時間がかなりかかるので注意。 ファイル生成を確認したら、すぐにPC上で削除するか、 「SdFatRmDir」デモ(これも、生成時と同程度の時間がかかる) を実行して削除しておいた方が無難です。
... RD 1016 163 3 RD 1017 164 2 RD 1018 163 3 RD 1019 163 3 RD 1020 163 3 RD 1021 163 2 RD 1022 168 3 Done*「SdFatPrint.pde」の実行結果 "PRINT00.TXT"と言うファイルの中に100行書き込むテスト。 "file.print()"関数を使う。
Printing to: PRINT00.TXT Done出来たファイルをPCで開くと、
... line 96 millis = 8242 line 97 millis = 8242 line 98 millis = 8243 line 99 millis = 8243*「SdFatTimeStamp.pde」の実行結果 ファイルにタイムスタンプを設定するデモ。 void dateTime(uint16_t* date, uint16_t* time)関数内で リアルタイムクロックから取得した時間を設定する。 デモでは固定値を設定している。
Open with default times Creation: 2000-01-01 01:00:00 Modify: 2000-01-01 01:00:00 Access: 2000-01-01 Open with callback times Creation: 2009-10-01 20:30:40 Modify: 2009-10-01 20:30:40 Access: 2009-10-01 Times after write Creation: 2009-10-01 20:30:40 Modify: 2009-10-02 20:30:42 Access: 2009-10-02 Times after timestamp() calls Creation: 2009-11-10 01:02:02 Modify: 2009-11-11 04:05:06 Access: 2009-11-12 DoneRTCライブラリが組み込まれたlibmapleはここ。 git://github.com/rodgilchrist/libmaple.git LeafLabs本家にとりこまれていないのは、Maple rev5ボードが標準でRTC用の水晶発振子を 搭載していないからだと思われる。orz (Olimexino-STM32には32kHzの発振子が付いている) *Arduino1.0の「SDクラス, Fileクラス」(SD.h, SD.cpp, File.cpp)をポーティングする Arduino1.0は上記の「SdFatライブラリ」の上に「SDクラス, Fileクラス」を定義して、 より簡単にSDカードが使える様になっています。 この2つのクラスもMaple/libmapleにポーティングしてみました。 同様に、Arduino1.0に添付のデモもポーティングしています。 使い方はArduino1.0と全く同じなので、以下のページの「SD Library」の項を参照。 Arduino 日本語リファレンス http://www.musashinodenpa.com/arduino/ref/ 以下はポーティング後に、付属の「examples」を実行した結果です。 USB-CDC又は、UART経由で1文字受信後に実行を開始するように変更してあります。 (Arduinoオリジナルは、リセット後いきなり実行されるので注意) *「CardInfo.pde」の実行結果 SDカードの詳細情報を表示する。 ざっと見る限り大丈夫そうです。
Initializing SD card...Wiring is correct and a card is present. Card type: SD2 Volume type is FAT16 Volume size (bytes): 2029649920 Volume size (Kbytes): 1982080 Volume size (Mbytes): 1935 Files found on the card (name, date and size in bytes): BENCH.DAT 2000-01-01 01:00:00 5000000 APPEND.TXT 2000-01-01 01:00:00 170530 ACOPY.TXT 2000-01-01 01:00:00 347950 DEFAULT.TXT 2000-01-01 01:00:00 0 PRINT00.TXT 2000-01-01 01:00:00 2290 CALLBACK.TXT 2009-10-02 20:30:42 1 STAMP.TXT 2009-11-11 04:05:06 0 WRITE00.TXT 2000-01-01 01:00:00 2290 PFF.H 2009-12-14 21:13:20 26033 PFF.C 2009-12-14 20:58:04 24916 DISKIO.C 2009-12-14 21:11:56 1738 README.TXT 2009-12-14 21:12:58 1522 DISKIO.H 2009-12-09 21:45:08 1146 INTEGER.H 2009-06-15 01:40:06 833 READ.TXT 2012-03-10 23:40:04 86 DATAS/ 2012-03-10 23:40:04 TEST.TXT 2012-03-10 23:40:04 17*「DataLogger.pde」の実行結果 データロガー。3つのA/D変換値を1行づつ記録する。 オリジナルは、かなりの行数書き続ける?作りなので、 データを10回書いたら停止するようにしてあります。(注3)
Initializing SD card...card initialized. 2262,2603,2025 2272,2311,2008 2304,2199,2004 2376,2203,2051 2349,2270,2162 2191,2120,2051 2043,2160,1998 2345,2221,2088 2247,2161,2078 2248,2185,2118*「Files.pde」の実行結果 SD.open(), SD.exists(), SD.remove(), などの関数を使って、ファイルの存在確認と削除を実行する。
Initializing SD card...initialization done. example.txt doesn't exist. Creating example.txt... example.txt exists. Removing example.txt... example.txt doesn't exist.*「listfiles.pde」の実行結果 再帰を使ってファイルリストを作る例。
Initializing SD card...initialization done.
BENCH.DAT 5000000
APPEND.TXT 170530
ACOPY.TXT 347950
DEFAULT.TXT 0
PRINT00.TXT 2290
CALLBACK.TXT 1
STAMP.TXT 0
WRITE00.TXT 2290
PFF.H 26033
PFF.C 24916
DISKIO.C 1738
README.TXT 1522
DISKIO.H 1146
INTEGER.H 833
DATALOG.TXT 1070
READ.TXT 86
DATAS/
TEST.TXT 17
done!
*「ReadWrite.pde」の実行結果
Fileオブジェクトを使ってファイルを読み書きするデモ。
Initializing SD card...initialization done. Writing to test.txt...done. test.txt: testing 1, 2, 3.*SdFat for Maple/libmaple ダウンロード 下記「動作環境と動作確認」で書いた「Ethernet」ライブラリも必要です。 v02: 2012/03 sdfat-maple-vld-v02-20120325.zip v02-beta3: 2012/03 Arduino1.0のSDクラスを導入 v02: 2012/03 未公開 Arduino1.0のSDクラスを導入する前の状態。 examplesの動作確認OK。 * 動作環境と動作確認 動作可能環境:MapleIDE/(libmaple): v0.0.11, v0.0.12 動作可能マイコンボード: Olimexino-STM32, Maple Rev5 等の Maple family基板、 STM32VLDiscovery, STBee(mini)等の基板。(対応した動作環境が必要) 実際に動作を確認したボード: Olimexino-STM32ボード 必要ライブラリ: ポーティングの都合上、ここの「Ethernetライブラリ」も必要です。(注2) (Arduino1.0と互換タイプのMaple用Ethernetライブラリ) *インストール zipファイルを解凍して出てきた「SdFat」フォルダを、 MapleIDEをインストールしたファルダの「libraries」フォルダにコピーします。 上のEthenetライブラリも同様にコピーします。 その後、MapleIDEを再起動します。 「File」-「Example」-「SdFat」以下の20個以上のサンプル・デモが動作可能です。(上記参照) libmapleで使う時は、このページを参照。 *ライブラリの初期化設定 SdFatライブラリで使うSPIポートやチップセレクト・ピン等のデフォルト値を設定します。 libraries/SdFat/Sd2Card_config.h がデフォルトの設定ファイルです。 SPIを設定する: card.init()とした時: 引数なしでcard.ini()を実行すると「Sd2Card_config.h」内のデフォルト値が使われます。 ライブラリはSDカード制御用に内部でHardwareSPI型の「SD_SPI(n)」オブジェクトを定義します。 デフォルトは「n=2」(SPI2)です。(= SD_SPI_NUMBER) SDカードIFのチップセレクト用のピン番号を「SD_CHIP_SELECT_PIN」で指定します。 SPIのクロックスピードはプログラム上で「SPI_HALF_SPEED」、「SPI_FULL_SPEED」で 指定可能ですが、これに対応するクロック速度を「SPI_LOW_CLOCK」、「SPI_HIGH_CLOCK」で 定義します。無指定なら(card.init()の時)、SPI_FULL_SPEEDが使われます。 実行時に指定する: 実行時にデフォルト値を上書きできます。 card.init(SPI_HALF_SPEED)とすれば、低速クロックで初期化できます。 card.init(SPI_HALF_SPEED, 10)とすれば、ピン番号10のI/Oピンをチップセレクト・ピンとします。 低速クロックでSDカードを初期化した後、高速クロックに変更したいときは、 以下のように、直接「SD_SPI」オブジェクトを操作します。
card.init(SPI_HALF_SPEED, 10); /* 低速クロックで初期化 */ ... ... SD_SPI.begin(SPI_HIGH_CLOCK, MSBFIRST, 0); /* 高速クロックに変更 */ちなみに、初期化時に低速クロックにするのは、ブレッドボードを使うための配慮なので、(注4) それ以外の場合は、最初から高速クロックで問題ないと思われます。 Serial.print() / Serial.begin()の設定: Mapleでは「Serial」オブジェクトは定義されていないので、 「Serial1」、「SerialUSB」などに変更する必要があります。 デモ内の「Serial」記述を変更するのも大変なので、 「Sd2Card_config.h」内で"やっつけ"ています。 使用するマイコンボードに応じて以下の様に、自動的に「Serial」を置換します。
#define Serial SerialUSB /* Use USB CDC port */これに伴って「Serial.begin()」で指定するボーレート指定を、 「BPS_115200」の様に変更してあります。 *ポーティングメモ FatStructs.h: volumeLabel[11]、とfilesystemType[8]の型は「unint8_t」だけど Arduino1.0と同じ「char」の方がいいのか? (注1)当然のこととして、壊しても惜しくないSDカードで実験したほうが良いです。 (注2)本当に必要なファイルは「Printx.h」,「Stream.h」,「Stream.cpp」。 (注3)一つのファイル、フォルダで許される最大容量、又は、最大ファイル数等々に達するまでで、 SDカードの全容量を使うわけではないと思われます。 が、未調査というか未理解状態なので、そのうち調べたいと思います。 データロガー等で、ひたすら書き続ける場合、上記制限に達した事をエラーで検出して 次のファイルや、フォルダに移行していく風。 (注4)抵抗を使ったレベルコンバータを使った場合も低速にする必要がある。 参考リンク: 検索キー: discovery, ディスカバリ、stm32, vld, value, line,VLDiscovery, stm32vld バリュー、ライン, libmaple, Maple, MapleIDE
雑多なメモ 2012/3
* 組み込み用 Pawn言語 以下のかたのページによると、 陰気な男でいいですか http://www.asahi-net.or.jp/~qx5k-iskw/darkside/ 「Pawn」というC言語ライクの言語を使ったARMマイコン付書籍が 出るみたい。 Pawnの本家、 http://www.compuphase.com/pawn/pawn.htm 現時点で日本語の情報がほとんど無いので、上の書籍がバイブル的存在になる 可能性も。 言語仕様をチラっと見た限り、「型宣言が不要なC言語」の様な感じで おもしろそう。 仮想マシン方式らしい。 書籍の付録マイコンがFlash128kバイト、SRAM64kバイトのCortex-M3なので eLuaよりも処理系は小さいと思われる。 最小限のFlash/SRAM使用量とかは未調査。
2012年02月26日
Musicメモ 2012/02
The One That Got Away - Katy Perry (Cover by Tiffany Alvord & Chester See) http://www.youtube.com/watch?v=K0-ucWKiTps&feature=related 2012/02/26 再生回数4,578,886回 Skyscraper - Demi Lovato (Boyce Avenue feat. Megan Nicole acoustic cover) on iTunes http://www.youtube.com/watch?v=JQ3r-rXUABI&feature=related 2012/02/26 再生回数7,024,982 オリジナルの方がスゴイ。 大丈夫かと思ってしまうほど、魂(たましい)入ってる。 こういう歌い方は、なかなかない。 Demi Lovato - Skyscraper 2012/03/03 再生回数46,291,018 http://www.youtube.com/watch?v=r_8ydghbGSg&ob=av2e 参考ページ: ●デミ・ロヴァート Skyscraper 歌詞和訳 http://ameblo.jp/cai-narita/entry-11031119757.html Taylor Swift - Last Kiss (Boyce Avenue feat. Megan & Liz acoustic cover) on iTunes http://www.youtube.com/watch?v=kALSETZ9ngk&feature=relmfu 2012/02/26 再生回数6,206,859 Taylor Swift - Last Kiss - Lyrics HQ http://www.youtube.com/watch?v=n-OQvwYd740 U2 - With Or Without You (Boyce Avenue feat. Kina Grannis acoustic cover) on iTunes http://www.youtube.com/watch?v=cGqN9PpW5Ic&feature=relmfu 2012/02/26 再生回数5,446,444 Me Singing "I Won't Give Up" by Jason Mraz (Christina Grimmie Cover) http://www.youtube.com/watch?v=zcL8zrkBpVQ 2012/02/26 再生回数2,021,467 http://www.youtube.com/watch?v=TdN5GyTl8K0 Jason Mraz - I Won't Give Up (Lyric Video) 2012/02/26 再生回数9,471,146 オフィシャルの割に音が悪い。orz Bruno Mars - Just The Way You Are [Official Video] http://www.youtube.com/watch?v=LjhCEhWiKXk 2012/02/26 再生回数226,124,074 Glee - Don't stop believin http://www.youtube.com/watch?NR=1&feature=endscreen&v=5WxPyUzWSPA 2012/02/26 再生回数7,331,230 Glee - Glee - il flashmob (注1) http://www.youtube.com/watch?v=NhbK2bMTRbI 2012/02/26 再生回数7,691,437 背景の建造物の「げーじつ性」がスゴイ件。 Flash mob Waka Waka (This Time For Africa) - Shakira in Piazza Duomo a Milano 19/06/2010 2012/02/26 再生回数1,984,398 "Don't Stop Believing" - Glee - cover 2012/02/26 再生回数29,913,734 Lil Wayne - How To Love - Christina Grimmie & Tyler Ward (Rock Cover) http://www.youtube.com/watch?feature=endscreen&NR=1&v=MMy48cpTjc4 2012/02/26 再生回数5,081,081 Adele - Someone like you (OFFICIAL VIDEO LYRICS) HD Live from Brit Awards 2011 http://www.youtube.com/watch?v=jCya1yiFFP4 Adele - Someone Like You (Live in Her Home) http://www.youtube.com/watch?NR=1&feature=endscreen&v=NAc83CF8Ejk Adele - Rolling In The Deep http://www.youtube.com/watch?v=rYEDA3JcQqw&ob=av2e Adele - Rolling In The Deep (Live at the BRIT Awards 2012) http://www.youtube.com/watch?v=mPF5SClEoU8&feature=branded Adele - Set Fire To The Rain (Live at The Royal Albert Hall) http://www.youtube.com/watch?v=Ri7-vnrJD3k Adele - Make You Feel My Love (Live on Letterman) http://www.youtube.com/watch?feature=endscreen&NR=1&v=LLoyNxjhTzc Adele - Hometown Glory http://www.youtube.com/watch?v=nL49yZNE4yk 以下のユニットについては前回を参照。 ABOVE ALL THAT IS RANDOM 5!!! - Christina & Sarah アップされて1ヶ月で約100万回再生だから、相当な人気かも。 2分8秒からの振り付けがいいね。 http://www.youtube.com/watch?v=izne8XcaBBg&feature=related 2012/03/9 再生回数 969,480 Above All That Is Random 4 - Christina & Sarah 2分20秒あたりの曲調がいいね。 内容はともかく :D http://www.youtube.com/watch?v=2mCqO52__a4 Timbaland - Apologize (feat. One Republic) 2012/03/9 再生回数 100,084,226 http://www.youtube.com/watch?v=ePyRrb2-fzs Duffy - Mercy こういう"マンガチック"な声質は貴重かも。60年代テイストの曲調。 2012/03/9 再生回数 39,044,172 http://www.youtube.com/watch?v=y7ZEVA5dy-Y The Calling - Wherever You Will Go それなりに有名な曲らしい。 確かに良い感じ。 2012/03/9 再生回数 15,488,978 http://www.youtube.com/watch?v=iAP9AF6DCu4 Alexandra Stan - Mr Saxobeat (Official Video) 2012/03/9 再生回数 126,458,740 http://www.youtube.com/watch?v=lAhHNCfA7NI&ob=av2e LMFAO - Party Rock Anthem ft. Lauren Bennett, GoonRock 2012/02/26 再生回数384,957,438 Jeff Dunham (注1)Flashmob: 人の集まる場所で突然踊り始めて、終わったら何事もなかったように解散するという パフォーマンスらしい。
2012年02月18日
Maple/libmapleでEthernetライブラリを使う。 Wiznet w5100/w5200
以下のページの探査結果に基づいています。 Wiz820io(W5200)のドライバ (バグ?対応) *はじまり WizNetのEthernet chip、w5100とw5200をMapleIDE/libmaple(STM32マイコン)で使える様に Arduino 0023のEthernetライブラリをポーティングしてみました。 Arduino Ethernetライブラリと"原則"完全互換です。(注1) 対応するイーサーネット基板: Wiz812mj(w5100) Wiz820io(w5200) Arduino Ethernet シールド(w5100)(注2) 基板に対応すると言うよりw5100/w5200 Chipに対応すると言った方が正確かも。 対応するマイコン基板: MapleIDE/libmapleでサポートしているMaple family基板, ここで対応されている以下の基板、 STM32VLDiscovery, STBee, STBee Mini *ダウンロード EthernetClassicMaple_v01_201202.zip 最新のソースコード・リポジトリはここ。 *MapleIDEにインストール zipファイルを解凍して出てきた「EthernetClassic」フォルダを MapleIDEをインストールしたフォルダの「libraries」フォルダ下にコピーします。 (その後、MapleIDEを再起動してください) *セットアップ デフォルト状態: Ethernet chip は「w5100」、 シリアルSPIポートは「2」(SPI2)、 SPI clockは、6MHz(STM32VLDiscoveryの時)、(注3) になっています。 使用するEthernet chip を変更するには、 ここを参照してください。 その他は、 「libraries/EternetClassic/utiliy/w5100_config.h」をエディタで開いて、//#define USE_NO_DELAYED_ACK /* if you need, activate this line */ /* Define SPI port and chip select pin */ #define DEF_SPI_PORT HardwareSPI SPI(2) #define ETHERNET_SS_PIN BOARD_SPI2_NSS_PIN #ifdef BOARD_STM32VLD # define ETHERNET_SPI_FREQ SPI_6MHZ #else # define ETHERNET_SPI_FREQ SPI_4_5MHZ #endifの定義を必要に応じて変更します。 DEF_SPI_PORT:使用するシリアルポートを指定します。 ETHERNET_SS_PIN:w5100/w5200のチップセレクトに使うピン番号を指定します。 ETERNET_SPI_FREQ:SPIクロック周波数を指定します。 (指定可能な周波数は \hardware\leaflabs\cores\maple\HardwareSPI.h 参照) USE_NO_DELAYED_ACKについては、 ここを参照してください。 必要なら有効化します。 ハードウエア接続:(ライブラリ・デフォルト)
| STM32VLDiscovery ピン割り付け | |||||||||
| STM32VLDiscovery pin name | PB15 (SPI2_MOSI) |
PB14 (SPI2_MISO) |
PB13 (SPI2_SCK) |
PB12 (SPI2_NSS) |
- | RST | GND | 3V3 | - |
| Wiz812MJ(w5100) pin name | MOSI(in) | MISO(out) | SCLK | /SCS | /INT | /RESET | GND | 3.3V | - |
| Wiz820io(w5200) pin name | MOSI(in) | MISO(out) | SCLK | nSS | nINT | nRESET | GND | VIN3.3 | PWDN |
Wiz820io(w5200):
* PWDN(パワーダウン)端子は基板上で無効化(プルダウン)されているので、
未使用ならオープンのままでよい。(ライブラリでは未使用)
* /INT、nINTも未使用ならオープンのままでよい。(ライブラリでは未使用)
* 電源電圧はw5100/w5200共に「3.0V〜3.6V」の範囲で使用可能。詳細はデータシート参照。
* 信号線は5Vトレラント。
*MapleIDEからの使い方
メニューから「File」-「Examples」-「EthernetClassic」-「WebServer」を
選択してコンパイル・アップロードすれば「WebServer」デモが動きます。
Arduinoのデモと同じものです。
*libmapleからの使い方
1,MapleIDEの時と同様に libmapleの「libraries」フォルダ以下にzipファイルを解凍します。
2,libmapleのトップフォルダのMakefileを以下のように編集します。
82行目あたりに「# Experimental libraries:」というコメントがあるので、
そこに以下のように追記します。(黄色い部分)
# Experimental libraries:
LIBMAPLE_MODULES += $(SRCROOT)/libraries/FreeRTOS
#LIBMAPLE_MODULES += $(SRCROOT)/libraries/glcdst7565web
#LIBMAPLE_MODULES += $(SRCROOT)/libraries/Time
LIBMAPLE_MODULES += $(SRCROOT)/libraries/EthernetClassic
あとは、「EthernetClassic」フォルダ-「examples-libmaple」フォルダの各「main.cpp」を
トップフォルダにコピーすれば、コンパイル可能になります。
main.cppコピー直後に、main.cppファイルをダミーで編集保存するか、
touchコマンドでファイルの日付を更新する必要があります。(makeでコンパイルさせるため)
*動作確認環境と確認内容
現在、「STM32VLDiscovery」ボード + Wiz812mj(w5100) を使って動作を確認しています。
(ライブラリのデフォルト状態)
それ以外のマイコンボードは未確認ですが、SPI制御だけで動くので、
他のボードもそのままで動くと思われます。
以下は、標準添付のExampleを動かした結果です。
| Examples | 動作 | メモ |
| BarometdicPressureWebServer | - | 追加ハードウエアが必要 |
| ChatServer | (ok) | クライアントが必要 |
| PachubeClient | - | 登録が必要 |
| PachubeClientString | -*- | String型多用なので、コンパイル不可 |
| TelnetClient | (ok) | サーバ側を作る必要がある |
| UDPSendReceiveString | ok | 添付のudpsendrecv.pyで動作確認可能 |
| UdpNtpClient | ok | ok |
| WebClient | ok | ok |
| WebServer | ok | ok |
| Examples | 動作 | メモ |
| DhcpAddressPrinter | ok | ok |
| DhcpChatServer | (ok) | クライアントが必要 |
| DnsWebClient | ok | ok |
| TwitterClient | -*- | String型多用なので、コンパイル不可 |
LIBMAPLE_MODULES += $(SRCROOT)/libraries/Ethernet
を追記します。(或いは行頭の「#」コメントをはずして、行を有効にします)
(注1)Arduinoオリジナルに添付されている主要なデモが動作するという意味で。
以前ポーティングしたGLCDライブラリも同様に"原則"完全互換です。
MapleはString型をサポートしないので、その部分は除きます。
(注2)Maple基板に直接差すことはできないと思われます。
(注3)w5100のSPIクロック上限は4MHzらしいものの、3MHz以下だとうまく動作しなかったので、
現在は6MHzで使用中。
参考リンク:
C++:ヘッダファイルの「循環参照エラー解決」に大変役立ちました。m(__)m
gcc error: ISO C++ forbids declaration of with no type
ヘッダーファイルは慎重に扱わないと危険です
http://marupeke296.com/CPP_HederFileALaCarte.html
hg と git のコマンド相違点
http://misc.e-hdk.com/hg-and-git
操作体系から見る、GitとMercurialの8つの違い
http://www.anlyznews.com/2010/12/gitmercurial8.html
検索キー:
discovery, ディスカバリ、stm32, vld, value, line,VLDiscovery, stm32vld
バリュー、ライン, libmaple, maple, mapleIDE, IDE
in a heartbeat 直ぐに、直ちに
join forces with〜 〜と力を合わせる
in the first place そもそも、初めの段階で
a proof of concept 概念・コンセプトの証明、
along the lines of〜 〜に沿って、〜に従って
go further〜 更に〜を推し進める、更に踏み込む
avrdude-GUIに「Arduino簡単HEX書き込みモード」と言うのを追加してみました。
(外見はちょっと違うけど。かなりか。) (^^;
上は、Optiboot化したDuemilanoveにHEXファイルを書き込むときの設定。
リストからArduinoボードを選ぶだけでHEXファイルを書き込み可能です。
簡単、簡単 (^^)/


ArduinoIDEを起動して、上図の様に「COMポート番号」(Port)を確認しておきます。
この場合、「COM6」となります。
(普段Arduinoで使っているCOMポートなので、人によって番号が変わります)
Arduino IDEは念のため終了しておきます。(COMが競合しないように)
guidudeを起動する:
上で調べた「COM6」を下図の@の「Port」のところに設定、
(@のすぐ右の部分をクリックすれば選択できます)
Aをクリックして「led_blink_atmega328p_16MHz.hex」を選択します。
「Arduino 簡単 HEX 書込みモード」を設定する
初回起動時は設定済みです。
無改造のArduino Duemilanove (atmega328p) 16MHz/5V、及び互換ボードなら次へ進んでください。
Optiboot化改造がしてある場合、「Arduino 簡単 HEX 書込みモード」のリストから、
適切な物を選択してください。
今の時点では1種類しかないです。(^^;
AVRライタなしでArduino DuemilanoveにHEXファイルを書く:
これで準備完了です。
下図の「書込み」ボタンで書き込みを開始します。
書き込みが終われば自動でリセットがかかります。
Arduino Duemilanoveボード上のLEDがドキドキすれば成功です。(^^)/
TeraTermなどのターミナルツールで「COM6」に38400bps, s1/np で接続すると以下の様に
ゆっくり文字列が表示されます。
1〜9の数字を押せばLEDの点滅速度が変化します。
これは、実行過程の出力画面
上図は見やすいように加工してあります。実際はパス情報が付加されるのでもっと見にくいです。(^^;
Auduino開発者用メーリングリスト
今回初めて発見したのだった。
いままでフォーラムしか知らなかったけど、
このメーリングリストは必読かも。(必要な人は)
これをブレッドボードに載せたタイプがある。
AVR-T32U4。 これもレオナルドタイプ。
* STM32F4のNetduino



