|
About this site
Entries @ recently
May 11, 2012DMAとFIFOの難しい関係オートパイロットシステム TinyFeatherのなかなか再現しないバグが最近ようやく解消したので、どういう問題であったのかということを、自分への備忘録として残しておきたいと思います。なかなか気づきにくい種類のバグでしたが、理屈がわかってしまえばとても納得のいく問題でしたので、スッキリしたついので勢いで記事を書いています。 バグを抱えていたのはDSPのUARTの受信部分でした。DSPのUARTは受信用のハードウェアバッファ(FIFO)を持っており、FIFOに一定量のデータがたまるとDMAが動作するようになっています。本体の計算能力を奪わないためにも、また、FIFOの容量より大きなデータを受信できるようにするためにも、DMAを活用してFIFOの内容をメインメモリに転送することにしました。メインメモリ上にはリングバッファが形成されており、その他のポーリングルーチンなどから任意のタイミングで受信データを読み出せるようにしてあります。図示すると以下のようになっています。 正常に動作している場合は、流れるようにFIFOへの受信、FIFOからメインメモリ上リングバッファへのDMA転送、リングバッファからの読み出しが行えています。 しかし偶発的に計算負荷があがり、リングバッファからの読み出しをサボる事態が発生すると、リングバッファに空きがなくなります。さらにDMAもリングバッファ上の空きがないことを知って、休眠状態に入ってしまいます。ここからいかに回復するか、というところにバグが含まれていました。状態と解決方法を整理した図を以下に示します。 リングバッファに新たに空きができても、DMAが動作しないことが問題でした。上から4番目の図に青字でしめしたとおり、DMAを手動で起こしに行く必要があります。今回のDSP(TMS320C6745)の場合、DMAを起こすためには、FIFOを一旦空にして、DMAトリガーが再びかかるようにする必要がありました。 繰り返しになりますが、気づいてしまえばなんということはない問題です。FIFO、DMA、リングバッファと登場人物が多かったのが、解決への道のりを長くしていたのだと思います。 23:59 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/842 May 04, 2012Xperia Active ST17i を買ったよ!
[Computer]
最近のマイブームはAndroidのアプリを作ることなのですが、それのデバッグ用に端末を一台購入しました。Sony EricssonのXperia Active (ST17i) という国内未発売のモデルです。いわゆるSIMフリー端末というヤツですね。電波関係のことはこれ以上書くと(ウワナニヲスルヤメロ)なので、使用感を書いておこうと思います。
一番気に入っているのがその小ささです。別に一台所有しているG-shockスマホ(Casio IS11CA)ですと、画面の幅が結構あるので、掴んでいる側と反対側をタップするときに結構親指を伸ばさなければいけなかったり、あるいは別の手で入力、ということで少々大変でした。ST17iでは上記の写真にあるとおり、片手で余裕で操作できる大きさで、そこがとても気に入っています。 防水仕様なのもいいですね。手が多少ぬれていてもタップに対して反応してくれます。IS11CAよりも感度がよいと思いました。 カメラ用のシャッターボタンも気に入っています。普通のカメラと同じ構造で、半押しでフォーカス/AEロック、全押しでシャッターという2段階ボタンなので、構図をいじりやすいです。 使用感はこんなところでしょうか。後はどっちかというとこっちの方が本題だったりするのですが、自分メモとして何をやったか記録を残しておこうと思います。
バリバリ使っていく予定です。 22:29 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/841 April 13, 2012Super Sylphide 進捗状況(50) -- Sylphideデータ形式
[Computer]
前回の進捗記事ではオートパイロットシステムSuper SylphideおよびTinyFeatherの通信プロトコルについて紹介しましたが、今回はそのペイロードとして載ってくるデータの形式について記事を書きたいと思います。このデータ形式は32bytesの固定長で、通信のペイロードとして載ってくる以外に、SDカードに保存されるログの形式としても使っています。 データ形式の構造は単純で、先頭1byteによって残り31bytesにどのようなデータが含まれているかを示しています。種類ごとに『ページ』という呼び方をしており、現在のところ以下のようなものがあります。
ページが違えば、内部の形式はまた定義が異なるのですが、例えば、航法情報を保存しているNページは以下のような形式になっています。
その他ページの定義についてはコードを見ていただくのが一番だと思いますので、このデータ形式を処理するC++ソースとJavaソースを公開したいと思います。 なおデータ形式を32byutes固定長にしたのは、2の乗数にすると効果的にログ保存ができるためです。SDカードに記録する際にはセクタサイズ(512bytes)等を意識して書き込みをするとよいので、その長さを効率よく使えるよう32bytesとしました。また、通信プロトコルに32bytesの固定長モードがあるというのも、データ形式が32bytes固定長を効率よく転送できるようにするためです。 23:59 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/840 April 05, 2012石垣島
[Photo]
石垣島に先日行ってきました。あいにくのお天気だったのですが、持っていった自転車で様々な場所を巡ることができました。たまたま天気が良かった日の写真を一枚、貼ってみます。 海がとても綺麗でした。写真は石垣島北側で撮ったもので、島内を自転車でほぼ一周した際に撮りました。川平湾や○○ビーチといった名所もいいのですが、こういった何気ない風景も大好きです。 08:03 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/839 March 29, 2012Super Sylphide 進捗状況(49) -- Sylphide通信プロトコルご無沙汰しています。オートパイロットシステム Super Sylphide、およびその後継機のTiny Featherでは、無線を使って地上からモニタおよび指令を行うことができますが、独自規格ながら通信データのプロトコルを定めて運用してきました。このたび @henshiru 氏がメインで開発していたSuper Sylphide用地上モニタソフトのMaeve(メイヴ)がオープンソース化(MIT Licenseだと思う)されたことを受けて、このプロトコルの話を少し書こうと思います。 世の中には色々なプロトコルがあるので、既存の規格にあわせることも考えたのですが、なかなかお手ごろなシンプルなものがありません。僕が欲しいと思ったのは、流れてくるデータを意味単位に切り分けられること、簡単なエラー検出、この2つがあればいいと思いました。エラー訂正など、より機能を充実させるためにはTCP/IP方式で、このプロトコルをさらに上位プロトコルで包んであげればよいという思想も背景にあります。 結局、独自規格として以下に定めるSylphideプロトコル(固定長と可変長の2タイプ)を定めました。 0/32bytes 固定長プロトコル
N bytes 可変長プロトコル
転送効率やエラー検出能力について詳細に検証したことはないのですが、これまで使ってきて大きな問題は発生していません。ちよっとした補足としては、ヘッダ(0xF7, 0xEX)については、ペイロードを調べて出現確率が最も低い組み合わせを算出しました。 現在、このプロトコルのパーサとしてC++版、およびJava版があります。拡張は簡単にできるよう、それぞれstd::[i/o]streamとJava.io.Filter[Input/Output]Streamに準拠させてました。なおJava版は、ある目的のために最近作ったもので、近いうちに成果物をださればよいなと考えています。 ※次の進捗記事は、通信プロトコルのペイロードにあたる部分について書きました。 07:06 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/838 March 04, 2012野沢 スキー
[Timely]
先日、野沢温泉にスキーに行ってきました。まずまずの天気でした。 今季はもう打ち止めな気がします。結局、5回(白馬五竜、水上、ガーラ(石内丸山)、高畑、野沢)です。一番滑ったのは高畑かな。穴場的なとても滑りやすいスキー場でした。次点は水上。 23:48 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/837 February 25, 2012クワッドロータの電源回路先日、クワッドロータ XAircraft X650 をお披露目しましたが、そのフライトコントローラをぼちぼち作っています。その過程で、電源回路にちょっと気になることがあったので、記事を書きたいと思います。 X650をはじめ多くクワッドロータの電源回路は、おおむね以下のようになっています。 メインバッテリから4つのESC(スピコン)に分岐し、それぞれのESCがそれぞれのモータを回すことになります。一方、ESCはメインバッテリよりも低い電圧の電源を新たに生成し、フライトコントローラや受信機用を駆動しています。いわゆるBEC(Battery Eliminator Circuit)電源と呼ばれるものです。BEC電源はESCの数だけ、すなわち4つ生成されることになります。 ここで問題となるのが、その4つのBEC電源を並列接続してしまう可能性があることです。BEC電源は多くの場合、リニアレギュレータで生成されているのですが、リニアレギュレータを並列接続して使うことは推奨されていません。リニアレギュレータは個体差があり、生成される電圧が細かい部分で異なります。並列に接続すると電圧の高い側から異常に電流が供給されることになるためです。 一般的なラジコン飛行機やヘリは、ESCが1つしかなくBEC電源は1つ、あるいは複数のESCを使う場合は受信機用の電源を別途用意することが多く、BEC電源を並列にしてしまう可能性は低いようです。クワッドロータならではの問題点というこだと思います。 僕が計画中のフライトコントローラは、ESCから供給される4つのBEC電源のうちの1つでも十分電力に余裕がある予定です。並列接続しないように気をつけたいと思います。 22:53 fenrir が投稿 : 固定リンク
|
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/836 |
最近のはてブられ
スポンサード リンク
かてごり~別
Aero & Astro (93)
Computer (169) Embedded System (232) Info (14) Mountain (43) Movable Type (28) Movie & Animation (20) Music (9) Photo (42) Site Management (43) Timely (124) Tips (63) ついったー
ぶろぐぴーぷる
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||