Round robin Scheduler

Dependencies:   mbed

rtos.s

Committer:
timexton
Date:
2010-09-09
Revision:
0:cf2d4c337b6f

File content as of revision 0:cf2d4c337b6f:

    AREA    |.text|, CODE, READONLY

    
;-------------------------------------------------------------------
itask       PROC
            EXPORT  itask
            stmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}
            
            mov      r2,sp  ;save this stack pointer
            mov      sp,r0  ;load new task stack pointer
            mov      lr,r1  ;load link address (start of task)
    
            stmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}
            mov      r0,r13  ;return new stack pointer

            mov      sp,r2  ;restore real stack pointer                                          
    
            ldmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}

            bx  lr
            ENDP
            align
            
;-------------------------------------------------------------    
sleep_task  PROC
            EXPORT  sleep_task ;r0=savesp r1=*tasksp
            stmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}
    
            str      sp,[r1]      ;save this stack pointer
            mov      sp,r0        ;load new task stack pointer
    
            ldmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}
            
            bx  lr
            ENDP       
            align
            
;-------------------------------------------------------------    
run_task    PROC
            EXPORT  run_task    ;r0=*savesp r1=newsp
            
            stmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}
    
            str      sp,[r0]      ;save this stack pointer
            mov      sp,r1        ;load new task stack pointer
    
            ldmfd sp!,{r1,r2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,lr}

            bx  lr
            ENDP
            align      
                 
            END