MS-RTOS 内核接口

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

MS-RTOS 内核接口

本章将介绍 MS-RTOS 内核接口的使用。

内核相关 API

下表展示了内核相关的 API 在两个权限空间下是否可用:

API用户空间内核空间
ms_rtos_version
ms_rtos_name
ms_rtos_license
ms_rtos_logo
ms_rtos_reboot
ms_rtos_shutdown
ms_rtos_update
ms_rtos_init
ms_rtos_start
ms_printk
ms_printk_set_level
ms_sched_lock
ms_sched_unlock
ms_schedule
ms_kern_tick
ms_access_ok
ms_op_perm_ok
ms_dev_perm_ok
ms_dir_perm_ok
ms_eeprom_write_ok
ms_arch_int_disable
ms_arch_int_resume
ms_arch_ffs
ms_arch_memcpy
ms_write32
ms_read32
ms_write16
ms_read16
ms_write8
ms_read8
ms_idle_hook_add
ms_idle_hook_remove

ms_rtos_version()

  • 描述 获得 MS-RTOS 版本号

  • 函数原型

ms_uint32_t ms_rtos_version(void);
  • 参数

  • 返回值 MS-RTOS 版本号

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    ms_uint32_t version = ms_rtos_version();

    // do some thing

    return 0;
}

ms_rtos_name()

  • 描述 获得 MS-RTOS 名字字符串

  • 函数原型

const char *ms_rtos_name(void);
  • 参数

  • 返回值 MS-RTOS 名字字符串

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    const char *name = ms_rtos_name();

    // do some thing

    return 0;
}

ms_rtos_license()

  • 描述 获得 MS-RTOS license 字符串

  • 函数原型

const char *ms_rtos_license(void);
  • 参数

  • 返回值 MS-RTOS license 字符串

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    const char *license = ms_rtos_license();

    // do some thing

    return 0;
}

ms_rtos_logo()

  • 描述 获得 MS-RTOS logo 字符串

  • 函数原型

const char *ms_rtos_logo(void);
  • 参数

  • 返回值 MS-RTOS logo 字符串

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    const char *logo = ms_rtos_logo();

    // do some thing

    return 0;
}

ms_rtos_reboot()

  • 描述 重启机器

  • 函数原型

ms_err_t ms_rtos_reboot(void);
  • 参数

  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    ms_rtos_reboot();

    return 0;
}

ms_rtos_shutdown()

  • 描述 关机

  • 函数原型

ms_err_t ms_rtos_shutdown(void);
  • 参数

  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    ms_rtos_shutdown();

    return 0;
}

ms_rtos_update()

  • 描述 更新 MS-RTOS OS 和 APP 镜像

  • 函数原型

ms_err_t ms_rtos_update(void);
  • 参数

  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

int main(int argc, char *argv[])
{
    ms_rtos_update();

    return 0;
}

ms_rtos_init()

  • 描述 初始化 MS-RTOS 内核和各种子系统

  • 函数原型

ms_err_t ms_rtos_init(ms_mem_layout_t *mem_layout);
  • 参数
输入/输出参数描述
[in]mem_layout内存布局类型指针

内存布局类型每一个成员代表哪一个内存区域已经被固定好:

描述
MS_FLASH_REGION0UFLASH 区域,进程可读、可执行,必须有效
MS_EXT_FLASH_REGION1U扩展的 FLASH 区域,进程可读、可执行,可以没有
MS_KERN_TEXT_REGION2U内核代码区域,进程不能访问,必须有效
MS_KERN_DATA_REGION3U内核数据区域,进程不能访问,必须有效
MS_KERN_HEAP_REGION4U内核内存堆区域,在内核数据区域里面,必须有效
MS_SHARED_RAM_REGION5U共享内存区域,进程可读、可写、可执行,地址和大小可以为 0(即无效)
MS_PROCESS_MEM_REGION6U进程内存区域,进程可读、可写,支持进程特性的 MS-RTOS 必须有效
MS_DEV_SPACE_REGION7U设备虚拟地址空间区域(带有 MMU 的系统才需要)
MS_USER_SPACE_REGION8U用户虚拟地址空间区域(带有 MMU 的系统才需要)
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在 MS-RTOS 启动后调用,不能重复调用,一般在 CPU 复位后初始化基本硬件设施后马上调用

  • 示例 请参考系统移植章节

