LiteOS 多线程编程

​
鸿蒙系统的多线程编程步骤:
1. 描述要创建的线程的属性配置. attr: attributeosThreadAttr_t attr;//声明一个线程属性变量memset(&attr, 0, sizeof(attr));//memset改变一个内存单元上存的值为0//以下三个为必须设置的线程属性attr.name = "ledThread"; //设置线程名称attr.stack_size = 1024; //设置栈大小。 栈就是程序执行时用于给局部变量分配空间的内存区域attr.priority = osPriorityAboveNormal;//线程优先级别2. 定义线程要执行的函数void threadLed(void *arg) {...}3. 创建线程,指定线程要执行的函数,执行函数时传递的参数,线程属性成功创建会得到一个线程IDosThreadId_t threadID = osThreadNew(threadLed, NULL, &attr);    4. 通过线程ID可回收线程资源,结束线程执行osThreadTerminate(threadID); // 结束线程执行osThreadJoin(threadID);   // 回收线程资源​

实践:创建3个线程,每个线程循环定时控制一个IO口的高低电平状态:


#include <stdio.h>
#include <ohos_init.h> 
#include <hi_io.h>
#include <iot_gpio.h>
#include <iot_errno.h>
#include <unistd.h>
#include <cmsis_os2.h>#define LED_IO    HI_IO_NAME_GPIO_2
#define LED_FUNC  HI_IO_FUNC_GPIO_2_GPIO#define BUZZER_IO    HI_IO_NAME_GPIO_5
#define BUZZER_FUNC  HI_IO_FUNC_GPIO_5_GPIOstruct MyThreadArg {char *threadName;//线程名 int io;//IO口int ioFunc;//IO口功能int interval;//延时时间us
};struct MyThreadArg threadArgs[] = {{"ledThread", LED_IO, LED_FUNC, 1000000},{"buzzerThread", BUZZER_IO, BUZZER_FUNC, 2000},{"buzzer2Thread", HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_GPIO, 2000},
};void threadFunc(void *arg) 
{struct MyThreadArg *threadArg = (struct MyThreadArg *)arg;if (IOT_SUCCESS != IoTGpioInit(threadArg->io)){printf("led io init failed\n");return;}hi_io_set_func(threadArg->io, threadArg->ioFunc);IoTGpioSetDir(threadArg->io, IOT_GPIO_DIR_OUT);while (1){IoTGpioSetOutputVal(threadArg->io, 1);usleep(threadArg->interval);IoTGpioSetOutputVal(threadArg->io, 0);usleep(threadArg->interval);        }
}void createMyThread(struct MyThreadArg *threadArg)
{osThreadAttr_t attr;//声明一个线程属性变量memset(&attr, 0, sizeof(attr));//memset改变一个内存单元上存的值attr.name = threadArg->threadName;attr.stack_size = 1024; //设置栈大小。 栈就是程序执行时用于给局部变量分配空间的内存区域attr.priority = osPriorityAboveNormal;//线程优先级别osThreadId_t threadID = osThreadNew(threadFunc, threadArg, &attr);
}void myhello_test()
{int i;printf("myhello test\n");for (i = 0; i < hi_array_size(threadArgs); i++)createMyThread(&threadArgs[i]);
}SYS_RUN(myhello_test);

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

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

相关文章

全球高端销量第一 凯迪仕智能锁建博会获重磅大奖再次遥遥领先

2024年7月11日&#xff0c;第26届中国广州建博会圆满落幕。Kaadas凯迪仕第11年受邀参展&#xff0c;凭借超吸睛的赛博风展馆和重磅旗舰传奇大师K70系列智能锁震撼亮相&#xff0c;吸引抖音网红云集打卡直播以及众多主流及行业媒体聚集报道。在大家居建装行业全球第一展的舞台上…

问题清除指南|Dell OptiPlex 7070 升级 win11 开启 TPM 2.0 教程

前言&#xff1a;最近想把实验室台式机的系统从 Windows 10 升级到 Windows 11&#xff0c;遇到一点小问题&#xff0c;在此记录一下解决办法。 ⚠️ 注&#xff1a;本教程仅在 Dell OptiPlex 7070 台式机系统中测试有效&#xff0c;并不保证其余型号机器适用此教程。 参考链接…

中国科学院地理所牛书丽团队《Global Change Biology 》最新成果!

本文首发于“生态学者”微信公众号&#xff01; 在全球气候变化的背景下&#xff0c;干旱地区的扩张对生态系统的氮循环产生了深远影响。氮同位素&#xff08;δ15N&#xff09;的天然丰度&#xff0c;尤其是土壤中的δ15N&#xff0c;是评估陆地生态系统氮循环动态和氮限制的关…

【ARMv8/v9 GIC 系列 1.7 -- GIC PPI | SPI | SGI | LPI 中断使能配置概述】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 GIC 各种中断使能配置PPIs(每个处理器私有中断)SPIs(共享外设中断)SGIs(软件生成的中断)LPIs(局部中断)GIC 各种中断使能配置 在ARM GICv3和GICv4架构中,不同类型的中断(如PPIs、SPIs、SGIs和LPIs)可以通过不同的方式进…

分享:2024好的ai文章生成器下载资源 tzqsbic

