首页 > 其他分享 >鸿蒙小车之多任务调度实验

鸿蒙小车之多任务调度实验

时间:2023-12-17 13:00:42浏览次数:28  
标签:优先级 attr 鸿蒙 小车 void 任务 任务调度 ID

说到鸿蒙我们都会想到华为mate60:遥遥领先!我们一直领先! 我们这个小车也是采用的是鸿蒙操作系统,学习鸿蒙小车,让你遥遥领先于你的同学。

@TOC

前言

本专栏将依次介绍鸿蒙小车的内核实验,硬件实验,wifi 实验。


鸿蒙小车之多任务调度实验_#include

一、什么是任务?为什么要有任务

任务 是操作系统(RTOS)中的基本组成单元,它们为嵌入式系统提供了并发处理、实时性、模块化和资源管理等重要功能。通过任务,操作系统(RTOS)可以更好地管理系统资源和满足各种应用程序需求。

传统的裸机只有一个任务,处理不了多个事件,一次只能处理一个事件。 而操作系统(RTOS)可以支持多任务管理,可以处理多个事件提高了资源的利用率和性能。

任务概念举例:

鸿蒙小车之多任务调度实验_优先级_02

以日常生活为例,比如这个母亲要同时做两件事: 喂饭:这是一个任务 回信息:这是另一个任务对比裸机和RTOS同时完成上面的任务:

鸿蒙小车之多任务调度实验_spark_03

裸机只有在完成其中一个任务后才能够去完成下一个任务,这样就会导致整体性能下降。

RTOS可以在不同任务之间进行切换,这样可以提高系统的响应能力和实时性,使得多个任务可以并发执行。

二、任务的状态

任务分别有四个状态:

  • 就绪态(Ready):任务准备运行
  • 运行态(Running):该任务正在执行。
  • 阻塞态(Blocked):该任务不在就绪队列中。还有任务被挂起、任务被延时、任务正在等待信号量、读写队列或者等待读写事件等,都会处于阻塞状态。
  • 退出态(Dead):该任务运行结束,等待系统回收资源。

任务的状态之间可以进行转换,每一个任务在某一时刻都有属于自己的状态。

任务状态转换图:

鸿蒙小车之多任务调度实验_#include_04

任务状态切换说明:

就绪态→ 运行态 任务创建时进入就绪态,当进行任务切换时,最高优先级的任务会从就绪态切换到运行态。

运行态→ 阻塞态 正在运行的任务被挂起,延时,信号量等影响时,由运行态变为阻塞态。

三、任务优先级

优先级指的是任务执行顺序的概念。在鸿蒙操作系统中,任务有32个优先级(0~31)最高优先级为 0,最低优先级为 31。

优先级越高的任务越先执行。优先级高的可以打断优先级低的执行。

厨房着火:

鸿蒙小车之多任务调度实验_spark_05

当面对厨房着火和吃饭时,先去灭火再回来吃饭,因为厨房着火的事情更加紧急,需要尽快处理。

四、任务创建函数

创建任务函数原型:

// 创建任务

osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const
osThreadAttr_t *attr);

各个参数:

osThreadFunc_t func :这是一个指向任务函数的指针,表示要在任务中执行的代码。 void * argument :这是一个指向传递给任务函数的参数的指针。

const osThreadAttr_t * attr :这是一个指向任务属性的指针,用于配置任务的各种属性。任务属性可以包括任务的优先级、堆栈大小、堆栈指针、任务名字等。这些属性可以根据应用程序的需求进行配置。

osThreadNew 函数的返回值是一个标识新创建任务的ID,这个ID可以用于管理和控制任务。

五、任务创建实验

修改app下的BUILD.gn文件.

static_library("Task") {//定义一个名为Task的静态库
	sources = [
	"Task.c"//指定静态库中包含的源文件
	]
include_dirs = [
		"//utils/native/lite/include",
		"//domains/iot/link/libbuild"
	]
}

任务创建代码:

//包含头文件,头文件中有需要使用到的函数
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"

osThreadId_t Task1_ID; // 任务1 ID
osThreadId_t Task2_ID; // 任务2 ID

//任务1
void Task1 (void *argument)
{
	while(1)
	{
		printf("Task1\n");
		sleep(1);//释放CPU,延时1s
	}
}

//任务2
void Task2 (void *argument)
{
	while(1)
	{
		printf("Task2\n");
		sleep(1);//释放CPU,延时1s
	}
}

static void entry(void)
{
	osThreadAttr_t attr;
	attr.name = "Task1"; // 任务的名字
	
	attr.stack_size = 1024; // 栈空间大小 单位:字节
	attr.priority = osPriorityNormal; // 任务的优先级,数据越大,优先级越高
	Task1_ID = osThreadNew(Task1, NULL, &attr);
	attr.name = "Task2";// 任务的名字
	attr.priority = osPriorityNormal1; // 任务的优先级,数据越大,优先级越高
	Task2_ID = osThreadNew((osThreadFunc_t)Task2, NULL, &attr);
}

SYS_RUN(entry);//声明入口函数

将生成的镜像文件拷贝到共享文件夹当中:

cp out/hispark_pegasus/wifiiot_hispark_pegasus/Hi3861_wifiiot_app_allinone.bin
/mnt/hgfs/HarmonyOS/镜像/

总结

下一篇文章继续为大家介绍 鸿蒙小车的内核实验 ----- 软件定时器实验。

标签:优先级,attr,鸿蒙,小车,void,任务,任务调度,ID
From: https://blog.51cto.com/u_16159289/8861319

相关文章

  • 鸿蒙生态学堂·创新实训营成功举办,饿了么、个人所得税、哈啰等40余头部应用参培
    2023年12月12日至14日,第六期鸿蒙生态学堂·创新实训营在上海成功举办。饿了么、个人所得税、浙里办、萤石云视频、扫描全能王、哈啰、浦发银行、起点读书、企查查、途虎养车、叮咚买菜、麦当劳(中国)、肯德基、华住会、高铁管家、东方航空、航班管家、虎扑、中望CAD等40余知名应用的......
  • 鸿蒙开发|鸿蒙系统项目开发前的准备工作
    文章目录鸿蒙项目开发的基本流程介绍鸿蒙项目开发和其他项目有什么不同成为华为开发者-注册和实名认证1.登录官方网站鸿蒙项目开发的基本流程介绍直接上图,简单易懂!整个项目的开发通过4个模块进行:开发准备、开发应用、运行调试测试和发布应用。鸿蒙项目开发和其他项目有什么不同鸿......
  • 鸿蒙开发|开启鸿蒙开发之旅-发工具下载安装、项目创建和预览
    文章目录一、鸿蒙开发使用语言二、下载开发工具三、安装开发工具四、新建项目五、项目启动一、鸿蒙开发使用语言鸿蒙OS开发支持多种编程语言,开发者可以根据自身技术背景和项目需求选择合适的语言进行开发。目前鸿蒙OS主要支持以下几种语言:Java:Java是一种广泛使用的编程语言,也是An......
  • DevEco Studio 鸿蒙(HarmonyOS)项目结构
    DevEcoStudio鸿蒙(HarmonyOS)项目结构一、操作环境操作系统: Windows10专业版IDE:DevEcoStudio3.1SDK:HarmonyOS3.1编辑二、项目结构创建简单的HelloWorld移动应用项目结构如下图编辑由上到下说明各个文件夹的作用.hvigor:存储构建配置文件信息。.idea:存储项目的配置信息。A......
  • 使用 Taro 开发鸿蒙原生应用 —— 当 Taro 遇到纯血鸿蒙
    纯血鸿蒙即将到来在今年8月的「2023年华为开发者大会(HDC.Together)」上,华为正式官宣「鸿蒙Next」,这个更新的版本将移除所有的AOSP代码,彻底与Android切割,使其成为一个完全自主研发的操作系统,这将去掉40%左右多余的代码,使系统变得更加简洁、流畅。同时,会上也预告了将在明年1......
  • 鸿蒙开发 DevEco Studio 工具常用快捷键--备用
    做HarmonyOS鸿蒙开发离不开DevEcoStudio开发工具,DevEcoStudio是基于IntelliJIDEACommunity开源版本打造,所以默认的快捷键其实继承于IntelliJIDEA。熟悉DevEcoStudio的快捷键能提升开发效率和开发体验。作者:黑马pink讲前端https://www.bilibili.com/read/cv28......
  • 鸿蒙Watch 页面跳转
    新建页面config.json回自动注册添加跳转<buttontype="capsule"onclick="toStatusMonitor">状态检测</button>写跳转方法importrouterfrom'@system.router';exportdefault{data:{},onInit(){},onShow(){},......
  • 江鸟中原——鸿蒙App应用-《校园通》
        我是中原工学院软工金学生黄晓雨。以下是我的实践报告。   《校园通》软件很多系统中都有,android,ios,平板电脑等,该软件主要用于学校里的环境,学生,老师之间的沟通,方便学生的行动。实现思路:创建一个Java语言的鸿蒙项目创建主界面,包含:学校生活,出行指南,游玩南昌,号码百......
  • 『江鸟中原』基于鸿蒙的抽奖小程序
    通过对鸿蒙的学习,我做了一个基于鸿蒙开发的小项目。中原工学院RB软工移211班王梦茹202119144101案例介绍开始时间,点击抽奖,Web页面的抽奖转盘会开始转动,结束抽奖后,原生页面会弹出一个提示弹窗,这个页面就涉及到Web页面和原生页面的双向交互具体实现步骤以上就是这个案例的开发流程,......
  • 鸿蒙开发 HarmonyOS DevEco Studio 常用快捷键
    前言做HarmonyOS鸿蒙开发离不开DevEcoStudio开发工具,DevEcoStudio是基于IntelliJIDEACommunity开源版本打造,所以默认的快捷键其实继承于IntelliJIDEA。熟悉DevEcoStudio的快捷键能提升开发效率和开发体验。下面将详细列出DevEcoStudio一些常用的快捷键,由......