📄 syscall.s
字号:
;**************************************************************************************************
; EDL RTOS Kernel
; (c) Copyright 2005, Wu Jun
; All Rights Reserved
; For further information, please visit http://www.enjoydigitallife.com
;
; Description: None
; History:
; Date Remarks
; 2005-01-06 Created initial version
; 2005-12-12 Finished the version 2.01
;**************************************************************************************************
IMPORT tsk_create
IMPORT tsk_delete
IMPORT tsk_suspend
IMPORT tsk_resume
IMPORT tsk_sleep
IMPORT tsk_resumeEx
IMPORT ev_send
IMPORT ev_wait
IMPORT tk_alloc
IMPORT tk_free
IMPORT hp_create
IMPORT hp_delete
IMPORT hp_alloc
IMPORT hp_free
IMPORT hp_realloc
IMPORT sem_create
IMPORT sem_delete
IMPORT sem_wait
IMPORT sem_release
IMPORT msg_send
IMPORT msg_wait
IMPORT mu_create
IMPORT mu_delete
IMPORT mu_lock
IMPORT mu_unlock
EXPORT switch_context
TSK_MODE_USR EQU 0x01
CODE32
AREA KERNEL_SYSTEM_CALLS, CODE,READONLY
;**************************************************************************************************
; Description: Switch context
; Parameters: r0 TCB *pre
; r1 TCB *next
; Notes: It is called by sys_schedule()
;**************************************************************************************************
switch_context
STMFD SP!, {R0-R12,LR} ; Save part of the context
str sp,[r0] ; Save old SP
ldr r2,[r1] ; Load new SP
mov sp, r2 ; Switch SP
ldr r2,=next
str r2,[r0, #+4] ; Save old IP
ldr pc,[r1, #+4] ; Load new IP
next
LDMFD SP!, {R0-R12,LR} ; Restore context
mov pc,lr
sys_createTask
STMFD sp!,{r5,r4,lr} ; Save lr and push r4 to stack to transfer parameter according to ATPCS
bl tsk_create
LDMFD sp!,{r5,r4,lr}
mov pc,lr
sys_deleteTask
STMFD sp!,{lr}
bl tsk_delete
LDMFD sp!,{lr}
mov pc,lr
sys_suspendTask
STMFD sp!,{lr}
bl tsk_suspend
LDMFD sp!,{lr}
mov pc,lr
sys_resumeTask
STMFD sp!,{lr}
bl tsk_resume
LDMFD sp!,{lr}
mov pc,lr
sys_sleep
STMFD sp!,{lr}
bl tsk_sleep
LDMFD sp!,{lr}
mov pc,lr
sys_wakeTask
STMFD sp!,{lr}
mov r1,#0x40 ; Set the second parameter with TSK_STATUS_ASLEEP
mov r2,#1 ; Set the third parameter with 1
bl tsk_resumeEx
LDMFD sp!,{lr}
mov pc,lr
sys_sendEvent
STMFD sp!,{lr}
bl ev_send
LDMFD sp!,{lr}
mov pc,lr
sys_getEvent
STMFD sp!,{lr}
bl ev_wait
LDMFD sp!,{lr}
mov pc,lr
sys_trunkAlloc
STMFD sp!,{lr}
bl tk_alloc
LDMFD sp!,{lr}
mov pc,lr
sys_trunkFree
STMFD sp!,{lr}
bl tk_alloc
LDMFD sp!,{lr}
mov pc,lr
sys_heapCreate
STMFD sp!,{r4,lr} ; Save lr and push r4 to stack to transfer parameter according to ATPCS
bl hp_create
LDMFD sp!,{r4,lr}
mov pc,lr
sys_heapDelete
STMFD sp!,{lr}
bl hp_delete
LDMFD sp!,{lr}
mov pc,lr
sys_heapAlloc
STMFD sp!,{lr}
bl hp_alloc
LDMFD sp!,{lr}
mov pc,lr
sys_heapFree
STMFD sp!,{lr}
bl hp_free
LDMFD sp!,{lr}
mov pc,lr
sys_heapReAlloc
STMFD sp!,{lr}
bl hp_realloc
LDMFD sp!,{lr}
mov pc,lr
sys_createSem
STMFD sp!,{lr}
bl sem_create
LDMFD sp!,{lr}
mov pc,lr
sys_deleteSem
STMFD sp!,{lr}
bl sem_delete
LDMFD sp!,{lr}
mov pc,lr
sys_getSem
STMFD sp!,{lr}
bl sem_wait
LDMFD sp!,{lr}
mov pc,lr
sys_releaseSem
STMFD sp!,{lr}
bl sem_release
LDMFD sp!,{lr}
mov pc,lr
sys_sendMsg
STMFD sp!,{r4,lr} ; Save lr and push r4 to stack to transfer parameter according to ATPCS
bl msg_send
LDMFD sp!,{r4,lr}
mov pc,lr
sys_getMsg
STMFD sp!,{r5,r4,lr} ; Save lr and push r4 to stack to transfer parameter according to ATPCS
bl msg_wait
LDMFD sp!,{r5,r4,lr}
mov pc,lr
sys_createMutex
STMFD sp!,{r4,lr} ; Save lr and push r4 to stack to transfer parameter according to ATPCS
bl mu_create
LDMFD sp!,{r4,lr}
mov pc,lr
sys_deleteMutex
STMFD sp!,{lr}
bl mu_delete
LDMFD sp!,{lr}
mov pc,lr
sys_getMutex
STMFD sp!,{lr}
bl mu_lock
LDMFD sp!,{lr}
mov pc,lr
sys_releaseMutex
STMFD sp!,{lr}
bl mu_unlock
LDMFD sp!,{lr}
mov pc,lr
;**************************************************************************************************
; System calls table
;**************************************************************************************************
EXPORT syscall_table
AREA SYS_CALL_TABLE,DATA,READONLY
syscall_table
_sys_createTask DCD sys_createTask ;Task Management Component
_sys_deleteTask DCD sys_deleteTask
_sys_suspendTask DCD sys_suspendTask
_sys_resumeTask DCD sys_resumeTask
_sys_sleep DCD sys_sleep
_sys_wakeTask DCD sys_wakeTask
_sys_sendEvent DCD sys_sendEvent ; Event Management Component
_sys_getEvent DCD sys_getEvent
_sys_trunkAlloc DCD sys_trunkAlloc ; Memory Management Component
_sys_trunkFree DCD sys_trunkFree
_sys_heapCreate DCD sys_heapCreate
_sys_heapDelete DCD sys_heapDelete
_sys_heapAlloc DCD sys_heapAlloc
_sys_heapFree DCD sys_heapFree
_sys_heapReAlloc DCD sys_heapReAlloc
_sys_createSem DCD sys_createSem ; Semaphore Management Component
_sys_deleteSem DCD sys_deleteSem
_sys_getSem DCD sys_getSem
_sys_releaseSem DCD sys_releaseSem
_sys_sendMsg DCD sys_sendMsg ; Message Management Component
_sys_getMsg DCD sys_getMsg
_sys_createMutex DCD sys_createMutex ; Mutex Management Component
_sys_deleteMutex DCD sys_deleteMutex
_sys_getMutex DCD sys_getMutex
_sys_releaseMutex DCD sys_releaseMutex
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -