LiteOS-任务篇

前言

移植好内核后,开始实战内核。

链接

参考

  • 野火
  • 上面链接

笔录草稿

基本概念

  • 任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行
  • 任务与线程
    • 在 LiteOS 中,一个任务可以表示一条线程。
  • Huawei LiteOS的任务一共有 32 个优先级(0-31),最高优先级为0,最低优先级为31。

任务相关概念

  • 任务状态

    • 就绪 (Ready)
    • 运行(Running)
    • 运行(Running)
    • 退出态(Dead)
  • 任务ID

    • 可通过 任务ID 获取 任务句柄
      • ***任务句柄*** = (((LOS_TASK_CB *)g_pstTaskCBArray) + (TaskID))
  • 任务控制块TCB

    • TCB 包含了任务上下文栈指针(stack pointer)、任务状态、任务优先级、任务ID、任务名、任务栈大小等信息。TCB 可以反映出每个任务运行情况。(TCB 其实就是一个袜子
  • 任务栈

    • 每一个任务都拥有一个独立的栈空间,称为任务栈。
  • 任务上下文切换个人把上下文分开理解

    • ** Huawei LiteOS** 在任务由运行态转为其它状态时会将本任务的上文信息,保存在自己的任务栈里面,也称压栈或入栈;
    • 当任务切换到运行态时,把保存到任务栈中的上文信息加载到CPU寄存器中,即可恢复该任务的运行,称为出栈。新的任务信息也就是下文。
    • 以上流程就是 上文压栈 --> 下文出栈

LiteOS 任务运作机制

  • Huawei LiteOS 任务管理模块提供
    • 任务创建
    • 任务删除
    • 任务延时
    • 任务挂起
    • 任务恢复
    • 更改任务优先级
    • 锁定任务调度
    • 解锁任务调度
    • 根据任务控制块查询任务ID
    • 根据ID查询任务查询任务控制块信息功能。
  • 任务创建时,如果 OS 的系统可用空间少于任务,则创建失败,反之亦然。
  • 用户创建任务时,系统会将任务栈进行初始化,预置上下文。
    • 任务入口函数 也放到了相应的位置,在任务第一次执行时便可执行 任务入口函数

内核初始化

  • 一般的 RTOS 启动流程:MCU进入 main 函数 --> 创建任务 --> 启动 RTOS

    • 当然,在启动的过程中可以插入一些操作,如板级初始化 bspInit(); 等等
  • Huawei LiteOS 的启动流程则要多一步:MCU进入 main 函数 --> LiteOS内核初始化 --> 创建任务 --> 启动 RTOS

    • 在操作 LiteOS 必须先初始化其内核。
    • 函数 LOS_KernelInit();带返回值)。
  • 内核初始化主要工作

    • 配置任务数量上限
    • 内存起始地址
    • 初始化动态内存池(如果内存溢出,则内核初始化失败
    • 接管中断处理(非接管中断跳过
    • 任务初始化
      • 先创建一个空闲任务
    • 任务监视初始化
    • CPU利用率初始化
    • IPC通信初始化:信号量、互斥量、消息队列等等。
    • 软件定时器初始化
      • 该函数内会创建一个队列 和 一个定时任务
        • 后续会在软件定时器相关篇章分析源码

创建任务

创建任务有两种方案

  • 方案一:
    • 先创建所有任务
    • 再启动调度
  • 方案二:
    • 先创建一个创建任务
    • 然后启动调度
    • 创建任务里面创建所有任务
    • 然后删除创建任务

本章实操的是方案二。

任务相关函数

接口名 描述
LOS_TaskCreateOnly 创建任务,并使该任务进入suspend状态,并不调度
LOS_TaskCreate 创建任务,并使该任务进入ready状态,并调度
LOS_TaskDelete 删除指定的任务
LOS_TaskResume 恢复挂起的任务
LOS_TaskSuspend 挂起指定的任务
LOS_TaskDelay 任务延时等待
LOS_TaskYield 显式放权,调整指定优先级的任务调度顺序
LOS_TaskLock 锁任务调度
LOS_TaskUnlock 解锁任务调度
LOS_CurTaskPriSet 设置当前任务的优先级
LOS_TaskPriSet 设置指定任务的优先级
LOS_TaskPriGet 获取指定任务的优先级
LOS_CurTaskIDGet 获取当前任务的ID
LOS_TaskInfoGet 获取指定任务的信息
LOS_TaskStatusGet 获取指定任务的状态
LOS_TaskNameGet 获取指定任务的名称
LOS_TaskInfoMonitor 监控所有任务,获取所有任务的信息
LOS_NextTaskIDGet 获取即将被调度的任务的ID

各函数使用可以看源码或者例程

任务开发流程

  • 配置任务块
  • 锁任务(
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LiteOS 是华为公司开发的一款轻量级的操作系统。为了更好地帮助开发者使用和了解 LiteOS,华为提供了详细的 LiteOS-A 文档。 LiteOS-A 文档是一个针对 LiteOS 的技术文档,其中包含了 LiteOS 的各种功能和特性的详细说明。开发者可以通过阅读文档了解 LiteOS 的体系结构、内核功能、支持的硬件平台、开发环境和开发工具链等信息。文档还提供了一系列的开发指南和示例代码,帮助开发者快速上手和应用 LiteOS。 文档中还介绍了 LiteOS 的特点和优势。LiteOS 是一个高效、可裁剪的操作系统,适用于各种资源受限的嵌入式设备。它具有超低的内存和存储占用,适用于小型芯片和低功耗设备。LiteOS 还支持多任务和多线程,并提供了丰富的通信机制和轻量级的任务调度器。 除了功能介绍,文档还提供了 LiteOS 的开发指南和最佳实践建议。开发者可以学习如何配置和编译 LiteOS,如何使用其内置的驱动和功能组件,以及如何进行任务调度和事件处理等操作。文档还包含了一些开发案例和示例代码,帮助开发者理解和应用 LiteOS 的各种功能。 总的来说,LiteOS-A 文档是一个全面而详细的技术指南,为开发者提供了使用和开发 LiteOS 的重要资源。通过阅读和学习文档,开发者能够更好地了解 LiteOS 的特性和优势,并能够高效地进行 LiteOS 的应用开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值