| ひとつ前へ 記述:mad@mail.wind.ne.jp
8051RTM 数理設計研究所 玉置晴朗 |
Group コマンド パラメータ 動作 TASK fgen a = #(fgen + taskno*16)
Aレジスタの下位4ビットがコマンド
タスク番号は上位4ビットjob1:
mov a,#(fgen + 1*16)
call rtm とすればjoblopから実行が始まる
joblop:
mov a,#(ffset + 0*16)
call rtm ;flag0=setfabort a = #fabort 呼び出したタスク自身を終了させる Flag ffset a = #(ffset + FlagNo*16) FlagNoをONにし、待っていたタスクをRUN ffres a = #(ffres + FlagNo*16) FlagNoをOFF ffwait a = #(ffwait + FlagNo*16) FlagNoを待ってればRUNする Timer ftwait a = #ftwait
b =TickCountカウント数がはねるまで待つ finttim a = #finttim 割り込みからのタイマサービス
TASK2からTASK1を起動するならば
ラベル TASK2のコード ラベル TASK1のコード task2noDokoka: call task1_top → task1_top: mov a,#(fgen + tasknum1) call rtm RTM呼び出しはTASK2の中
ここで2TASKに分岐するTASK2の仕事 ← task1_lop TASK1の仕事 ★ ret がなくてもTASK2に戻る TASK2の仕事 TASK1の仕事 jmp task2_lop jmp task1_lop
TASK2は call task1_top を単純に呼び出したつもりなのだが
となる。
★この例で見てわかるとおり、TASK1が最後に自分自身をabortするようにしておけばTASK1は常にTASK2より優先して実行される関数のごときものとしても動かせる。
..end