MCU
小さなRTOSみたいなものを動かす/1 システム初期化
小さなRTOSみたいなものを動かす/2 ディスパッチ処理
小さなRTOSみたいなものを動かす/3 タイマー割り込み
小さなRTOSみたいなものを動かす/4 システムコール(1)
小さなRTOSみたいなものを動かす/5 システムコール(2)
小さなRTOSみたいなものを動かす/6 システムコール(3)
小さなRTOSみたいなものを動かす/7 システムコール(4)
小さなRTOSみたいなものを動かす/8 インクルード・ファイル

小さなRTOSみたいなものを動かす/4 システムコール(1)


ここから、システムコールです。

00282 ;=====================================================================
00283 ;
00284 ; システムコール群
00285 ;
00286 ;=====================================================================
00287         ;
00288         ;
00289         ;-------------------------------------------------------------
00290         ; タスクの登録、TCB初期化
00291         ;
00292         ; INP: er0=タスク情報テーブルの先頭アドレス
00293         ; OUT: なし
00294         ;      ER0=保護されず
00295         ;-------------------------------------------------------------
00296         .global _reg_tsk
00297 _reg_tsk:
00298         push.l  er6                     ;
00299         push.l  er5                     ;
00300         push.l  er4                     ;
00301         push.l  er3                     ;
00302         push.l  er2                     ;
00303         mov.l   @er0,er2                ; タスク数
00304         beq     reg_ts9                 ; タスク数=0
00305         adds    #4,er0                  ;
00306         mov.b   r2l,@max_tsk_num        ;
00307         mov.l   #_TCB_TOP,er6           ; TCB先頭アドレス
00308 reg_ts1:
00309         mov.b   #COND_SLEEP,r2h         ; SLEEP状態(wup_tsk()待ち)
00310         mov.b   r2h,@er6                ;
00311         adds    #1,er6                  ;
00312         ;
00313         mov.b   #0xff,r2h               ; SEMAPHO
00314         mov.b   r2h,@er6                ;
00315         adds    #1,er6                  ;
00316         ;
00317         sub.w   e2,e2                   ; WakeUpカウンタ
00318         mov.w   e2,@er6                 ;
00319         adds    #2,er6                  ;
00320         ;
00321         mov.l   @er0,er5                ; TASKスタートアドレス
00322         adds    #4,er0                  ;
00323         mov.l   @er0,er4                ; STACK領域の先頭アドレス
00324         adds    #4,er0                  ;
00325         mov.l   @er0,er3                ; STACKサイズ
00326         adds    #4,er0                  ;
00327         ;
00328         add.l   er3,er4                 ; ER4=スタックサイズ + STACK領域先頭アドレス
00329         mov.l   er5,@(-4,er4)           ; スタックに実行アドレスを積む
00330         sub.l   #CTX_SIZ,er4            ; SPの補正
00331         mov.l   er4,@er6                ; TCBのスタックポインタ値
00332         adds    #4,er6                  ;
00333         ;
00334         sub.l   er5,er5                 ; ER5<-0
00335         mov.l   er5,@er6                ; TCBのタイマー値
00336         adds    #4,er6                  ;
00337         ;
00338         dec.b   r2l                     ;
00339         bne     reg_ts1                 ; 次のTCB
00340 reg_ts9:
00341         pop.l   er2                     ;
00342         pop.l   er3                     ;
00343         pop.l   er4                     ;
00344         pop.l   er5                     ;
00345         pop.l   er6                     ;
00346         rts                             ;
00347         ;


00348         ;-------------------------------------------------------------
00349         ; セマフォの登録と初期化
00350         ;
00351         ; INP: er0=セマフォ情報テーブルの先頭アドレス
00352         ; OUT: なし
00353         ;-------------------------------------------------------------
00354         .global _reg_sem
00355 _reg_sem:
00356         push.l  er6                     ;
00357         push.l  er2                     ;
00358         mov.b   @er0,r2l                ; セマフォ数
00359         beq     reg_se9                 ; セマフォなし
00360         adds    #1,er0                  ;
00361         mov.b   r2l,@max_sem_num        ;
00362         mov.l   #_SEM_TOP,er6           ; セマフォテーブルの先頭
00363 reg_se1:
00364         mov.b   @er0,r2h                ; 資源数
00365         adds    #1,er0                  ;
00366         mov.b   r2h,@er6                ; セマフォ初期値
00367         adds    #1,er6                  ;
00368         mov.b   r2h,@er6                ; セマフォカウンタ値
00369         adds    #1,er6                  ;
00370         dec.b   r2l                     ;
00371         bne     reg_se1                 ;
00372 reg_se9:
00373         pop.l   er2                     ;
00374         pop.l   er6                     ;
00375         rts                             ;

小さなRTOSみたいなものを動かす/5

最終更新のRSS
Last-modified: 2010-03-26 (金) 17:55:48 3341日前
HTML convert time: 0.025 sec.