BaseUsbHostを更新したので、BaseUsbHost_examleのライブラリ更新のついでにプログラムを修正しました。
キャプチャーした画像をUSBに保存するだけのサンプルプログラムです。
キャプチャーしているスレッドの中でファイル保存しているので、
保存している時間が長くなってアイソクロナス転送の受信が止まって転送エラーが発生していました。
main.cpp
現在の設定ではITD内のフレームカウンタを4、ITDの最大キュー数を3にしているので12ms(4*3)以内にキャプチャースレッドの受信処理が間に合わないといけない。フレームカウンタは最大8個、キュー数をもっと増やせばいいかもしれないがメモリーを消費したくない。
今回の修正ではキャプチャーしているスレッドから画像データをrtosのmailで、
main()メインスレッド送るようにして、メインスレッドでファイルに保存するようにしてみました。
main.cpp
コンディションコードやパケットステータスコードを見てもエラーは発生していないようです。
ファイル処理をしてないのでスタックの使用量は大きく減りました。
FATFileSystemが呼ばれると1800バイト以上消費します。
もちろん、代わりにメインスレッドのスタックの消費量は増えますが、メインスレッドはスタックのサイズ制限はありません。
rtosのサンプルプログラムrtos_mail - main.cppとほぼ同じように使っています。
allocでメモリーブロックからの切り出しではデータの有無を確認しています。
(2013/1/26)
---
2013年1月26日土曜日
2013年1月16日水曜日
USBハブのSET_POWER
USBハブへSET_POWERをSET_FEATURE/CLEAR_FEATUREで送れば、
USBポートの電源管理ON/OFFが出来ると思っていたのは勘違いだったようだ。
セリアでUSB接続のLEDライトを購入してきてテストプログラムを書いたけど全然消灯しない。
エレコムの節電USBハブを調べていたら特別のコマンドを送っているらしいので専用のUSBハブらしい。
(2013/1/16)
---
2012年8月11日土曜日
アライメント付きmalloc
OHCIでED,TD(GTD),ITDを予め取得していたメモリープールからではなく、
ヒープ領域から取得する時にはアライメントされたアドレスが返って欲しい。
探していたら _mm_malloc _mm_free が見つかった。
mm_malloc.h
必要サイズ+アライメント調整分をmallocしてからアライメントしている。
ED,TDの場合は16+16, ITDの場合は32+32をmalloc。更にmallocの管理分の8バイトが必要。
正式には posix_memalign を使うのがよさそうだ。
---
ヒープ領域から取得する時にはアライメントされたアドレスが返って欲しい。
探していたら _mm_malloc _mm_free が見つかった。
mm_malloc.h
必要サイズ+アライメント調整分をmallocしてからアライメントしている。
ED,TDの場合は16+16, ITDの場合は32+32をmalloc。更にmallocの管理分の8バイトが必要。
正式には posix_memalign を使うのがよさそうだ。
---
登録:
投稿 (Atom)