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 + -
显示快捷键?