swi.c

来自「一个基于MMU的操作系统」· 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 + -
显示快捷键?