Repo

kjana00@gmail.com

older <-

2009-06-20 01:47:52

そういえば朝から部屋の片隅に積み上げられてた残りものの資材とパーティションの片付けでくたびれたっていうのを書き忘れたなと思いつつ寝たのでした。それで今朝は晴れで朝ごはんはパンとゆでたまごとサラダ。ソーセージが無くなるのわかってて買うのを忘れたっていう……忘れものばっかりだった昨日。

昨日最後に作った部品のテストで結構悩む。内部に状態を持つ作りにすると、関数的な作りになってる部品と違って時間軸を単なる入力の区切りと考えられなくなるから……正常動作の入力セットを適当な時間、でテストしたら中のフラグが変わるから、そのまま続けて今度はこの条件で引っ掛かるはずの入力セットってやっても覚えてるフラグの方で引っ掛かっちゃう。手で切り替えるのは面倒だし。……でもちょっと思い付かないし、それでいつまでも悩んでるわけにはいかないねっていうことで引っ掛かる入力を個別に作っておいてコメントアウトしておくという原始的な方法に落ち着く。うーん、やっぱり関数呼び出しでシミュレーション動かす方法をちゃんと使うべきだったな……

とりあえず動いたは動いたんで続き。部品が揃った長周期タスクを組み立ててテストして、スリープ状態用のブロックも作って、短周期のと長周期のとスリープ状態のと組み合わせて全体を作って、と。本当はトリガーで動くサブシステムにした方がいいところもあるかなって思いつつも全部 enable / disable 切り替えなサブシステムで作ってみたり。triggered なのだとちょっと制約が強めみたいだったんで。また引っ掛かると嫌だし。同一の入力をバスでまとめてサブシステムに分配するのは良くても、その出力をバスでまとめた上でスイッチで切り替えようとするとサンプル時間が違うからだめだよと言われてしまってまたスイッチの格子を作ったりしつつ。

それで何となく動いたけど微妙に変かなというのでしばらくデバッグ。実パラメータのままだとスリープに入ってから起きるまでシミュレーション時間で四時間いるっていうのがあんまりにも長過ぎるから 1 秒にして試してみたらやっぱり変だった。間隔が 1 秒にならない……っていうのはパラメータの間違いとして。何でこんな変な風にふらついてるんだろう。単調に動くはずなんだけど。それで調べてみてたら何か一度立ったらそれっきりのはずのフラグが立ったり座ったりしてる。や、座るはともかく。1 と 0 を行ったりきたり。……ああ、立つ時の条件をそのまま出力にしたら、当然立った次のステップでは落ちるわな。簡単に修正するにはフラグ自身との OR にする、と。……ん、納得の行く動きになった。

そこはかとなく、このスリープ中の一時起床って何ステップか起き続ける前提のような気がすると思いつつもとりあえず追求しないで終わっておく。それでちょっと前に出来上がりっていって送り付けておいたブロックの修正へ。少なくとも表に出す必要がないと思ってた信号を一つ出力しなきゃいけない。それに今日作ったやつみたいなスリープ対応も入れるだけ入れた方がいいような気はするっていうことで。それでまずは出力を一つ増やすっていう簡単そうな作業に手を付けてはまってみる。

サブシステムから信号引っ張り出して、そうすると出力ポート増えるから手当てしてっていう。せっかくだから個別のテストも直しておきたいし。そうやってごちゃごちゃいじって動かしてみると何か出力が変……短周期タスクの今足した出力、全然変化してないね。長周期タスクの出力はちゃんと動いてるんだけど。何でだろうとしばらく悩んだけど結構すぐに原因判明。短周期タスクが長周期タスクの計算結果を見ないで自分の計算結果だけを使ってるからだ。短周期タスクでこの値が計算されるのって初期化の時だけだから当然、初期値がそのまま引き継がれるだけになる。長周期タスクは毎回別の入力から計算してるからいいけど、短周期タスクは自分が計算しない時には長周期タスクの計算結果をスルー出力しなきゃいけない。

……ということで入力も足しててんやわんやな感じで修正して、単体テストも直してやってとまた一苦労。結果。ちゃんと納得の行く出力が得られるようになりました……で、予定では早めに帰るつもりだったのにと思いつつだいぶ遅くなって帰る。

増量してくれなくていいのにと思いつつブリーを食べながら晩ごはんの準備。で、晩ごはんはとり汁のそば。シンプルにおいしいけど 140g のブリーがいかにも余分でお腹一杯。後はWWW 見てたら妙に眠くなって一休みとかな感じ。うーん、何か眠い……

older <-

goto

hint can be:

Tags

old

2007-05 -- 2006-12

ゲーム関係の古い記録

before 2005-12