物联网操作系统原理(LiteOS)12内核实验一

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 实验内容
• 创建两个同优先级的任务 • 通过入口函数给任务指定不同的功能
3
任务入口函数
• 任务创建函数LOS_TaskCreate
• 创建新任务 • 参数:任务ID TskID
• 在创建成功后会赋值为实际分配到的任务ID
• 参数:任务属性 params
• 定义了任务的各个属性,在下个实验会有详细分析 • 任务属性中可以指定入口函数,即任务实际执行的函数
}
5
任务入口函数
• 部分代码解析
• 任务创建
• stInitParam定义了任务属性
• pfnTaskEntry定义了函数入口
• s_uwTskID#在任务创建成功后赋值为任务#的ID
stInitParam.pfnTaskEntry = Example01_Task1; stInitParam.usTaskPrio = TASK_DEFAULT_PRIO; stInitParam.pcName = "Task1"; stInitParam.uwStackSize = TASK_STK_SIZE; uwRet = LOS_TaskCreate(&s_uwTskID1, &stInitParam); if (uwRet != LOS_OK) {
UINT32
uwStackSize; /**< Task stack size */
CHAR
*pcName;
/**< Task name */
UINT32
uwResved;
/**< Reserved */
} TSK_INIT_PARAM_S;
8
任务参数
• 实验目标
• 熟悉中各个任务属性的作用 • 掌握任务参数的使用
printf("Example_Task1 create Failed!\n"); return LOS_NOK; }
6
任务入口函数
• 期望运行结果
• 两个任务轮流输出
7
任务参数
• 通过结构体TSK_INIT_PARAM_S进行设置
• pfnTaskEntry:任务入口函数 • usTaskPrio:任务优先级 • uwArg:任务参数 • uwStackSize:任务栈大小 • pcName:任务名称
• 返回值:uwRet
• 在创建成功时,返回LOS_OK • 创建失败,根据失败原因返回对应的返回值
4
任务入口函数
• 部分代码解析
• Example01_Task#:任务#的入口函数
• 周期性打印内容并持续占用CPU • 若没有轮询执行,任务将持续占用CPU,其他任务无法执行
static VOID * Example01_Task1(UINT32 uwArg) { const CHAR *pcTaskName = "Task 1 is running\n"; UINT32 i; for (;;) { puts(pcTaskName); for (i = 0; i < TASK_LOOP_COUNT; i++) { // 占用CPU耗时运行 } }
第12章 Huawei LiteOS 内核实验一
瞿文浩 孔令和 李雪峰
目录
• 任务入口函数 • 任务参数配置 • 任务优先级抢占 • 任务延时 • 任务高优先级打断 • 任务优先级动态调整 • 任务中创建与删除
2
任务入口函数
• 实验目标
• 熟悉任务创建的流程 • 掌握通过入口函数区分任务内容 • 理解同优先级任务的轮询执行
typedef struct tagTskInitParam
{
TSK_ENTRY_FUNC
pfnTaskEntry; /**< Task entrance function */
UINT16
usTaskPrio; /**< Task priority */
UINT32
uwArg;
/**< Task parameters */
printf("Example_Task1 create Failed!\n"); return LOS_NOK; }
11
任务入口函数
• 期望运行结果
• 两个任务轮流输出不同内容
12
任务优先级抢占
• 实验目标
• 掌握任务优先级的设置 • 理解高优先级任务对低优先级任务的抢占
• ቤተ መጻሕፍቲ ባይዱ验内容
• 创建两个不同优先级的任务 • 通过入口函数和参数定义两个任务不同的功能
• 实验内容
• 创建两个同优先级的任务 • 任务使用相同的入口函数 • 任务使用不同的任务参数,输出不同的内容
9
任务参数
• 部分代码解析
• Example02_Task:任务入口函数
• 周期性打印内容并持续占用CPU • 打印的内容由任务参数决定
static VOID * Example02_Task(UINT32 uwArg) { UINT32 i; for (;;) { printf("%s\r\n", (const CHAR *)uwArg); for (i = 0; i < TASK_LOOP_COUNT; i++) { // 占用CPU耗时运行 } }
}
10
任务参数
• 部分代码解析
• 任务创建
• stInitParam定义了任务属性
• 两个任务使用的入口函数相同 • uwArg定义了任务参数,两个任务的参数不同
stInitParam.pfnTaskEntry = Example02_Task; stInitParam.usTaskPrio = TASK_DEFAULT_PRIO; stInitParam.pcName = "Task1"; stInitParam.uwStackSize = TASK_STK_SIZE; stInitParam.uwArg = (UINT32)pcTextForTask1; uwRet = LOS_TaskCreate(&s_uwTskID1, &stInitParam); if (uwRet != LOS_OK) {
13
任务优先级抢占
• 部分代码解析
• 任务创建
• stInitParam定义了任务属性
• 两个任务通过入口函数和参数区分功能 • usTaskPrio定义了任务的优先级,两个任务优先级不同
stInitParam.pfnTaskEntry = Example03_TaskHi; stInitParam.usTaskPrio = TASK_PRIO_HI; stInitParam.pcName = "TaskHi"; stInitParam.uwStackSize = TASK_STK_SIZE; stInitParam.uwArg = (UINT32)pcTextForTaskHi; uwRet = LOS_TaskCreate(&s_uwTskHiID, &stInitParam); if (uwRet != LOS_OK) {
相关文档
最新文档