⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syscall.s

📁 一个小型的嵌入式操作系统内核,可用于多种硬件平台
💻 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 + -