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.pswp.cn/diannao/44982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44982.shtml
英文地址,請注明出處:http://en.pswp.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 &…