Repo

kjana00@gmail.com

older <-

2011-11-30 01:25:22

今朝はくもり。朝ごはんはパンとサラダとソーセージ。気温は高めか。すぐ晴れてくるような具合に見えて、今日はそんなことなかったり。この時期、本当にくもりの日と明け方だけ雲が広がってる日の区別は難しい。

昨日思いついたことをとりあえず試す方向でシリアル入出力いじりの続き。デバッグ用に過ぎないからどうでもいいって言えばいいんだけど、他の用途で使う UART に応用するかもしれないから追求出来るところはしておこうよと。とりあえず出力バッファが空の時にはトランスミッタを蹴らないようにしてみたけど効果無し。まあ、これはこれであって悪くないから入れておくとして。

バッファが一杯になった場合のことを考えてみるに、単に出力が切れるだけで、タイミングが乱れたり化けたりはしないはずなんだな。実際、バッファ長を半分にしてみても切れるべき辺りで切れるだけで変なことにはならない。っていうか、かえって調子はいいぐらいかも。

化けるのはともかく、タイミングがずれるのは多分、蹴った時にバッファが空だったっていうことだよね。タイムスライス毎に一回しか蹴ってないから、そこで外すと間が開く。それじゃあっていうことで、トランスミッタが動いてなくてバッファにデータがあったら毎回蹴ってみることにしたら、これは飛ばされるデータが増えてるように見える。バッファが詰まってる間は UART TX の割り込みで 1byte ずつ連続で転送し続けてるけど、それとレースになっちゃうのかな、多分。

バッファにデータを詰める時に UART TX enable から十分間が開いててトランスミッタが暇そうで、連続した転送の最中でもなかったら……という風にしてみたけどまだ微妙。でも何か、ある程度動くと安定するようにも見える。連続した転送の間 GPIO に HI 出力するようにしてみたら、一回分のデータ転送で済むようになってから。そもそも最初の方で二回分転送してるような時間がかかってるのが謎と言えば謎なんだけど。

……で、それを見ててふと思う。化けるのって、タイムスライス切れで別機能に使うために UART 一旦切る時に 1byte 転送の途中なんじゃないかと。マルチプレクサ切り替える時かもしれないけど、とにかく 1byte の中間で切れたらそりゃ、化けるわな。本当だったらそんなタイミングで切り替わるわけはないんだけど、ちょっと手抜き実装してるせいで 1ms ぐらい割り込み外と割り込み中の 1s タスクの周期が違うのは知ってる。知ってたら直しておけばいいのにという話はある。

ということでそこを直してみた。サイクリックなカウンタがちゃんと設定した周期で周るようにしただけ。ついでにそういうカウンタが二つあったからインライン関数にしてしまって。……何かこれだけでだいぶ良くなった気がする。そもそも昨日の時点でバッファが溢れてなくてトランスミッタを蹴るタイミングが一回分の出力貯まった後だったら、タイムスライス切れ前にデータ転送が終わってバッファは空になるっていう作りだったんだよね。それで化けるから悩んだわけだけど……これで十分、かな?

後は作ってもらったブートローダの使用例を眺めながら、どういうことなんだかを真面目に考えてみたりでおしまい。ああ、ちゃんと読み飛ばしたりしてるし、割り込みベクタと割り込みハンドラと実処理関数の関係も資料通りだったか……で、帰ってのんびりして晩ごはんにホルモンと野菜の炒めもの。何だかやけに茶色いのは玉ねぎとたけのこと黄色のパプリカじゃしょうがないか。オイスターソース風味だし。それに豆板醤少々、甜麺醤少々、花椒少々。味付けホルモンの漬け汁だけだと足らなかったんで。そしたらちょっと濃過ぎたかもっていう。ホルモン 120g ぐらいが案外少ないっていうか、だいぶ縮むわね。

後は WWW 見たりゲームしたり。勝ったけど解析見たら確かにそっちのがいいねという手が多数見えるのがあれとか、とりあえず地味に普通に回れる街村を回れるようにしてみたとか。もうちょっといい武器が欲しいな……

older <-

goto

hint can be:

Tags

old

2007-05 -- 2006-12

ゲーム関係の古い記録

before 2005-12