2 Star 6 Fork 3

稀风/KOS

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
u_syscall5.h 7.22 KB
一键复制 编辑 原始数据 按行查看 历史
稀风 提交于 2023-04-16 21:30 . 优化代码
#ifndef __U_SYSCALL_H_
#define __U_SYSCALL_H_
#include <common.h>
#include <queue.h>
#define _NR_TaskDestory 0
#define _NR_print 1
#define _NR_SetCursorPos 2
#define _NR_MutexCreat 3
#define _NR_MutexLock 4
#define _NR_MutexUnLock 5
#define _NR_MutexDestory 6
#define _NR_MutexTryLock 7
// 无参数的系统调用
#define _SYS_CALL0(_NR) ({ \
U32 retval; \
asm volatile( \
"int $0x80" \
: "=a" (retval) \
: "a" (_NR) \
: "memory" \
); \
retval; \
})
// 一个参数的系统调用
#define _SYS_CALL1(_NR, ARG1) ({ \
U32 retval; \
asm volatile( \
"int $0x80" \
: "=a" (retval) \
: "a"(_NR), "b"(ARG1) \
: "memory" \
); \
retval; \
})
// 两个参数的系统调用
#define _SYS_CALL2(_NR, ARG1, ARG2) ({ \
U32 retval; \
asm volatile( \
"int $0x80" \
: "=a" (retval) \
: "a"(_NR), "b"(ARG1), "c"(ARG2) \
: "memory" \
); \
retval; \
})
// 三个参数的系统调用
#define _SYS_CALL3(_NR, ARG1, ARG2, ARG3) ({ \
U32 retval; \
asm volatile( \
"int $0x80" \
: "=a" (retval) \
: "a"(_NR), "b"(ARG1), "c"(ARG2), "d"(ARG3) \
: "memory" \
); \
retval; \
})
// 四个参数的系统调用
#define _SYS_CALL4(_NR, ARG1, ARG2, ARG3, ARG4) ({ \
U32 retval; \
asm volatile( \
"int $0x80" \
: "=a" (retval) \
: "a"(_NR), "b"(ARG1), "c"(ARG2), "d"(ARG3), "S"(ARG4) \
: "memory" \
); \
retval; \
})
// 五个参数的系统调用
#define _SYS_CALL5(_NR, ARG1, ARG2, ARG3, ARG4, ARG5) ({ \
U32 retval; \
asm volatile( \
"int $0x80" \
: "=a" (retval) \
: "a"(_NR), "b"(ARG1), "c"(ARG2), "d"(ARG3), "S"(ARG4), "D"(ARG4) \
: "memory" \
); \
retval; \
})
/******************************************************************************
* 函数名称: void TaskDestory(void)
* 功能说明: 销毁当前任务
* 输入参数: 无
* 输出参数: 无
* 函数返回: 无
* 其它说明: 无
******************************************************************************/
E_RET TaskDestory(void);
/******************************************************************************
* 函数名称: U32 print(const char * fmt, ...)
* 功能说明: 用户打印
* 输入参数: const char * fmt --输出格式, 目前支持的格式:
%c: 字符
%s: 字符串
%x: 十六进制
%d: 十进制
    ... --可变参数
* 输出参数: 无
* 函数返回: 成功打印的字符个数
* 其它说明: 无
******************************************************************************/
U32 print(const char * fmt, ...);
/******************************************************************************
* 函数名称: E_RET SetCursorPos(U16 x, U16 y)
* 功能说明: 设置光标位置
* 输入参数: U16 x --横坐标
    U16 y --纵坐标
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET SetCursorPos(U16 x, U16 y);
typedef struct MUTEX
{
LIST_NODE node; // 互斥锁链表节点
U08 lock; // 锁状态
QUEUE wait; // 等待该互斥锁的任务队列(每个互斥锁都有一个等待队列)
} MUTEX;
/******************************************************************************
* 函数名称: MUTEX* SYS_MutexCreat(void)
* 功能说明: 创建互斥锁
* 输入参数: 无
* 输出参数: 无
* 函数返回: MUTEX* --互斥锁
* 其它说明:
******************************************************************************/
MUTEX* MutexCreat(void);
/******************************************************************************
* 函数名称: E_RET SYS_MutexLock(MUTEX* mutex)
* 功能说明: 上锁
* 输入参数: MUTEX* mutex --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET MutexLock(MUTEX* mutex);
/******************************************************************************
* 函数名称: E_RET MutexTryLock(MUTEX* mutex)
* 功能说明: 尝试上锁
* 输入参数: MUTEX* mutex --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 任务不会被挂起
******************************************************************************/
E_RET MutexTryLock(MUTEX* mutex);
/******************************************************************************
* 函数名称: E_RET SYS_MutexLock(MUTEX* mutex)
* 功能说明: 解锁
* 输入参数: MUTEX* mutex --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET MutexUnLock(MUTEX* mutex);
/******************************************************************************
* 函数名称: E_RET SYS_MutexLock(MUTEX* mutex)
* 功能说明: 销毁互斥锁
* 输入参数: MUTEX* mutex --互斥锁
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET MutexDestory(MUTEX* mutex);
#endif
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/thin-wind/KOS.git
git@gitee.com:thin-wind/KOS.git
thin-wind
KOS
KOS
main

搜索帮助