当前位置: 首页 > news >正文

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

说到鸿蒙我们都会想到华为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/镜像/

总结

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

相关文章:

  • jetpack compose 学习(2)
  • Linux操作系统:开源的计算机革命
  • Ray RLlib User Guides:模型,处理器和动作分布
  • Java之方法引用
  • MySQL事务与MVCC详解
  • LeetCode Hot100 25.K个一组翻转链表
  • AI日报:麻省理工学院专家呼吁扩大人工智能治理和监管
  • Verilog Systemverilog define宏定义
  • web前端之中文输入法导致的高频事件、addEventListener、compositionstart、compositionend
  • HPM6750系列--第九篇 GPIO详解(基本操作)
  • Github与Gitlab
  • CentOS 7 部署 dnsmasq
  • jpa 修改信息拦截
  • 信息学奥赛一本通 第二章 顺序结构程序设计 第一、二节C语言非C++
  • 【网络编程】-- 04 UDP
  • JavaScript中的对象个人分享
  • JAVA并发编程--1.基础概念
  • JSONP原理
  • js面向对象
  • leetcode46 Permutation 排列组合
  • NSTimer学习笔记
  • Redis的resp协议
  • Vue.js源码(2):初探List Rendering
  • 马上搞懂 GeoJSON
  • 项目实战-Api的解决方案
  • 一份游戏开发学习路线
  • 移动端唤起键盘时取消position:fixed定位
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # C++之functional库用法整理
  • #include<初见C语言之指针(5)>
  • (AngularJS)Angular 控制器之间通信初探
  • (C++17) std算法之执行策略 execution
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (一)插入排序
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • .md即markdown文件的基本常用编写语法
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net 提取注释生成API文档 帮助文档
  • .Net中的设计模式——Factory Method模式
  • :=
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @JSONField或@JsonProperty注解使用
  • @SuppressWarnings注解
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [BT]BUUCTF刷题第8天(3.26)
  • [BUUCTF 2018]Online Tool
  • [Hive] 常见函数
  • [HTML API]HTMLCollection
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
  • [IE编程] IE 是如何决定Accept-Language 属性的