博客
关于我
LiteOS学习(一)任务
阅读量:600 次
发布时间:2019-03-12

本文共 3770 字,大约阅读时间需要 12 分钟。

在开发STM32LiteOS系统应用时,任务编程是核心技能之一。本文将指导读者完成一个简单的任务开发循序渐进地开展工作。

首先,在工程目录下新建一个Ex_task.c文件,并在其中添加如下的代码片段:

# include "stm32l4xx_hal.h"# include "gpio.h"# include "los_demo_debug.h"# include "los_inspect_entry.h"# include "los_typedef.h"# include "los_queue.h"# include "los_task.h"static UINT32 g_uwTskHiID;static UINT32 g_uwTskLoID;#define TSK_PRIOR_HI 4#define TSK_PRIOR_LO 5static UINT32 Example_TaskHi_1(VOID){    UINT32 uwRet = LOS_OK;    dprintf("Enter TaskHi Handler.\r\n");        /*延时5个Tick,延时后该任务会挂起,执行剩余任务中高优先级的任务(g_uwTskLoID任务)*/    uwRet = LOS_TaskDelay(5);    if (uwRet != LOS_OK) {        dprintf("Delay Task Failed.\r\n");        return LOS_NOK;    }        /*2个tick时间到了后,该任务恢复,继续执行*/    dprintf("Enter TaskHi LOS_TaskDelay Done.\r\n");        /*挂起自身任务*/    uwRet = LOS_TaskSuspend(g_uwTskHiID);    if (uwRet != LOS_OK) {        dprintf("Suspend TaskHi Failed.\r\n");        uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_TASK, LOS_INSPECT_STU_ERROR);        if (uwRet != LOS_OK) {            dprintf("Set Inspect Status Err\n");        }        return LOS_NOK;    }        dprintf("TaskHi LOS_TaskResume Success.\r\n");    uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_TASK, LOS_INSPECT_STU_SUCCESS);    if (uwRet != LOS_OK) {        dprintf("Set Inspect Status Err\n");    }        /*删除任务*/    if (LOS_OK != LOS_TaskDelete(g_uwTskHiID)) {        dprintf("TaskHi delete failed .\n");        return LOS_NOK;    }        return LOS_OK;}/*低优先级任务入口函数*/static UINT32 Example_TaskLo_1(VOID){    UINT32 uwRet;    dprintf("Enter TaskLo Handler.\r\n");        /*延时10个Tick,延时后该任务会挂起,执行剩余任务中高优先级的任务(背景任务)*/    uwRet = LOS_TaskDelay(10);    if (uwRet != LOS_OK) {        dprintf("Delay TaskLo Failed.\r\n");        return LOS_NOK;    }        dprintf("TaskHi LOS_TaskSuspend Success.\r\n");        /*恢复被挂起的任务g_uwTskHiID*/    uwRet = LOS_TaskResume(g_uwTskHiID);    if (uwRet != LOS_OK) {        dprintf("Resume TaskHi Failed.\r\n");        uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_TASK, LOS_INSPECT_STU_ERROR);        if (uwRet != LOS_OK) {            dprintf("Set Inspect Status Err\n");        }        return LOS_NOK;    }        /*删除任务*/    if (LOS_OK != LOS_TaskDelete(g_uwTskLoID)) {        dprintf("TaskLo delete failed .\n");        return LOS_NOK;    }        return LOS_OK;} UINT32 Example_Entry(VOID) {     UINT32 uwRet = LOS_OK;     TSK_INIT_PARAM_S stInitParam = {0};     dprintf("LOS_TaskLock() Success!\r\n");          stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskHi_1;     stInitParam.usTaskPrio = TSK_PRIOR_HI;     stInitParam.pcName = "Task1";     stInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;          uwRet = LOS_TaskCreate(&g_uwTskHiID, &stInitParam);     if (uwRet != LOS_OK) {         printf("Example_Task1 create Failed!\r\n");         return LOS_NOK;     }          dprintf("Example_TaskHi create Success!\r\n");          stInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskLo_1;     stInitParam.usTaskPrio = TSK_PRIOR_LO;     stInitParam.pcName = "Task2";     stInitParam.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;          uwRet = LOS_TaskCreate(&g_uwTskLoID, &stInitParam);     if (uwRet != LOS_OK) {         printf("Example_Task2 create Failed!\r\n");         return LOS_NOK;     }          dprintf("Example_TaskLo create Success!\r\n");          return uwRet; }

接下来,返回到项目主文件(main.c),在其中添加以下代码:

.../* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);/* USER CODE BEGIN PFP */UINT32 Example_Entry(VOID);/* USER CODE END PFP */.../* USER CODE BEGIN 2 */if (LOS_OK != LOS_KernelInit()) {    return LOS_NOK;}Example_Entry();LOS_Start();/* USER CODE END 2 */

完成代码开发后,保存文件并进行编译和运行,确认系统按预期工作。如果遇到问题,请仔细检查任务创建、延时、任务挂起及恢复等关键操作的实现是否符合LiteOS任务管理规范。

转载地址:http://daexz.baihongyu.com/

你可能感兴趣的文章
Android 吸顶布局
查看>>
ERROR - ORA-12514 监听程序当前无法识别连接描述符中请求的服务(来自于xuleicsu)
查看>>
"compileDebugJavaWithJavac"错误解决
查看>>
维基百科之AndroidRoot
查看>>
SQL语言-DDL、DML、DCL
查看>>
import Vue from 'vue'的过程
查看>>
ubuntu16.04下系统配置
查看>>
国内有哪些比较靠谱的云服务器?
查看>>
Java中有几种基本数据类型?它们分别占多大字节?
查看>>
Java中基本类型的转换规则
查看>>
Mapper 接口方法如何与注解里的 SQL 进行绑定的?
查看>>
python安装和配置(win10)
查看>>
重构函数(1)条件合并
查看>>
2020编码大赛(1)题目
查看>>
BitChanger语言
查看>>
Pythagorea(3)第16-21章
查看>>
纪念碑谷(1-5章)
查看>>
基数树(radix tree)
查看>>
58Q游戏(4)73(5)85(6)98(7)
查看>>
独立钻石棋详解
查看>>