2017年5月19日金曜日

細々

 怒涛の更新ラッシュから一転、しばらく(といっても数日)、更新をサボっていました。その間、ジンバルとかSTTは休んでいましたが、F4で遊ぶのは続けていました。

 F4はペリフェラルの使い方がF1とほとんど同じなので、初めて使ったマイコンファミリとは思えないほど簡単に使えます。ファミリが違うというか、FPUが追加されて動作クロックが2倍ちょっとになったシリーズ品、みたいな印象。

 今回、久しぶりにSDカードを使いました。といってもSPIで初期化するところから作って、でも時間がないので本当に最低限しか実装していないわけですが。今のところ大容量(といっても10KiB前後)のデータを読み込みたいだけなので、FatFsはリードオンリー構成です。速度もそんなに必要ないので、シングルブロックリードしか作っていません。それでも、CubeでDMAの初期化を生成して、20MHzで流してるので今回の用途では十分ですが。いちいち初期化コードを書かなくても書いてくれるのは結構便利です。

 SDカードは結構待ち時間が多くて、今使ってるSDカードではCMD17からData Tokenまで280usくらいあります。人間からすると極めて短時間ですが、168MHzのマイコンだと50k命令くらい実行できます。この時間をポーリングで浪費するのはもったいない。でもFreeRTOSに処理を投げるとmax1msecかかるので処理が大幅に遅くなる、という問題をどうにかできないかな、と考えています。

 真っ先に思いつくのは、タイマをOne Shotにし、プリスケーラを168-1とかに設定しておき、例えば200マイクロ秒待ちたいなら、タイマを200に設定して開始、タスクはセマフォで止めておく。200マイクロ秒くらい経ったらISRが呼ばれて、セマフォをGiveする。みたいにすれば、だいたい数マイクロ秒の分解能で65msecくらいまでディレイできます。50msec以上待ちたいならOSのdelayで十分でしょうから、充分に使えるはずです。
 と、想像するのは簡単ですが、実際に動くのかどうか。
 いくつか問題が有ると思いますが、一番大きいのは同時に1個のタスクしか止められない、ということでしょうか。ディレイを行うためにmutexを使う。すごく本末転倒な感じ。
 1つのマイコンで作れる規模では、タイミングクリティカルなタスクはそれほど多くないはずで、幸いSTM32F405RGにはタイマが14個載っていますから、タイマをガンガン使っていく、というのでも良いのですが。


 頭の中がごちゃごちゃしてても、ブログに書こうとするとだいぶスッキリしてきます。テディベアデバッグってかなり有効だと思います。ほんとにテディベア買おうかな。でもぶるーとぅーすでくらっきんぐされたら怖いのでやめとこ。サメのぬいぐるみでも買おうか。良い歳した男がぬいぐるみを抱いて悩んでる姿というのもかなりアレなので、やはりラバーダックあたりがちょうど良いのかもしれません。あとこれからの時期ぬいぐるみじゃ暑苦しいでしょうし。あ、ALMDSの抱きまくらとかどうかな?戦車砲の抱きまくらが有るんだからALMDSの抱きまくらが有っても良さそうです。大きさもちょうどいいでしょうし、機雷が敷設されてる海域に迷い込んでも良いひらめきを与えてくれるかもしれませんよっ!あれ、一周して戻ってきちゃった。


 明日は朝が早いので、今日中に準備しておかないと。とりあえずデジカメの充電と、SDカードの準備。あと持っていく荷物の確認。今回はいつにもまして荷物が多いので辛そうです。駅からの2kmくらいはダンボール抱えて歩くことになりそうです。ディスカバリーかナショジオでそういう映像を見たことがあります。たしかナイトストーカーズの入隊試験だったと思いますが。自家用MH-6とかほしいなぁ。それかトリノホシのモーターグライダー。

0 件のコメント:

コメントを投稿