MS-RTOS 进程

更新时间:
2023-08-09
下载文档

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_SHUTDOWN1关机信号
MS_SINGAL_POWER_FAIL2掉电信号

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_baseAPP 镜像的地址
[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 内核错误码

  • 注意事项

  • 示例

文档内容是否对您有所帮助?
有帮助
没帮助