?? swi_s3c2410.s
字號:
#define PID_OFT 0
#define STATE_OFT 4
#define COUNT_OFT 8
#define PRIORITY_OFT 12
#define CONTENT_OFT 16
#define KERNELSP_OFT 96
#define KERNELSTACK_OFT 100
#define MAX_SWI_NUM 3
@ 虛擬地址=物理地址
#define SDRAM_BASE 0x30000000
#define SDRAM_SIZE 0x04000000
.extern swi_table
.text
.global HandleSWI
HandleSWI:
stmdb sp!,{ r0-r12,lr } @ 保存使用到的寄存器和返回地址,不必保存那么多,以后要提高實時性時再改吧
ldr r4, [lr,#-4] @ lr-4為指令"swi n"的地址,此指令低24位就是n
bic r4, r4,#0xff000000
cmp r4, #3
ldrls r5, =swi_table @ swi跳轉表基址
ldrls lr, =swi_return @ 返回地址
ldrls pc, [r5,r4,lsl #2] @ 跳轉到相應匯編處理函數
mov r0, #-1 @ 出錯,返回-1
swi_return:
ldmia sp!,{ r0-r12,pc }^ @ 中斷返回, ^表示將spsr的值復制到cpsr
@ 進程退出處理函數,比如處理main函數退出
.text
.global sys_exit
sys_exit:
@ 將調用C函數do_exit(int error_code)
@ r0=error_code
ldr pc, =do_exit @ do_exit返回到swi_return
.text
.global sys_sleep
sys_sleep:
@ 將調用C函數int sleep(int time)
@ r0=sleep time
ldr pc, =do_sleep @ do_exit返回到swi_return
.text
.global sys_write
sys_write:
@ 將調用C函數int write(char *str)
@ r0=sleep time
ldr pc, =do_write @ do_exit返回到swi_return
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -