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

news2024/11/17 22:36:48

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

文章目录

  • 前言
  • 一、什么是任务?为什么要有任务
  • 二、任务的状态
  • 三、任务优先级
  • 四、任务创建函数
  • 五、任务创建实验
  • 总结

前言

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


在这里插入图片描述

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

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

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

任务概念举例:
在这里插入图片描述
以日常生活为例,比如这个母亲要同时做两件事:
喂饭:这是一个任务
回信息:这是另一个任务

对比裸机和RTOS同时完成上面的任务:
在这里插入图片描述
裸机只有在完成其中一个任务后才能够去完成下一个任务,这样就会导致整体性能下降。

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

二、任务的状态

任务分别有四个状态:

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

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

任务状态转换图:
在这里插入图片描述
任务状态切换说明:

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

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

三、任务优先级

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

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

厨房着火:
在这里插入图片描述
当面对厨房着火和吃饭时,先去灭火再回来吃饭,因为厨房着火的事情更加紧急,需要尽快处理。

四、任务创建函数

创建任务函数原型:

// 创建任务

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/镜像/

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure自定义元件

目录 1.processOne的使用 ​编辑2.自定义元件的使用、 2.1如何自定义一个元件 2.2使用自定义元件 导语&#xff1a; Axure是绘制原型图的软件&#xff0c;但是我们很多时候不知道&#xff0c;画哪一个板块&#xff0c;所以流程图的绘制也是非常重要的 1.processOne的使用…

一些好用的VSCode扩展

可以在扩展这里直接搜索需要的扩展&#xff0c;点击安装即可。 1.Chinese 中文扩展&#xff0c;就是说虽然咱们懂点英语&#xff0c;但还是中文看着方便 2.Auto Rename Tag 当你重命名一个HTML 标签时&#xff0c;会自动重命名与他配对的HTML 标签 当你选择h4这个标签时&…

如何解决Windows 11黑屏的问题,让电脑“重见光明”

本页介绍了经过测试并证明有效的常见Windows 11黑屏故障的所有修复程序。 本页上的提示和解决方案适用于所有Windows 11设备,从台式电脑和笔记本电脑到微软的Surface二合一设备。 是什么导致Windows 11黑屏死机 在使用Windows 11时,显示器或屏幕明显关闭,通常被称为Window…

YOLOv8 图片目标计数 | 特定目标进行计数

全类别计数特定类别计数如何使用 YOLOv8 进行对象计数 有很多同学留言说想学 YOLOv8 目标计数。那么今天这篇博客,我将教大家如何使用 YOLOv8 进行对象计数。YOLOv8 是一种非常强大的对象检测模型,它可以识别图像中的各种对象。我们将学习如何利用这个模型对特定对象进行计数…

【日常笔记】notepad++ 正则表达式基本用法

一、场景 二、正则表达式--语法 2.1、学习基本的匹配字符&#xff1a; 2.2、学习特殊字符和量词&#xff1a; 2.3、学习转义字符 2.4、学习分组和捕获 2.5、区分大小写 和 匹配整个单词 2.6、引用分组 三、实战 ▶ 希望把课程目录中 -- 前面的都去掉 一、场景 希望把…

如何使用ArcGIS Pro裁剪影像

对影像进行裁剪是一项比较常规的操作&#xff0c;因为到手的影像可能是多种范围&#xff0c;需要根据自己需求进行裁剪&#xff0c;这里为大家介绍一下ArcGIS Pro中裁剪的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的影像和行政区…

Java EE 多线程之 JUC

文章目录 1. Callable 接口2. ReentrantLock3. 信号量4. CountDownLatch JUC这里就是指&#xff08;java.util.concurrent&#xff09; concurrent 就是并发的意思 这个包里的内容&#xff0c;主要就是一些多线程相关的组件 1. Callable 接口 Callable 也是一种创建线程的方式…

Go 与 Rust:现代编程语言的深度对比

在快速发展的软件开发领域中&#xff0c;选择合适的编程语言对项目的成功至关重要。Go 和 Rust 是两种现代编程语言&#xff0c;它们都各自拥有一系列独特的特性和优势。本文旨在深入比较 Go 和 Rust&#xff0c;从不同的角度分析这两种语言&#xff0c;包括性能、语言特性、生…

你好!赫夫曼树【JAVA】

目录 1.简单介绍 2.术语 3.构建思路 4.创建节点类 5.创建赫夫曼树 6.前序遍历 7.小玩一把 1.简单介绍 赫夫曼树&#xff08;Huffman Tree&#xff09;又称最优二叉树&#xff0c;是一种带权路径长度最短的二叉树。它的构建主要用于数据压缩算法中&#xff0c;根据字…

【vue】jenkins打前端包时报错:第 8 行:cd: dist: 没有那个文件或目录

问题描述 jenkins打前端包时报错&#xff1a;第 8 行&#x1f4bf; dist: 没有那个文件或目录 Jenkins中 “Execute shell” 配置的脚本&#xff1a; echo $PATH node -v npm -v npm config set registry http://ued.edtsoft.com/ npm install npm run build:prod cd dist rm…

数据结构(七):树介绍及面试常考算法

一、树介绍 1、定义 树形结构是一种层级式的数据结构&#xff0c;由顶点&#xff08;节点&#xff09;和连接它们的边组成。 树类似于图&#xff0c;但区分树和图的重要特征是树中不存在环路。树有以下特点&#xff1a; &#xff08;1&#xff09;每个节点有零个或多个子节点…

牛客网BC100有序序列合并

思路&#xff1a; 运用归并排序&#xff1a; 假设给定我们两个都是升序的数组&#xff0c;要求我们要把这两个数组以升序的方式合并到一个数组中&#xff0c;则我们就可以在这两个数组中分别各拿取一个元素进行比较&#xff0c;将二者之间较小值先放在这个新数组中&#xff0c…

函数图形渐近线分析

文章目录 曲线的渐近线水平和垂直渐近线斜渐近线斜渐近线公式推导简便方法确定斜渐近线(一次多项式化方法) 例 曲线的渐近线 渐近线综合了极限和函数图形的知识,尤其是斜渐近线 水平和垂直渐近线 若点 M M M沿曲线 y f ( x ) yf(x) yf(x)无限远离原点时,它于某条直线 L L L之…

web应用开发技术的一些概念

一、Servlet 1.Servlet的工作过程&#xff1a; Servelt的工作流程示意图 &#xff08;1&#xff09;客户端发起一个Http请求到服务器&#xff0c;请求特定的资源或者是要执行特定的操作 &#xff08;2&#xff09;服务器在接收到请求后&#xff0c;根据请求相应的URL将请求分发…

2023.12.15 FineBI与kettle

1.结构化就是可以用schema描述的数据,就是结构化数据,能转为二维表格, 如CSV,Excel, 2.半结构化就是部分可以转换为二维表格,如JSON,XML 3.非结构化数据,就是完全无法用二维表格表示的数据,如Word文档,Mp4,图片,等文件. kettle的流程 新建转换-构建流图-配置组件-保存运行 使…

人工智能与星际旅程:技术前沿与未来展望

人工智能与星际旅程&#xff1a;技术前沿与未来展望 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域的应用越来越广泛。在星际旅程领域&#xff0c;AI也发挥着越来越重要的作用。本文将探讨人工智能与星际旅程的结合&#xff0c;以及…

微服务架构之争:Quarkus VS Spring Boot

在容器时代&#xff08;“Docker时代”&#xff09;&#xff0c;无论如何&#xff0c;Java仍然活着。Java在性能方面一直很有名&#xff0c;主要是因为代码和真实机器之间的抽象层&#xff0c;多平台的成本&#xff08;一次编写&#xff0c;随处运行——还记得吗&#xff1f;&a…

word2vec,BERT,GPT相关概念

词嵌入&#xff08;Word Embeddings&#xff09; 词嵌入通常是针对单个词元&#xff08;如单词、字符或子词&#xff09;的。然而&#xff0c;OpenAI 使用的是预训练的 Transformer 模型&#xff08;如 GPT 和 BERT&#xff09;&#xff0c;这些模型不仅可以为单个词元生成嵌入…

数据库02-04 中级SQL

01.on关键字&#xff1a; 主要用join…on来用多关系查询&#xff0c;和where关键字的相同 student关系&#xff1a; takes关系&#xff1a; 02.一般外连接 自然连接&#xff1a; 这个外连接&#xff08;自然连接&#xff09;会缺少空值的元祖&#xff08;本例子中的stude…

python 小程序学生选课系统源码

开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 学生&#xff1a; 登录&#xff0c;选课&#xff08;查看课程及选择&#xff09;&#xff0c;我的成绩&#xff0c;…