Round robin Scheduler

Dependencies:   mbed

Revision:
0:cf2d4c337b6f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rtos.s	Thu Sep 09 14:09:14 2010 +0000
@@ -0,0 +1,53 @@
+    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
\ No newline at end of file