文档首页 > > 开发指南> 内核开发指南> 任务> 开发指导

开发指导

分享
更新时间:2020/06/24 GMT+08:00

使用场景

任务创建后,内核可以执行锁任务调度,解锁任务调度,挂起,恢复,延时等操作,同时也可以设置任务优先级,获取任务优先级。任务结束的时候,则进行当前任务自删除操作。

功能

Huawei LiteOS 系统中的任务管理模块为用户提供下面几种功能。

功能分类

接口名

描述

任务的创建和删除

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

开发流程

以创建任务为例,讲解开发流程。

  1. 在los_config.h中配置任务模块。

    配置LOSCFG_BASE_CORE_TSK_LIMIT系统支持最大任务数,这个可以根据需求自己配置。

    配置LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE 空闲(IDLE)任务栈大小,这个默认即可。

    配置LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE默认任务栈大小,用户根据自己的需求进行配置,在用户创建任务时,可以进行针对性设置。

    配置LOSCFG_BASE_CORE_TIMESLICE时间片开关为YES。

    配置LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT时间片,根据实际情况自己配置。

    配置LOSCFG_BASE_CORE_TSK_MONITOR任务监测模块裁剪开关,可选择是否打开。

  2. 锁任务LOS_TaskLock,锁住任务,防止高优先级任务调度。
  3. 创建任务LOS_TaskCreate。
  4. 解锁任务LOS_TaskUnlock,让任务按照优先级进行调度。
  5. 延时任务LOS_TaskDelay,任务延时等待。
  6. 挂起指定的任务LOS_TaskSuspend,任务挂起等待恢复操作。
  7. 恢复挂起的任务LOS_TaskResume。

TASK状态

Huawei LiteOS任务的状态由内核自动维护,对用户不可见,不需要用户去操作。

TASK错误码

对任务存在失败可能性的操作,包括创建任务、删除任务、挂起任务、恢复任务、延时任务等等,均需要返回对应的错误码,以便快速定位错误原因。

序号

定义

实际数值

描述

参考解决方案

1

LOS_ERRNO_TSK_NO_MEMORY

0x03000200

内存空间不足

分配更大的内存分区

2

LOS_ERRNO_TSK_PTR_NULL

0x02000201

任务参数为空

检查任务参数

3

LOS_ERRNO_TSK_STKSZ_NOT_ALIGN

0x02000202

任务栈大小未对齐

对齐任务栈

4

LOS_ERRNO_TSK_PRIOR_ERROR

0x02000203

不正确的任务优先级

检查任务优先级

5

LOS_ERRNO_TSK_ENTRY_NULL

0x02000204

任务入口函数为空

定义任务入口函数

6

LOS_ERRNO_TSK_NAME_EMPTY

0x02000205

任务名为空

设置任务名

7

LOS_ERRNO_TSK_STKSZ_TOO_SMALL

0x02000206

任务栈太小

扩大任务栈

8

LOS_ERRNO_TSK_ID_INVALID

0x02000207

无效的任务ID

检查任务ID

9

LOS_ERRNO_TSK_ALREADY_SUSPENDED

0x02000208

任务已经被挂起

等待这个任务被恢复后,再去尝试挂起这个任务

10

LOS_ERRNO_TSK_NOT_SUSPENDED

0x02000209

任务未被挂起

挂起这个任务

11

LOS_ERRNO_TSK_NOT_CREATED

0x0200020a

任务未被创建

创建这个任务

12

LOS_ERRNO_TSK_OPERATE_SWTMR

0x02000222

不允许操作软件定时器任务

用户不要试图去操作软件定时器任务的设置

13

LOS_ERRNO_TSK_MSG_NONZERO

0x0200020c

任务信息非零

暂不使用该错误码

14

LOS_ERRNO_TSK_DELAY_IN_INT

0x0300020d

中断期间,进行任务延时

等待退出中断后再进行延时操作

15

LOS_ERRNO_TSK_DELAY_IN_LOCK

0x0200020e

任务被锁的状态下,进行延时

等待解锁任务之后再进行延时操作

16

LOS_ERRNO_TSK_YIELD_INVALID_TASK

0x0200020f

将被排入行程的任务是无效的

检查这个任务

17

LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK

0x02000210

没有或者仅有一个可用任务能进行行程安排

增加任务数

18

LOS_ERRNO_TSK_TCB_UNAVAILABLE

0x02000211

没有空闲的任务控制块可用

增加任务控制块数量

19

LOS_ERRNO_TSK_HOOK_NOT_MATCH

0x02000212

任务的钩子函数不匹配

暂不使用该错误码

20

LOS_ERRNO_TSK_HOOK_IS_FULL

0x02000213

任务的钩子函数数量超过界限

暂不使用该错误码

21

LOS_ERRNO_TSK_OPERATE_IDLE

0x02000214

这是个IDLE任务

检查任务ID,不要试图操作IDLE任务

22

LOS_ERRNO_TSK_SUSPEND_LOCKED

0x03000215

将被挂起的任务处于被锁状态

等待任务解锁后再尝试挂起任务

23

LOS_ERRNO_TSK_FREE_STACK_FAILED

0x02000217

任务栈free失败

该错误码暂不使用

24

LOS_ERRNO_TSK_STKAREA_TOO_SMALL

0x02000218

任务栈区域太小

该错误码暂不使用

25

LOS_ERRNO_TSK_ACTIVE_FAILED

0x03000219

任务触发失败

创建一个IDLE任务后执行任务转换

26

LOS_ERRNO_TSK_CONFIG_TOO_MANY

0x0200021a

过多的任务配置项

该错误码暂不使用

27

LOS_ERRNO_TSK_CP_SAVE_AREA_NOT_ALIGN

0x0200021b

暂无

该错误码暂不使用

28

LOS_ERRNO_TSK_MSG_Q_TOO_MANY

0x0200021d

暂无

该错误码暂不使用

29

LOS_ERRNO_TSK_CP_SAVE_AREA_NULL

0x0200021e

暂无

该错误码暂不使用

30

LOS_ERRNO_TSK_SELF_DELETE_ERR

0x0200021f

暂无

该错误码暂不使用

31

LOS_ERRNO_TSK_STKSZ_TOO_LARGE

0x02000220

任务栈大小设置过大

减小任务栈大小

32

LOS_ERRNO_TSK_SUSPEND_SWTMR_NOT_ALLOWED

0x02000221

不允许挂起软件定时器任务

检查任务ID, 不要试图挂起软件定时器任务

错误码定义:错误码是一个32位的存储单元,31~24位表示错误等级,23~16位表示错误码标志,15~8位代表错误码所属模块,7~0位表示错误码序号,如下

#define LOS_ERRNO_OS_NORMAL(MID,ERRNO)  \
(LOS_ERRTYPE_NORMAL | LOS_ERRNO_OS_ID | ((UINT32)(MID) << 8) | (ERRNO))
LOS_ERRTYPE_NORMAL :Define the error level as critical
LOS_ERRNO_OS_ID :OS error code flag.
MID:OS_MOUDLE_ID
ERRNO:error ID number

例如:

LOS_ERRNO_TSK_NO_MEMORY  LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x00)

错误码序号 0x16、0x1c、0x0b,未被定义,不可用。

平台差异性

无。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问