ひとつ前へ 記述:mad@mail.wind.ne.jp

8051RTM

数理設計研究所 玉置晴朗
2007/04/16

更新履歴


仕様


性能


タスクの条件


RTMコマンド

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=set
fabort 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 割り込みからのタイマサービス

RTMコマンドの動作例と解説

TASKの生成と起動

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