swi.c
来自「这是一个不到2000行的操作系统」· C语言 代码 · 共 76 行
C
76 行
#include <swi.h>#include <serial.h>#include <sched.h>fn_ptr swi_table[] = { sys_exit,sys_sleep,sys_write };int do_exit(int error_code){ DPRINTK(KERNEL_DEBUG,"kernel:do_exit\n\r"); current->state = TASK_UNALLOCATE; schedule(); return 0;}int do_sleep(unsigned long time){ DPRINTK(KERNEL_DEBUG,"kernel:do_sleep\n\r"); current->state = TASK_SLEEPING; current->timer = time; schedule(); return 0;} int do_write(char *str){ return printk(str);}int exit(int error_code){ int ret; __asm__( "mov r0, %1\n" "swi %2\n" "mov %0, r0\n" :"=r"(ret) :"r"(error_code),"M"(__NR_exit) :"r0" ); return ret;}int sleep(int time){ int ret; __asm__( "mov r0, %1\n" "swi %2\n" "mov %0, r0\n" :"=r"(ret) :"r"(time),"M"(__NR_sleep) :"r0" ); return ret;}/*************************************************************** 返回输出的字节数***************************************************************/int write(char *str){ int ret; __asm__( "mov r0, %1\n" "swi %2\n" "mov %0, r0\n" :"=r"(ret) :"r"(str),"M"(__NR_write) :"r0" ); return ret;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?