LiteOS学习(一)任务
学习 任务 LiteOS
2023-09-11 14:19:59 时间
在这之前先声明一下,我是使用cubeMx工具生成工程代码(搭建工程可以查阅教程链接),根据LiteOS官网移植教程,工程代码移植成功后,接着学习LiteOS中的"任务"知识点,好了,进入正题,学习编程重在练习。
还有一个要声明的就是开发板使用的是淘宝上某家板子,开发板链接。
1、在工程目录下新建一个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 5
static 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 (LOS_OK != uwRet)
{
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 (LOS_OK != uwRet)
{
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 (LOS_OK != uwRet)
{
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;
}
2、在项目中找到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 */
3、保存修改好的代码,编译并运行,结果如下所示:
在此也非常期待华为的IDE面世。链接
相关文章
- Gradle学习之书籍《Build and Test with Gradle》之chapter2:Gradle task任务
- 学会待办任务清单法,学习效率可提高
- 学习QT之QString详解
- 【DB 2学习】查看一个数据库的配置文件
- Quartz定时任务学习(五)触发器
- Quartz定时任务学习(四)调度器
- DJANGO学习一则
- <深入 Python 3 >学习笔记
- RHCE 学习笔记(18) 计划任务 at和 crontab
- Spring 学习 5- task 定时任务
- ML之DataScience:基于机器学习处理数据科学(DataScience)任务(数据分析、特征工程、科学预测等)的简介、流程、案例应用执行详细攻略
- 十年阿里程序员:10个阶段完成python学习计划任务,有教程哦
- 数学建模学习(41):单因素方差分析
- HTML5 学习总结(四)——canvas绘图、WebGL、SVG
- 机器学习分类
- HBase应用快速学习
- Web Service学习笔记
- python 3.6 + robotFramework自动化框架 环境搭建、学习笔记
- Intel Edison学习笔记(二)—— 入门环境配置
- kinect学习笔记(一)—— Openni平台的搭建~、
- 【youcans的深度学习 05】PyTorch入门教程:快速入门
- Linux中shell的使用(零基础学习笔记)
- 【统计学习方法】1、统计学习方法概论
- java学习笔记——继承的综合案例
- 【硬件架构的艺术】学习笔记(4)流水线的艺术