[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.1 初期化ルーチン init_fanfsm
初期化ルーチン 6.2 有限状態機械ルーチン fanfsm
有限状態機械ルーチン 6.3 状態獲得ルーチン get_fanstate
状態獲得ルーチン
Windows の MS-DOSプロンプトから実行ファイル`Sttc.exe'を以下のように実行 します。引数で指定した `action.inc' はユーザーが自由に定義したアクション用 のサブルーチンの外部参照したファイルです。
> sttc -nfan -iaction.inc state.txt |
; action.inc ; ユーザー作成インクルードファイル ; FSM が使用するアクションの extrn 宣言を行う extrn stop_low extrn stop_mid extrn stop_high extrn start_low extrn start_mid extrn start_high |
-n
-i
state.txt
この場合、生成されるのは以下の2ファイルです。
`fanfsm.asm'
`fanfsm.inc'
; fanfsm.asm ------------------------------------------------- name n_fanfsm $include( action.inc ) public init_fanfsm public fanfsm public get_fanstate ds_fanfsm dseg saddr fanstate: ds 1 ; internal state cs_fanfsm cseg unitp stt_fan: ; EV_STOP, EV_LOW, EV_MID, EV_HIGH dw fan_on0at0, fan_on1at0, fan_on2at0, fan_on3at0 ; ST_STOP dw fan_on0at1, fan_on1at1, fan_on2at1, fan_on3at1 ; ST_LOW dw fan_on0at2, fan_on1at2, fan_on2at2, fan_on3at2 ; ST_MID dw fan_on0at3, fan_on1at3, fan_on2at3, fan_on3at3 ; ST_HIGH init_fanfsm: mov fanstate,#0 ret fanfsm: xch a,x mov a,fanstate xch a,x clr1 cy rolc a,1 mov b,a mov a,#8 ; #8 is offset of one-state. mulu x movw hl,ax mov a,l add a,b mov l,a mov a,h addc a,#0 mov h,a mov a,l mov x,a mov a,h addw ax,#stt_fan movw hl,ax mov a,[hl] mov x,a mov a,[hl+1] ; alternative subroutine call br ax get_fanstate: mov a,fanstate ret ; state : ST_STOP ; event : EV_STOP ; next state : fan_on0at0: ; not transit ; nop ret ; state : ST_STOP ; event : EV_LOW ; next state : ST_LOW fan_on1at0: mov a,#1 mov fanstate,a call !start_low ret ; state : ST_STOP ; event : EV_MID ; next state : ST_MID fan_on2at0: mov a,#2 mov fanstate,a call !start_mid ret ; state : ST_STOP ; event : EV_HIGH ; next state : ST_HIGH fan_on3at0: mov a,#3 mov fanstate,a call !start_high ret ; state : ST_LOW ; event : EV_STOP ; next state : ST_STOP fan_on0at1: mov a,#0 mov fanstate,a call !stop_low ret ; state : ST_LOW ; event : EV_LOW ; next state : fan_on1at1: ; not transit ; nop ret ; state : ST_LOW ; event : EV_MID ; next state : ST_MID fan_on2at1: mov a,#2 mov fanstate,a call !stop_low call !start_mid ret ; state : ST_LOW ; event : EV_HIGH ; next state : ST_HIGH fan_on3at1: mov a,#3 mov fanstate,a call !stop_low call !start_high ret ; state : ST_MID ; event : EV_STOP ; next state : ST_STOP fan_on0at2: mov a,#0 mov fanstate,a call !stop_mid ret ; state : ST_MID ; event : EV_LOW ; next state : ST_LOW fan_on1at2: mov a,#1 mov fanstate,a call !stop_mid call !start_low ret ; state : ST_MID ; event : EV_MID ; next state : fan_on2at2: ; not transit ; nop ret ; state : ST_MID ; event : EV_HIGH ; next state : ST_HIGH fan_on3at2: mov a,#3 mov fanstate,a call !stop_mid call !start_high ret ; state : ST_HIGH ; event : EV_STOP ; next state : ST_STOP fan_on0at3: mov a,#0 mov fanstate,a call !stop_high ret ; state : ST_HIGH ; event : EV_LOW ; next state : ST_LOW fan_on1at3: mov a,#1 mov fanstate,a call !stop_high call !start_low ret ; state : ST_HIGH ; event : EV_MID ; next state : ST_MID fan_on2at3: mov a,#2 mov fanstate,a call !stop_high call !start_mid ret ; state : ST_HIGH ; event : EV_HIGH ; next state : fan_on3at3: ; not transit ; nop ret end |
; fanfsm.inc --------------------------------------- extrn init_fanfsm extrn fanfsm extrn get_fanstate ; State Definition ST_STOP equ 0 ST_LOW equ 1 ST_MID equ 2 ST_HIGH equ 3 ; Event Definition EV_STOP equ 0 EV_LOW equ 1 EV_MID equ 2 EV_HIGH equ 3 |
以下に、生成したモジュールの公開サブルーチン3つを説明します。入出力は A レジスタを介して行います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
init_fanfsm
サブルーチン名
init_<名前>fsm
入力
出力
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fanfsm
サブルーチン名
<名前>fsm
入力
出力
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
get_fanstate
サブルーチン名
get_<名前>state
入力
出力
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |