2015/09/09

[smc]現状を知ろう

ふっと思ったのですよ。
「もしかして、なんか私の考え方が間違ってるんじゃ無かろうか?」と。

しかし、心配しても仕方ないので、あきらめて現在の状態を取得し、その状態によって条件を決める関数を作り、それを状態遷移のガードに使おう。


statemap.hに「getState」というマクロがあったので、printfで値を見てみた。

./checkstring 000
state : 40314c
state : 403134
state : 403134
The string "000" is acceptable

%xで表示させると、こんな感じ。
最初の0x40314cは、mapファイルではMap1_Startのアドレス、後はMap1_Zerosのアドレスだった。
つまり、今の状態がこれ、という変数を持ってるのでは無く、状態ごとのイベント関数群のポインタを持っているようだ。

たとえば、Map1_Startはこういう定義になっていた。

const struct AppClassState Map1_Start = {
    Map1_Start_EOS,
    Map1_Start_One,
    Map1_Start_Unknown,
    Map1_Start_Zero,
    Map1_Start_Default,
    0
};

なので、ここに独自関数を追加できるようになっていれば済むのだが・・・。


今日はここまで。

あと、前回のガードを追加すると、遷移条件を満たさなかったときにDefaultの遷移をするようだ。
定義していなくて実行時エラーになっていたから、たぶんそうだろう、というところだが。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。