在当今数字化的时代&#xff0c;ai技术的发展日新月异&#xff0c;为我们的生活和工作带来了诸多便利。其中&#xff0c;ai文章生成器作为一项创新的工具&#xff0c;给当代人们带来了很多好处&#xff0c;尤其是对于很多创作者&#xff0c;不仅能解决创作困难&#xff0c;而且…

【开发工具】webStrom2024版-永久使用

1、解压文件 2、安装步骤 先执行unistall-current-user.vbs&#xff0c;确保当前环境变量下没有历史使用记录。再执行install-current-user.vbs。运行的时候&#xff0c;会有第一个弹窗&#xff0c;点击确定&#xff0c;稍微等待一会&#xff0c;会出现 Done 的弹窗&#xff0…

【Linux】进程间通信之System V共享内存

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

Prometheus+Grafana监控Linux主机

1、安装Prometheus 1.1 、下载Prometheus 下载网址 https://github.com/prometheus/prometheus/releases选择需要的版本 wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz1.2、安装Prometheus软件 1.2.1、…

解决鸿蒙开发中克隆项目无法签名问题

文章目录 问题描述问题分析解决方案 问题描述 在一个风和日丽的早晨&#xff0c;这是我学习鸿蒙开发的第四天&#xff0c;把文档过了一遍的我准备看看别人的项目学习一下&#xff0c;于是就用git去clone了一个大佬的开源项目&#xff0c;在签名的时候遇到了问题&#xff1a; h…

在攻防演练中遇到的一个“有马蜂的蜜罐”

在攻防演练中遇到的一个“有马蜂的蜜罐” 有趣的结论&#xff0c;请一路看到文章结尾 在前几天的攻防演练中&#xff0c;我跟队友的气氛氛围都很好&#xff0c;有说有笑&#xff0c;恐怕也是全场话最多、笑最多的队伍了。 也是因为我们遇到了许多相当有趣的事情&#xff0c;其…

Spring JDBC 具名参数用法

Spring JDBC中具名参数的用法 maven引入Spring jdbc <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.19</version></dependency> 在Spring配置中配置 <!-…

【leetcode】滑动窗口专题

文章目录 1.长度最小的子数组2.无重复字符的最长子串3.最大连续1的个数III4.将x减小到0的最小操作数5.水果成篮6.找到字符串中所有字母异位词7.串联所有单词的子串8.最小覆盖子串 1.长度最小的子数组 leetcode 209.长度最小的子数组 看到这个题目&#xff0c;第一眼肯定想到的…

正则表达式控制everything等搜索工具更快速的对需要的内容进行检索

正则表达式对文件搜索工具规则 表格模式 匹配模式描述abgr(ale)y匹配 “gray” 或 “grey”.匹配除换行符之外的任意单个字符[abc]匹配字符 “a”、“b” 或 “c” 中的任意一个[^abc]匹配除了 “a”、“b”、“c” 之外的任意单个字符[a-z]匹配小写字母 a 到 z 之间的任意一…

科普文:深入理解Mybatis

概叙 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 优点…

Vue3 + Echarts堆叠折线图的tooltip不显示问题

问题介绍 使用Echarts在Vue3Vite项目中绘制堆叠折线图的的时候&#xff0c;tooltip总是不显示&#xff0c;经过很长时间的排查和修改&#xff0c;最后发现是在使用上有错误导致的。 错误图片展示 问题原因 由于Vue3底层使用proxy代理创建示例&#xff0c;使用其创建出来的实…

RDD 专项练习

RDD 专项练习 现有分数信息文件 scores.txt 班级ID 姓名 年龄 性别 科目 成绩 12 张三 25 男 chinese 50 12 张三 25 男 math 60 12 张三 25 男 english 70 12 李四 20 男 chinese 50 12 李四 20 男 math 50 12 李四 20 男 english 50 12 王芳 19 女 chinese 70 12 王芳 19 女…

FPGA-Verilog-Vivado-软件使用

这里写目录标题 1 软件配置2 FPGA-7000使用2.1 运行启动方式 1 软件配置 编辑器绑定为Vscode&#xff0c;粘贴VS code运行文件的目录&#xff0c;后缀参数保持不变&#xff1a; 如&#xff1a; D:/Users/xdwu/AppData/Local/Programs/Microsoft VS Code/Code.exe [file name]…

从技术到管理:你必须知道的七个转变

在职业生涯的道路上&#xff0c;很多技术骨干会逐步转向管理岗位。这不仅是职位的晋升&#xff0c;更是角色、思维和能力的全方位转变。以下是七个关键的转变&#xff0c;帮助技术人员顺利完成这一跨越。 一、从个人贡献者到团队领导者的转变 在技术岗位上&#xff0c;成功往…

(19)夹钳(用于送货)

文章目录 前言 1 常见的抓手参数 2 参数说明 前言 Copter 支持许多不同的抓取器&#xff0c;这对送货应用和落瓶很有用。 按照下面的链接&#xff08;或侧边栏&#xff09;&#xff0c;根据你的设置了解配置信息。 Electro Permanent Magnet v3 (EPMv3)Electro Permanent M…

bug记录 qInstallMessageHandler的使用

QT (纯C)项目 ‘Qxxx‘ file not found 和 编译报错问题(已解决)_qt头文件file not found-CSDN博客 qInstallMessageHandler&#xff08;指针函数参数&#xff09; 需要静态指针&#xff0c;这个函数 #include <iostream> #include "singleton.h" #include &…