MS-RTOS 进程
本章将介绍 MS-RTOS 进程相关接口的使用。
进程相关数据类型
类型 | 描述 |
---|---|
ms_pid_t | 进程 ID |
ms_sigset_t | 信号集 |
ms_sighandler_t | 信号处理函数 |
ms_sigset_t
信号集类型:
typedef ms_ulong_t ms_sigset_t;
以下是 MS-RTOS 预定义的两个信号,用户可用 3 ~ 31 编号的信号:
参数 | 值 | 说明 |
---|---|---|
MS_SINGAL_SHUTDOWN | 1 | 关机信号 |
MS_SINGAL_POWER_FAIL | 2 | 掉电信号 |
ms_sighandler_t
信号处理函数类型有一个信号编号的参数,无返回值:
typedef void (*ms_sighandler_t)(int sig);
以下是一个信号处理函数定义的示例:
static void shutdown_handler(int sig)
{
// do some thing
}
进程相关 API
下表展示了进程相关的 API 在两个权限空间下是否可用:
API | 用户空间 | 内核空间 |
---|---|---|
ms_process_mem_sbrk | ● | |
ms_process_create | ● | |
ms_process_self | ● | ● |
ms_process_kill | ● | ● |
ms_process_exit | ● | |
ms_process_find | ● | ● |
ms_process_signal | ● | |
ms_process_sigprocmask | ● | |
ms_process_sigqueue | ● | ● |
ms_process_sigbroadcast | ● | ● |
ms_process_mem_sbrk()
描述 添加一个进程内存区域
函数原型
ms_err_t ms_process_mem_sbrk(ms_addr_t base, ms_size_t size);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | base | 内存基地址 |
[in] | size | 内存大小 |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例 无
ms_process_create()
描述 创建一个进程
函数原型
ms_err_t ms_process_create(const char *name, ms_const_ptr_t app_base, ms_size_t mem_size,
ms_size_t stk_size, ms_prio_t prio, ms_time_slice_t time_slice,
ms_uint32_t argc, char *argv[],
const ms_printf_func_t debug_printf,
ms_pid_t *pid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | name | 进程的名字,不能为空指针 |
[in] | app_base | APP 镜像的地址 |
[in] | mem_size | 进程内存的大小 |
[in] | stk_size | 进程主线程的堆栈大小 |
[in] | prio | 进程主线程的优先级 |
[in] | time_slice | 进程主线程的时间片 |
[in] | argc | 字符串指针参数数目 |
[in] | argv | 字符串指针参数数组 |
[in] | debug_printf | 调试信息打印函数指针,非空指针为调试模式 |
[out] | pid | 进程的 ID |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用,不能在内核锁定期间调用
示例
void xxx(void)
{
ms_err_t err = ms_process_create("process", (ms_ptr_t)0x20040000UL, 65536, 4096U, 9U, 0U,
0U, MS_NULL,
MS_NULL, MS_NULL);
// do some thing
}
ms_process_self()
描述 获得当前进程的 ID
函数原型
ms_pid_t ms_process_self(void);
参数 无
返回值 当前进程的 ID
注意事项 不能在中断中调用
示例
int main(int argc, char *argv[])
{
ms_pid_t pid = ms_process_self();
// do some thing
return 0;
}
ms_process_kill()
描述 杀死一个指定的进程
函数原型
ms_err_t ms_process_kill(ms_pid_t pid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | pid | 进程的 ID |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用,不能在内核锁定期间调用
示例
int main(int argc, char *argv[])
{
// do some thing
ms_process_kill(ms_process_self());
return 0;
}
ms_process_exit()
描述 进程主动退出
函数原型
ms_err_t ms_process_exit(void);
参数 无
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例
int main(int argc, char *argv[])
{
// do some thing
ms_process_exit();
return 0;
}
ms_process_find()
描述 通过名字查找进程
函数原型
ms_err_t ms_process_find(const char *name, ms_pid_t *pid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | name | 进程的名字 |
[out] | pid | 进程的 ID |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例 无
ms_process_signal()
描述 安装指定信号的处理函数
函数原型
ms_err_t ms_process_signal(int sig, ms_sighandler_t sighandler);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | sig | 信号的编号 |
[in] | sighandler | 信号的处理函数 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_process_sigprocmask()
描述 设置信号屏蔽掩码
函数原型
ms_err_t ms_process_sigprocmask(const ms_sigset_t *nset, ms_sigset_t *oset);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | nset | 新的信号屏蔽掩码 |
[out] | oset | 旧的信号屏蔽掩码 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_process_sigqueue()
描述 给指定进程发信号
函数原型
ms_err_t ms_process_sigqueue(ms_pid_t pid, int sig, ms_tick_t timeout);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | pid | 进程的 ID |
[in] | sig | 信号的编号 |
[in] | timeout | 超时时间 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_process_sigbroadcast()
描述 给所有进程发信号
函数原型
ms_err_t ms_process_sigbroadcast(int sig, ms_tick_t timeout);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | sig | 信号的编号 |
[in] | timeout | 超时时间 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无