ms_rtos_start()

  • 描述 启动 MS-RTOS

  • 函数原型

ms_err_t ms_rtos_start(void);
  • 参数

  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,在 MS-RTOS 初始化后调用,不能重复调用

  • 示例 请参考系统移植章节

ms_printk()

  • 描述 内核打印信息,信息通过 ms_bsp_printk 接口进行输出

  • 函数原型

void ms_printk(ms_pk_level_t level, const char *fmt, ...) MS_PRINTK_ATTR;
  • 参数
输入/输出参数描述
[in]level日志级别
[in]fmt格式化字符串

日志级别为以下的宏:

描述
MS_PK_EMERG0U紧急事件消息,系统崩溃之前提示,表示系统不可用
MS_PK_ALERT1U报告消息,表示必须立即采取措施
MS_PK_CRIT2U临界条件,通常涉及严重的硬件或软件操作失败
MS_PK_ERR3U错误条件,驱动程序常用 MS_PK_ERR 来报告硬件的错误
MS_PK_WARNING4U警告条件,对可能出现问题的情况进行警告
MS_PK_NOTICE5U正常但又重要的条件,用于提醒
MS_PK_INFO6U提示信息,如驱动程序启动时,打印硬件信息
MS_PK_DEBUG7U调试级别的消息
  • 返回值

  • 注意事项

  • 示例

void xxx(void)
{
    ms_printk(MS_PK_DEBUG, "xxx %d\n", 1);

    // do some thing
}

