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