start_mt.hファイル
TASK_0 EQU 1 ;実載タスクを1にする TASK_1 EQU 1 TASK_2 EQU 0 TASK_3 EQU 0 TASK_4 EQU 0 TASK_5 EQU 0 TASK_6 EQU 0 TASK_7 EQU 0これは、実装したタスクの値を、動作、休止に関係無く”1”にします。この後の RAMTOPの計算や、スタックの確保に使用します。
SYSTEM_TOP EQU 08000Hここから、システムが使用するためのエリアで、ここに各種バッファーを確保し ています。
STAK_START EQU 08100hここから、スタックエリアとして使用します。通常はメモリーエリアのアドレスの 最後から使いますが、今回はタスクごとに必要となるため、変則的な使用法と なってしまいました。
RAM_TOP EQU STAK_START+512*TASK_0+512*TASK_1+512*TASK_2 +512*TASK_3+512*TASK_4+512*TASK_5+512*TASK_6+512*TASK_7+256ここより、コンパイラーが静的変数を割り当てて行きます。実装しているタスク の数により、アドレスが変化します。 スタックの大きさを変える場合に、"MT_S TAK.H"の"STAK_EREA_0 DS 512"と合わせて変更する必要が有り、 一応ここでは、512Byt確保してあります。このままでたいていのプログラムは 問題なく動作するでしょうが、動的変数を多量に使用する時は、大きくして下さい。
RAM_TOP EQU STAK_START+512*TASK_0+512*TASK_1・・・・・・・・・・これを
RAM_TOP EQU STAK_START+1024*TASK_0+512*TASK_1・・・・・・・・・と同時に"MT_STAK.H"の
STAK_EREA_0 DS 512これを
STAK_EREA_0 DS 1024に変更します。
;************************************************************************ ;* * ;* マルチタスクOS * ;* * ;* start_mt.h Vr1.00 97/01/20 * ;* * ;************************************************************************ TASK_0 EQU 1 ;実載タスクを1にする TASK_1 EQU 1 TASK_2 EQU 0 TASK_3 EQU 0 TASK_4 EQU 0 TASK_5 EQU 0 TASK_6 EQU 0 TASK_7 EQU 0 ;***************************************************** SYSTEM_TOP EQU 08000H STAK_START EQU 08100h RAM_TOP EQU STAK_START+512*TASK_0+512*TASK_1+512*TASK_2+512*TASK_3+512*TASK_4+512*TASK_5+512*TASK_6+512*TASK_7+256 ;***************************************************** ORG 0000h DI LD SP,STAK_START_SYS CALL MT_INIT CALL __TASK_INIT JP TASK_START __st_loop__: DI nop JR __st_loop__ ORG 0050H CTC_VECTER DW TASK_CHANG DW DUMMY DW DUMMY DW DUMMY ORG 0066H JP 0000H ORG 00A0H DUMMY: EI RETI ORG 0100H