ms_printk_set_level()

  • 描述 设置 ms_printk 函数可打印的日志级别(默认为 MS_PK_DEBUG

  • 函数原型

ms_err_t ms_printk_set_level(ms_pk_level_t level);
  • 参数
输入/输出参数描述
[in]level可打印的日志级别
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

void xxx(void)
{
    ms_printk_set_level(MS_PK_NOTICE);

    // do some thing
}

ms_sched_lock()

  • 描述 锁住内核调度器

  • 函数原型

ms_err_t ms_sched_lock(void);
  • 参数

  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核启动前调用,与 ms_sched_unlock 配对使用

  • 示例ms_sched_unlock()

ms_sched_unlock()

  • 描述 解锁内核调度器

  • 函数原型

ms_err_t ms_sched_unlock(void);
  • 参数

  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核启动前调用,与 ms_sched_lock 配对使用

  • 示例

void xxx(void)
{
    ms_sched_lock();

    // do some thing

    ms_sched_unlock();
}

ms_schedule()

  • 描述 进行一次线程调度

  • 函数原型

void ms_schedule(void);
  • 参数

  • 返回值

  • 注意事项 中断中、内核启动前、内核锁定期间调用并不会进行线程调度

  • 示例

void xxx(void)
{
    ms_schedule();
}

ms_kern_tick()

  • 描述 维护内核心跳时间

  • 函数原型

ms_err_t ms_kern_tick(ms_tick_t n_tick);
  • 参数
输入/输出参数描述
[in]n_tick经过了多少个嘀嗒
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 只能由硬件定时器中断服务函数或中断入口函数调用

  • 示例

如果使能了 ISR 管理 MS_CFG_KERN_ISR_MANAGE_EN,在硬件定时器中断服务函数中调用:

static ms_irq_ret_t timer_isr(ms_ptr arg)
{
    // do some thing 

    ms_kern_tick(1U);

    return MS_IRQ_HANDLED;
}

如果没有使能 ISR 管理 MS_CFG_KERN_ISR_MANAGE_EN,在硬件定时器中断入口函数中调用:

void timer_int_handle(void)
{
    // enter interrupt
    ms_int_enter();

    // do some thing 

    ms_kern_tick(1U);

    // exit interrupt
    ms_int_exit();
}

ms_access_ok()

  • 描述 判断当前线程指定的内存范围是否能够以指定的访问模式来访问

  • 函数原型

ms_bool_t ms_access_ok(ms_const_ptr_t addr, ms_size_t size, ms_access_mode_t mode);
  • 参数
输入/输出参数描述
[in]addr内存基地址
[in]size内存大小
[in]mode访问模式

访问模式为以下的宏:

含义
MS_ACCESS_R只读
MS_ACCESS_W只写
MS_ACCESS_RW读写
  • 返回值 MS_TRUE:可以访问,MS_FALSE:不能访问

  • 注意事项

  • 示例

void xxx(void)
{
    ms_bool_t ret = ms_access_ok(0xc0000000, 4, MS_ACCESS_R);

    // do some thing
}

ms_op_perm_ok()

  • 描述 判断当前线程是否有指定的操作权限

  • 函数原型

ms_bool_t ms_op_perm_ok(ms_op_perm_t op_perm);
  • 参数
输入/输出参数描述
[in]op_perm操作权限

操作权限为以下的宏:

含义
MS_OP_PERM_REBOOT重启、关机
MS_OP_PERM_UPDATE升级
MS_OP_PERM_TIME_SET设置时间
MS_OP_PERM_APP_START启动 APP
MS_OP_PERM_APP_KILL杀死 APP
MS_OP_PERM_APP_SIGNAL给 APP 发信号
  • 返回值 MS_TRUE:有权限,MS_FALSE:没权限

  • 注意事项

  • 示例

void xxx(void)
{
    ms_bool_t ret = ms_op_perm_ok(MS_OP_PERM_TIME_SET);

    // do some thing
}

ms_dev_perm_ok()

  • 描述 判断当前线程是否有指定设备的指定读写权限

  • 函数原型

ms_bool_t ms_dev_perm_ok(const char *path, ms_dev_perm_t perm);
  • 参数
输入/输出参数描述
[in]path设备路径
[in]perm设备读写权限

设备读写权限为以下的宏:

含义
MS_DEV_PERM_R读设备
MS_DEV_PERM_W写设备
MS_DEV_PERM_RW读写设备
  • 返回值 MS_TRUE:有权限,MS_FALSE:没权限

  • 注意事项

  • 示例

void xxx(void)
{
    ms_bool_t ret = ms_dev_perm_ok("/dev/xxx", MS_DEV_PERM_W);

    // do some thing
}

ms_dir_perm_ok()

  • 描述 判断当前线程是否有指定目录的访问权限

  • 函数原型

ms_bool_t ms_dir_perm_ok(const char *path);
  • 参数
输入/输出参数描述
[in]path目录路径
  • 返回值 MS_TRUE:有权限,MS_FALSE:没权限

  • 注意事项

  • 示例

void xxx(void)
{
    ms_bool_t ret = ms_dir_perm_ok("/nor/update");

    // do some thing
}

ms_eeprom_write_ok()

  • 描述 判断当前线程是否有指定的 EEPROM 空间的写权限

  • 函数原型

ms_bool_t ms_eeprom_write_ok(ms_uint32_t addr, ms_size_t len);
  • 参数
输入/输出参数描述
[in]addrEEPROM 空间的起始地址
[in]lenEEPROM 空间的长度
  • 返回值 MS_TRUE:有权限,MS_FALSE:没权限

  • 注意事项

  • 示例

void xxx(void)
{
    ms_bool_t ret = ms_eeprom_write_ok(010);

    // do some thing
}

ms_arch_int_disable()

  • 描述 屏蔽 CPU 中断

  • 函数原型

ms_arch_sr_t ms_arch_int_disable(void);
  • 参数

  • 返回值 屏蔽前的 CPU 中断使能状态

  • 注意事项

  • 示例ms_arch_int_resume

ms_arch_int_resume()

  • 描述 恢复 CPU 中断使能状态

  • 函数原型

void ms_arch_int_resume(ms_arch_sr_t sr);
  • 参数
输入/输出参数描述
[in]srCPU 中断使能状态(由 ms_arch_int_disable 返回)
  • 返回值

  • 注意事项

  • 示例

void xxx(void)
{
    ms_arch_sr_t sr = ms_arch_int_disable();

    // do some thing

    ms_arch_int_resume(sr);
}

ms_arch_ffs()

  • 描述 查找无符号 32 位数中第一个置 1 的位

  • 函数原型

ms_uint32_t ms_arch_ffs(ms_uint32_t value);
  • 参数
输入/输出参数描述
[in]value需要查找的无符号 32 位数
  • 返回值 第一个置 1 的位的编号,正确返回 [1 ~ 32],如果没有位被置 1,返回 0

  • 注意事项

  • 示例

void xxx(void)
{
    ms_uint32_t bit_no = ms_arch_ffs(0x00010000);

    // do some thing
}

ms_arch_memcpy()

  • 描述 内存拷贝

  • 函数原型

void ms_arch_memcpy(ms_ptr_t dest, ms_const_ptr_t src, ms_size_t size);
  • 参数
输入/输出参数描述
[in]dest目的内存地址
[in]src源内存地址
[in]size需要拷贝的长度
  • 返回值

  • 注意事项

  • 示例

void xxx(void)
{
    ms_uint8_t  buf_src[100];
    ms_uint8_t  buf_dst[100];

    ms_arch_memcpy(buf_dst, buf_src, sizeof(buf_src));

    // do some thing
}

ms_write32()

  • 描述 写 32 位数据到指定地址

  • 函数原型

void ms_write32(ms_uint32_t data, ms_addr_t addr)
  • 参数
输入/输出参数描述
[in]data数据
[in]addr地址
  • 返回值

  • 注意事项

  • 示例

void xxx(void)
{
    ms_write32(0x00010000, 0xc0000000);

    // do some thing
}

ms_read32()

  • 描述 从指定地址读 32 位数据

  • 函数原型

ms_uint32_t ms_read32(ms_addr_t addr)
  • 参数
输入/输出参数描述
[in]addr地址
  • 返回值 32 位数据

  • 注意事项

  • 示例

void xxx(void)
{
    ms_uint32_t val = ms_read32(0xc0000000);

    // do some thing
}

ms_write16()

  • 描述 写 16 位数据到指定地址

  • 函数原型

void ms_write16(ms_uint16_t data, ms_addr_t addr)
  • 参数
输入/输出参数描述
[in]data数据
[in]addr地址
  • 返回值

  • 注意事项

  • 示例

void xxx(void)
{
    ms_write16(0x0001, 0xc0000000);

    // do some thing
}

ms_read16()

  • 描述 从指定地址读 16 位数据

  • 函数原型

ms_uint16_t ms_read16(ms_addr_t addr)
  • 参数
输入/输出参数描述
[in]addr地址
  • 返回值 16 位数据

  • 注意事项

  • 示例

void xxx(void)
{
    ms_uint16_t val = ms_read16(0xc0000000);

    // do some thing
}

ms_write8()

  • 描述 写 8 位数据到指定地址

  • 函数原型

void ms_write8(ms_uint8_t data, ms_addr_t addr)
  • 参数
输入/输出参数描述
[in]data数据
[in]addr地址
  • 返回值

  • 注意事项

  • 示例

void xxx(void)
{
    ms_write8(0x01, 0xc0000000);

    // do some thing
}

ms_read8()

  • 描述 从指定地址读 8 位数据

  • 函数原型

ms_uint8_t ms_read8(ms_addr_t addr)
  • 参数
输入/输出参数描述
[in]addr地址
  • 返回值 8 位数据

  • 注意事项

  • 示例

void xxx(void)
{
    ms_uint8_t val = ms_read8(0xc0000000);

    // do some thing
}

ms_idle_hook_add()

  • 描述 添加一个 idle 线程勾子函数

  • 函数原型

ms_err_t ms_idle_hook_add(ms_idle_hook_t *hook);
  • 参数
输入/输出参数描述
[in]hookidle 线程勾子指针
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

static ms_idle_hook_t myhook;

static void my_idle_hook(ms_ptr_t arg)
{
    // do something
}

void xxx(void)
{
    myhook.callback = my_idle_hook;
    myhook.arg      = MS_NULL;

    ms_idle_hook_add(&myhook);
}

ms_idle_hook_remove()

  • 描述 移除一个 idle 线程勾子函数

  • 函数原型

ms_err_t ms_idle_hook_remove(ms_idle_hook_t *hook);
  • 参数
输入/输出参数描述
[in]hookidle 线程勾子指针
  • 返回值 MS-RTOS 内核错误码

  • 注意事项

  • 示例

void xxx(void)
{
    ms_idle_hook_remove(&myhook);
}
文档内容是否对您有所帮助?
有帮助
没帮助