📄 swi.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -