版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章鴻蒙系統(tǒng)應(yīng)用開發(fā)基礎(chǔ)本章主要講述鴻蒙系統(tǒng)應(yīng)用開發(fā)基礎(chǔ)知識(shí)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)的開發(fā)基礎(chǔ)知識(shí)。通過本節(jié)學(xué)習(xí)可以:了解物聯(lián)網(wǎng)系統(tǒng)了解Hi3861芯片了解OpenHarmony鴻蒙系統(tǒng)物聯(lián)網(wǎng)系統(tǒng)概述華為海思Hi3861芯片概述鴻蒙系統(tǒng)概述物聯(lián)網(wǎng)系統(tǒng)概述物聯(lián)網(wǎng)(InternetofThings,IoT):把所有物品通過信息傳感器與互聯(lián)網(wǎng)連接起來,實(shí)現(xiàn)智能化識(shí)別和管理的萬物互聯(lián)網(wǎng)絡(luò)。物聯(lián)網(wǎng)系統(tǒng)概述物聯(lián)網(wǎng)應(yīng)用領(lǐng)域智能家居物聯(lián)網(wǎng)技術(shù)驅(qū)動(dòng)家用電器智能化,通過各類智能設(shè)備實(shí)現(xiàn)遠(yuǎn)程控制,提升家居舒適度和生活便利性。健康管理通過物聯(lián)網(wǎng)技術(shù),智能設(shè)備實(shí)時(shí)監(jiān)測(cè)健康指標(biāo),提供專業(yè)運(yùn)動(dòng)建議和疾病防治方案,助力科學(xué)健身和疾病預(yù)防。智慧城市助力城市交通、環(huán)境監(jiān)測(cè)、市政管理智能化,實(shí)現(xiàn)節(jié)能減排,提升城市可持續(xù)發(fā)展能力,改善市民生活質(zhì)量。產(chǎn)業(yè)促進(jìn)5G技術(shù)為車聯(lián)網(wǎng)提供了更高速、更可靠的網(wǎng)絡(luò)連接;同時(shí)人工智能、大數(shù)據(jù)、云計(jì)算等技術(shù)的深度融合。計(jì)算機(jī)系統(tǒng)硬件架構(gòu)基本上是由CPU、
內(nèi)存、外存、輸入設(shè)備和輸出設(shè)備等五個(gè)部件組成計(jì)算機(jī)系統(tǒng)嵌入式系統(tǒng)是以計(jì)算機(jī)系統(tǒng)技術(shù)為中心,綜合考慮產(chǎn)品需求、成本、功耗、可靠性等特性,而定制軟硬件資源的計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)PC-計(jì)算機(jī)系統(tǒng)手機(jī)-計(jì)算機(jī)系統(tǒng)物聯(lián)網(wǎng)系統(tǒng)是以嵌入式系統(tǒng)為基礎(chǔ),加入各種傳感器與聯(lián)網(wǎng)設(shè)備構(gòu)造而成。物聯(lián)網(wǎng)系統(tǒng)9物聯(lián)網(wǎng)系統(tǒng)概述華為海思Hi3861芯片概述鴻蒙系統(tǒng)概述Hi3861是華為海思基于開源的RISC-VCPU架構(gòu)推出集成Wi-Fi網(wǎng)絡(luò)的物聯(lián)網(wǎng)低功耗主控芯片Hi3861芯片概述123456智能照明環(huán)境監(jiān)測(cè)智慧城市智能家電智能門鎖智能安防Hi3861產(chǎn)品應(yīng)用
CPU:32bit高性能CPU,最大工作頻率160MHz
內(nèi)存:內(nèi)置SRAM352KB
外存:內(nèi)存ROM288KB與2MBFlash
輸入/輸出設(shè)備接口:1個(gè)SDIOSlave接口、2個(gè)SPI接口、2個(gè)I2C接口、3個(gè)UART接
口、15個(gè)GPIO接口、7路ADC輸入、6路PWM、1個(gè)I2S接口
內(nèi)置Wi-Fi:2.4GHz頻段、支持IEEE802.11b/g/n、支持加密WFAWPA/WPA2personal/WPS2.0協(xié)議、支持最大速率72.2MbpsHi3861功能特性Hi3861開發(fā)板(1/3)除Hi3861主控芯片電路外,還提供了LED、按鍵、觸摸LCD屏接口、type-c的USB轉(zhuǎn)UART接口等。Hi3861開發(fā)板(2/3)核心板原理圖Hi3861開發(fā)板(3/3)LED和按鍵的電路原理圖物聯(lián)網(wǎng)系統(tǒng)概述華為海思Hi3861芯片概述鴻蒙系統(tǒng)概述OpenHarmony是華為向開放原子開源基金會(huì)捐贈(zèng)的一整套開源操作系統(tǒng)項(xiàng)目,它是鴻蒙操作系統(tǒng)的基礎(chǔ)版本,提供了一個(gè)完整的、基于微內(nèi)核的分布式操作系統(tǒng)框架,具有多種操作系統(tǒng)內(nèi)核、多種網(wǎng)絡(luò)協(xié)議、圖形界面框架及文件系統(tǒng)等功能模塊。鴻蒙系統(tǒng)概述鴻蒙系統(tǒng)架構(gòu)18鴻蒙系統(tǒng)類型LiteOS-M內(nèi)核鴻蒙系統(tǒng)架構(gòu)LiteOS-A內(nèi)核鴻蒙系統(tǒng)架構(gòu)Linux內(nèi)核鴻蒙系統(tǒng)架構(gòu)請(qǐng)簡(jiǎn)述物聯(lián)網(wǎng)系統(tǒng)與嵌入式系統(tǒng)的關(guān)系。請(qǐng)簡(jiǎn)述OpenHarmony系統(tǒng)的三種類型。
描述了計(jì)算機(jī)系統(tǒng)、嵌入式系統(tǒng)、物聯(lián)網(wǎng)系統(tǒng)間的關(guān)系。講述了Hi3861芯片的功能特性。講述了OpenHarmony鴻蒙系統(tǒng)的三種類型。謝謝25鴻蒙系統(tǒng)設(shè)備開發(fā)基礎(chǔ)本章主要講述鴻蒙設(shè)備開發(fā)環(huán)境的搭建。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)設(shè)備開發(fā)環(huán)境的搭建。通過本節(jié)學(xué)習(xí)可以熟悉:VSCode的安裝devicetool鴻蒙插件安裝設(shè)備開發(fā)的SDK下載設(shè)備開發(fā)所需的工具集下載和UART接口驅(qū)動(dòng)安裝VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅(qū)動(dòng)安裝VSCode安裝(1/3)VisualStudioCode(VSCode)是一款功能強(qiáng)大的、免費(fèi)開源的源代碼編輯軟件,它支持所有主流的開發(fā)語(yǔ)言,并在集成的插件市場(chǎng)上提供各種功能插件。鴻蒙系統(tǒng)利用VSCode的插件機(jī)制,實(shí)現(xiàn)了設(shè)備開發(fā)流程的全面支持。在VSCode官網(wǎng)下載Windows系統(tǒng)版本軟件VSCode安裝(2/3)下載完成后執(zhí)行VSCodeUserSetup-x64-1.92.0.exe后,根據(jù)向?qū)褂媚J(rèn)設(shè)置逐步完成安裝操作。安裝步驟完成后,啟動(dòng)VSCode,安裝必要的設(shè)備開發(fā)插件VSCode安裝(3/3)“C/C++”插件用于實(shí)現(xiàn)VSCode對(duì)鴻蒙系統(tǒng)C語(yǔ)言源文件的支持?!癎N”插件用于實(shí)現(xiàn)VSCode對(duì)鴻蒙系統(tǒng)的*.gn編譯配置文件的支持?!癐ncludeAutoComplete”插件實(shí)現(xiàn)源程序頭文件名的自動(dòng)補(bǔ)全。VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅(qū)動(dòng)安裝devicetool鴻蒙插件安裝(1/2)在鴻蒙系統(tǒng)官網(wǎng)下載Windows系統(tǒng)版本后得到“devicetool-windows-tool-00.zip”壓縮包。解壓壓縮包后,運(yùn)行“devicetool-windows-tool-00.exe”安裝程序。devicetool鴻蒙插件安裝(2/2)鴻蒙設(shè)備開發(fā)的VSCode插件完成安裝后,在VSCode的插件列表中顯示出相關(guān)的插件并在窗口左側(cè)新增了一個(gè)“DevEco”頁(yè)框按鈕VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅(qū)動(dòng)安裝SDK下載安裝完Git程序后,
在命令行窗口執(zhí)行命令:gitclone/HiSpark/hi3861_hdu_iot_application下載完成后,得到的適配Hi3861的鴻蒙系統(tǒng)工程源碼VSCode的安裝devicetool鴻蒙插件安裝SDK下載工具集下載和UART接口驅(qū)動(dòng)安裝工具集下載鴻蒙設(shè)備開發(fā)所需的編譯器等相關(guān)的工具在華為官網(wǎng)的下載地址:/DevTools_Hi3861V100_v1.0.zip下載并解壓縮開發(fā)工具包后,放在較淺層次的目錄中且重命名文件夾UART驅(qū)動(dòng)安裝執(zhí)行“D:\development\Hi3861\hi3861-tools\usb_serial_driver\CH341SER.EXE”完成驅(qū)動(dòng)安裝。安裝完成并通過數(shù)據(jù)線連接開發(fā)板與PC機(jī)后,在系統(tǒng)的設(shè)備管理器即可查看到對(duì)應(yīng)的COM口請(qǐng)簡(jiǎn)述devicetool與VSCode的關(guān)系。
講述了VSCode的安裝。講述了devicetool插件的安裝。講述了設(shè)備開發(fā)的SDK下載。講述了設(shè)備開發(fā)的工具集下載。講述了開發(fā)板UART接口的驅(qū)動(dòng)安裝。本章主要講述Hi3861工程源碼開發(fā)基礎(chǔ)。通過學(xué)習(xí)本節(jié)將能夠?qū)W習(xí)Hi3861工程源碼開發(fā)基礎(chǔ)。通過本節(jié)學(xué)習(xí)可以熟悉:工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程源碼導(dǎo)入(1/3)工程源碼導(dǎo)入(2/3)在首次導(dǎo)入工程源碼時(shí)會(huì)彈出設(shè)置窗口,設(shè)置源碼工程所用的主控芯片為HI3861即可,其他兩項(xiàng)設(shè)置會(huì)自動(dòng)適配。工程源碼導(dǎo)入(3/3)工程具體源文件目錄與用途工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程配置工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程源碼編譯點(diǎn)擊“Build”或“Rebuild”按鈕進(jìn)行編譯。Rebuild會(huì)清除所有已編譯文件并重新編譯,適用于新增或刪除工程源文件時(shí);使用Build,它只會(huì)更新這些修改過的文件。工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程程序燒錄點(diǎn)擊“Upload”待TERMINAL窗口上輸出提示后,則按開發(fā)板的RESET鍵后啟動(dòng)通過UART接口傳輸并燒錄程序文件。工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程程序調(diào)試點(diǎn)擊“Monitor”以啟動(dòng)UART接收功能,此時(shí)開發(fā)板會(huì)通過UART接口返回相關(guān)信息。工程源碼導(dǎo)入工程配置工程源碼編譯工程程序燒錄工程程序調(diào)試工程加入程序代碼工程加入程序代碼在VSCode源文件瀏覽器上選中“app”文件夾后,右鍵菜單選擇“NewFolder...”創(chuàng)建myhello子目錄,并通過“NewFile...”右鍵菜單創(chuàng)建myhello_demo.c源文件工程加入程序代碼Myhello_demo.c輸入代碼:#include<stdio.h>
//提供printf函數(shù)#include<ohos_init.h>//提供SYS_RUN/APP_FEATURE_INIT宏定義voidmyhelloInit()//自定義的入口函數(shù){
printf("myhelloinit\n");}//指定在鴻蒙系統(tǒng)的應(yīng)用層執(zhí)行入口函數(shù)APP_FEATURE_INIT(myhelloInit);
//指定在鴻蒙系統(tǒng)的系統(tǒng)服務(wù)層執(zhí)行入口函數(shù)//SYS_RUN(myhelloInit);工程加入程序代碼在myhello目錄下創(chuàng)建BUILD.gn文件,并輸入內(nèi)容:#指定編譯目標(biāo)名為myhello_test,生成靜態(tài)庫(kù)libmyhello_test.astatic_library("myhello_test"){#指定程序是由哪些源文件組成,當(dāng)多個(gè)源文件時(shí)由","分隔sources=["myhello_demo.c"]#指定頭文件所在路徑include_dirs=["http://utils/native/lite/include",]}工程加入程序代碼修改app目錄下BUILD.gn文件內(nèi)容:import("http://build/lite/config/component/lite_component.gni")lite_component("app"){features=[#"startup",#注釋不參與編譯的程序#格式:"子目錄名:子目錄BUILD.gn中定義的目標(biāo)名""myhello:myhello_test"]}工程加入程序代碼Build編譯工程時(shí)在終端輸出:將程序燒錄至開發(fā)板后,執(zhí)行Monitor程序并重啟開發(fā)板,隨后即可在終端中查看到“myhelloinit”的輸出信息。請(qǐng)簡(jiǎn)述開發(fā)板USB線的作用。
講述了工程源碼導(dǎo)入操作。講述了工程的配置。講述了工程源碼的編譯。講述了工程程序燒錄方法。講述了工程程序調(diào)試方法。講述了工程中加入程序代碼的方法本章主要講述鴻蒙設(shè)備GPIO應(yīng)用開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)設(shè)備GPIO應(yīng)用開發(fā)。通過本節(jié)學(xué)習(xí)可以熟悉:華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理華為海思的GPIO操作函數(shù)(1/7)
GPIO(GeneralPurposeInput/Output,通用輸入輸出口)主要作為輸入或輸出功能使用,當(dāng)需要用代碼主動(dòng)控制GPIO輸出高低電平時(shí),GPIO應(yīng)當(dāng)設(shè)置輸出功能;當(dāng)需要通過GPIO獲取連接設(shè)備輸出的高低電平時(shí),GPIO應(yīng)當(dāng)設(shè)置輸入功能。Hi3861芯片手冊(cè)中GPIO_03GPIO的用途選擇寄存器:華為海思的GPIO操作函數(shù)(2/7)LED連接到GPIO_02引腳,GPIO_02應(yīng)當(dāng)被配置為輸出功能。當(dāng)GPIO_02引腳輸出高電平時(shí),LED亮;而當(dāng)GPIO_02輸出低電平時(shí),LED熄。華為海思的GPIO操作函數(shù)(3/7)Hi3861共有15個(gè)多功能的GPIO,在鴻蒙工程中的hi_io.h頭文件,芯片廠家已定義好表示每個(gè)GPIO的枚舉常量:typedefenum{HI_IO_NAME_GPIO_0,//表示GPIO0...HI_IO_NAME_GPIO_14,//表示GPIO14...}hi_io_name;由此可見,HI_IO_NAME_GPIO_2對(duì)應(yīng)著GPIO_02引腳。華為海思的GPIO操作函數(shù)(4/7)
在hi_io.h頭文件中,也定義一系列的枚舉常量描述每個(gè)GPIO可選擇使用的功能,例如GPIO_02的功能描述為:typedefenum{
HI_IO_FUNC_GPIO_2_GPIO,
//該引腳可作為通用GPIO,用于連接輸入輸出高低電平的設(shè)備。
HI_IO_FUNC_GPIO_2_UART1_RTS_N=2,
//該引腳可作為第1個(gè)UART控制器的硬件流控功能引腳。
HI_IO_FUNC_GPIO_2_SPI1_TXD,
//作為第1個(gè)SPI控制器的數(shù)據(jù)發(fā)送引腳
HI_IO_FUNC_GPIO_2_JTAG_TRSTN,
//作為連接JTAG調(diào)試器的功能引腳
HI_IO_FUNC_GPIO_2_PWM2_OUT,
//作為第2個(gè)PWM控制器信號(hào)輸出引腳
HI_IO_FUNC_GPIO_2_SSI_CLK=7,
//作為SSI控制器的時(shí)鐘輸出引腳}hi_io_func_gpio_2;華為海思的GPIO操作函數(shù)(5/7)Hi3861的每個(gè)GPIO都是多用途功能的,但某一時(shí)刻只能選擇其中一種功能。同時(shí)在hi_io.h頭文件中提供了設(shè)置GPIO用途的函數(shù):
hi_u32hi_io_set_func(hi_io_nameid,hi_u8val);用法:由于GPIO_2僅需通過輸出高低電平即可實(shí)現(xiàn)控制LED的亮滅,因此應(yīng)將GPIO_02引腳配置為GPIO引腳用途,相應(yīng)的設(shè)置代碼如下:
hi_io_set_func(HI_IO_NAME_GPIO_2,HI_IO_FUNC_GPIO_2_GPIO);若要使GPIO默認(rèn)保持高低電平狀態(tài),可以配置GPIO的上下拉功能,該功能由hi_io.h頭文件中的配置函數(shù)提供:
hi_u32hi_io_set_pull(hi_io_nameid,hi_io_pullval);用法:如設(shè)置GPIO_02引腳默認(rèn)處于高電平狀態(tài),則設(shè)置上拉的代碼應(yīng)當(dāng)如下:hi_io_set_pull(HI_IO_NAME_GPIO_2,HI_IO_PULL_UP);華為海思的GPIO操作函數(shù)(6/7)typedefenum{HI_GPIO_IDX_0,//表示GPIO0...HI_GPIO_IDX_14,//表示GPIO14}hi_gpio_idx;與hi_io.h中GPIO的枚舉常量相對(duì)應(yīng),也可以直接使用hi_io.h中的常量用于設(shè)置id對(duì)應(yīng)的GPIO選擇dir值指定的輸入或輸出功能,注意IO須設(shè)置GPIO用途。hi_u32hi_gpio_set_dir(hi_gpio_idxid,hi_gpio_dirdir);typedefenum{HI_GPIO_DIR_IN=0,//表示輸入
HI_GPIO_DIR_OUT//表示輸出
}hi_gpio_dir;
表示輸入與輸出功能的枚舉類型華為海思的GPIO操作函數(shù)(7/7)設(shè)置id對(duì)應(yīng)的GPIO輸出val值指定的高或低電平,注意GPIO須設(shè)置輸出功能hi_u32hi_gpio_set_ouput_val(hi_gpio_idxid,hi_gpio_valueval);typedefenum{HI_GPIO_VALUE0=0,//表示低電平HI_GPIO_VALUE1//表示高電平}hi_gpio_value;表示GPIO電平狀態(tài)的枚舉類型獲取id對(duì)應(yīng)的GPIO輸出電平狀態(tài),val參數(shù)為一個(gè)hi_gpio_value變量的地址,用于存放電平狀態(tài)值hi_u32hi_gpio_get_output_val(hi_gpio_idxid,hi_gpio_value*val);獲取id對(duì)應(yīng)的GPIO輸入電平狀態(tài),val參數(shù)為hi_gpio_value類型變量的地址,用于存放獲取的電平狀態(tài)hi_u32hi_gpio_get_input_val(hi_gpio_idxid,hi_gpio_value*val)華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理鴻蒙系統(tǒng)的GPIO操作函數(shù)(1/2)
鴻蒙系統(tǒng)在iot_gpio.h頭文件中提供了大量以IoT開頭命名的通用操作函數(shù)申請(qǐng)并標(biāo)記使用id對(duì)應(yīng)的GPIO,在多人協(xié)同開發(fā)中避免重復(fù)使用同一個(gè)IOunsignedintIoTGpioInit(unsignedintid);申請(qǐng)成功返回IOT_SUCCESS(值0),失敗返回IOT_FAILURE
設(shè)置指定id對(duì)應(yīng)的GPIO功能,dir指定的輸入或輸出功能unsignedintIoTGpioSetDir(unsignedintid,IotGpioDirdir);typedefenum{
IOT_GPIO_DIR_IN=0,
//表示輸入
IOT_GPIO_DIR_OUT
//表示輸出}IotGpioDir;輸入輸出類型鴻蒙系統(tǒng)的GPIO操作函數(shù)(2/2)
typedefenum{IOT_GPIO_VALUE0=0,//表示低電平IOT_GPIO_VALUE1//表示高電平}IotGpioValue;
在IoT函數(shù)中表示GPIO電平狀態(tài)的枚舉類型設(shè)置id對(duì)應(yīng)的GPIO輸出val指定的高低電平unsignedintIoTGpioSetOutputVal(unsignedintid,IotGpioValueval);獲取id對(duì)應(yīng)的GPIO輸出電平狀態(tài),并將輸出的電平值存入val指向的變量unsignedintIoTGpioGetOutputVal(unsignedintid,IotGpioValue*val);獲取id對(duì)應(yīng)的GPIO輸入電平狀態(tài),并將獲取的電平值存入val指向的變量unsignedintIoTGpioGetInputVal(unsignedintid,IotGpioValue*val);華為海思的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO操作函數(shù)鴻蒙系統(tǒng)的GPIO中斷處理鴻蒙系統(tǒng)的GPIO中斷處理(1/2)
只要GPIO的電平狀態(tài)符合設(shè)定的中斷觸發(fā)條件,
系統(tǒng)就會(huì)暫停當(dāng)前工作而執(zhí)行GPIO中斷處理函數(shù),中斷處理函數(shù)執(zhí)行完成后,系統(tǒng)會(huì)恢復(fù)之前的工作。Hi3861的GPIO共有4種中斷觸發(fā)條件,可設(shè)置GPIO電平在高電平、低電平、下降沿(從高電平變成低電平的過程)與上升沿(從低電平變成高電平的過程)狀態(tài)時(shí)觸發(fā)中斷。鴻蒙系統(tǒng)的GPIO中斷處理(2/2)
在iot_gpio.h中提供的IoTGpioRegisterIsrFunc函數(shù)注冊(cè)并設(shè)定GPIO的中斷觸發(fā)條件、中斷處理函數(shù)等。unsignedintIoTGpioRegisterIsrFunc(unsignedintid,IotGpioIntTypeintType,IotGpioIntPolarityintPolarity,GpioIsrCallbackFuncfunc,char*arg);參數(shù)列表:id:用于指定GPIOintType:指定中斷類型
值IOT_INT_TYPE_LEVEL表示電平(高/低電平)觸發(fā)中斷
值IOT_INT_TYPE_EDGE表示邊沿(上升/下降沿)觸發(fā)中斷intPolarity:指定中斷觸發(fā)的電平狀態(tài)
值IOT_GPIO_EDGE_FALL_LEVEL_LOW表示低電平或下降沿狀態(tài)觸發(fā)中斷,具體由intType中斷類型指定
值IOT_GPIO_EDGE_RISE_LEVEL_HIGH表示高電平或上升沿狀態(tài)觸發(fā)中斷func:指定IO中斷處理函數(shù),函數(shù)原型:voidirqFunc(char*arg)arg:指定IO中斷處理函數(shù)的arg參數(shù)返回值:成功返回IOT_SUCCESS,失敗返回IOT_FAILURE請(qǐng)簡(jiǎn)述對(duì)于GPIO操作函數(shù),使用hixxx與IoTxxx的區(qū)別是什么?
講述了華為海思的GPIO操作函數(shù)。講述了鴻蒙系統(tǒng)的GPIO操作函數(shù)。講述了鴻蒙系統(tǒng)的GPIO中斷處理。本章主要講述鴻蒙系統(tǒng)PWM應(yīng)用開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)PWM應(yīng)用開發(fā)。通過本節(jié)學(xué)習(xí)可以熟悉:PWM工作原理鴻蒙系統(tǒng)PWM函數(shù)蜂鳴器的PWM驅(qū)動(dòng)PWM信號(hào)原理鴻蒙系統(tǒng)PWM函數(shù)PWM應(yīng)用案例PWM信號(hào)原理(1/3)PWM(PulseWidthModulation,脈沖寬度調(diào)制)基本上就是在一個(gè)重復(fù)的信號(hào)周期內(nèi)分別控制高低電平的持續(xù)時(shí)間PWM信號(hào)原理(2/3)信號(hào)周期:是指從一個(gè)上升沿到下一個(gè)上升沿信號(hào)(或從下降沿到下一個(gè)下降沿)的間隔時(shí)間。信號(hào)頻率:是指在一秒鐘內(nèi)有多少個(gè)PWM的信號(hào)周期,如100Hz表示一秒鐘內(nèi)有100個(gè)信號(hào)周期,則每個(gè)信號(hào)周期時(shí)間為10毫秒,同樣根據(jù)信號(hào)周期時(shí)間也可推算出頻率。占空比:是指在一個(gè)信號(hào)周期中,表示有效電平(通常是高電平)在整個(gè)周期時(shí)間中的比例,如信號(hào)周期時(shí)間為100毫秒而高電平持續(xù)時(shí)間為10毫秒,則占空比為10%。PWM信號(hào)三要素:PWM信號(hào)原理(3/3)PWM調(diào)節(jié)LCD屏背光:PWM信號(hào)原理鴻蒙系統(tǒng)PWM函數(shù)PWM應(yīng)用案例鴻蒙系統(tǒng)PWM函數(shù)(1/3)Hi3861芯片提供了6個(gè)PWM控制器,Hi3861芯片每個(gè)IO都可以作為PWM控制器的信號(hào)輸出引腳,IO具體所屬的PWM控制可以在鴻蒙工程中的hi_io.h頭文件中查看相應(yīng)的定義,如GPIO_03的用途定義:typedefenum{...
HI_IO_FUNC_GPIO_3_PWM5_OUT,//作為第5個(gè)PWM控制器信號(hào)輸出引腳}hi_io_func_gpio_3;鴻蒙系統(tǒng)PWM函數(shù)(2/3)hi_pwm.h中已定義表示PWM控制器的枚舉常量:typedefenum{HI_PWM_PORT_PWM0=0,HI_PWM_PORT_PWM1=1,HI_PWM_PORT_PWM2=2,HI_PWM_PORT_PWM3=3,HI_PWM_PORT_PWM4=4,HI_PWM_PORT_PWM5=5,HI_PWM_PORT_MAX}hi_pwm_port;鴻蒙系統(tǒng)PWM函數(shù)(3/3)iot_pwm.h頭文件也提供了PWM的操作函數(shù):unsignedintIoTPwmInit(unsignedintport);//初始化PWM控制器//設(shè)置并啟動(dòng)第port個(gè)PWM控制器unsignedintIoTPwmStart(unsignedintport,unsignedshortduty,unsignedintfreq);//freq參數(shù)是用于設(shè)置PWM輸出的信號(hào)頻率,因PWM控制默認(rèn)使用CPU160MHz作為時(shí)鐘信號(hào)源,需要除以一個(gè)分頻系數(shù)才能得到PWM信號(hào)的頻率,而且PWM配置寄存器只能存儲(chǔ)16位的分頻系數(shù)(最大值為65535),所以PWM輸出的信號(hào)頻率必須大于2442Hz(160000000Hz/65535)。//參數(shù)duty設(shè)置占空比unsignedintIoTPwmStop(unsignedintport);停止port對(duì)應(yīng)的控制器輸出PWM信號(hào)PWM信號(hào)原理鴻蒙系統(tǒng)PWM函數(shù)PWM應(yīng)用案例PWM應(yīng)用案例(1/3)
蜂鳴器的發(fā)聲利用了電磁感應(yīng)與振動(dòng)產(chǎn)生聲音的原理,當(dāng)不同大小與方向的電流通過線圈時(shí)產(chǎn)生一個(gè)變化的磁場(chǎng),當(dāng)產(chǎn)生的磁場(chǎng)與磁體同向時(shí)相排斥時(shí),紙盒則會(huì)被向外推,而當(dāng)產(chǎn)生的磁場(chǎng)與磁體異向時(shí)相吸引,紙盒則被向內(nèi)拉,正是這種反復(fù)交替的推拉動(dòng)作,讓紙盒產(chǎn)生振動(dòng)而發(fā)出聲音。PWM應(yīng)用案例(2/3)蜂鳴器模塊通過杜邦線與開發(fā)板的連接:PWM應(yīng)用案例(3/3)蜂鳴器模塊的PWM驅(qū)動(dòng)主過程:
IoTGpioInit(BUZZER_IO);//申請(qǐng)使用IO
hi_io_set_func(BUZZER_IO,BUZZER_IOFUNC);//設(shè)置IO用途
IoTPwmInit(BUZZER_PWM);//初始化PWM控制器
IoTPwmStart(BUZZER_PWM,50,freq);//設(shè)置PWM控制器的占空比與頻率,并啟動(dòng)控制器
IoTPwmStop(BUZZER_PWM);//停止PWM控制器
IoTPwmDeinit(BUZZER_PWM);//釋放PWM控制器的使用請(qǐng)簡(jiǎn)述PWM信號(hào)的三要素。
講述了PWM工作原理講述了鴻蒙系統(tǒng)PWM函數(shù)講述了蜂鳴器的PWM驅(qū)動(dòng)本章主要講述鴻蒙系統(tǒng)ADC應(yīng)用開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)ADC應(yīng)用開發(fā)。通過本節(jié)學(xué)習(xí)可以熟悉:ADC工作原理鴻蒙系統(tǒng)ADC函數(shù)ADC應(yīng)用案例ADC信號(hào)原理鴻蒙系統(tǒng)ADC函數(shù)ADC應(yīng)用案例ADC信號(hào)原理(1/2)
物聯(lián)網(wǎng)系統(tǒng)電路中廣泛采用數(shù)字信號(hào)與模擬信號(hào)。數(shù)字信號(hào)通過高電平代表二進(jìn)制1,低電平代表二進(jìn)制0,在數(shù)字電路中傳輸數(shù)據(jù);而模擬信號(hào)則在模擬電路中,以低電平至高電平間的任意電壓值來表示信號(hào)的大小或強(qiáng)度。
光敏電阻模塊通過AO輸出一個(gè)表示當(dāng)前亮度的電壓值,當(dāng)感應(yīng)到亮度越強(qiáng)時(shí),AO輸出的電壓值越小,反之,AO輸出的電壓值就越大。ADC信號(hào)原理(2/2)采樣率:是指一秒鐘內(nèi)檢測(cè)電路電壓的次數(shù),ADC采樣率越高則信號(hào)的還原度更高,反之,過低的采樣率可導(dǎo)致丟失信號(hào)變化的關(guān)鍵過程。Hi3861ADC的最大采樣率為157KHz。量化精度:量化是指將采樣得到電壓值轉(zhuǎn)換成二進(jìn)制值的過程,此二進(jìn)制值的最大位數(shù)就是量化精度。越高的量化精度,ADC轉(zhuǎn)換的結(jié)果就更加精確。Hi3861ADC的量化精度為12bit,其中最低兩位用于小數(shù)。ADC信號(hào)的關(guān)鍵要素:ADC信號(hào)原理鴻蒙系統(tǒng)ADC函數(shù)ADC應(yīng)用案例鴻蒙系統(tǒng)ADC函數(shù)(1/4)Hi3861的ADC共有8個(gè)模擬電壓的輸入通道,除了通道7專用于檢測(cè)電源的電壓外,其他0~6通道分別對(duì)應(yīng)一個(gè)不同的IO:鴻蒙系統(tǒng)ADC函數(shù)(2/4)hi_adc.h頭文件中,已經(jīng)定義了表示各個(gè)ADC通道的枚舉常量以及相應(yīng)的操作函數(shù):typedefenum{HI_ADC_CHANNEL_0,...HI_ADC_CHANNEL_7,}hi_adc_channel_index;hi_u32hi_adc_read(hi_adc_channel_indexchannel,hi_u16*data,hi_adc_equ_model_selequ_model,hi_adc_cur_baiscur_bais,hi_u16delay_cnt);//獲取ADC轉(zhuǎn)換結(jié)果參數(shù)列表:channel:表示ADC選擇的輸入通道data:用于存放轉(zhuǎn)換結(jié)果的變量的地址equ_mode:為提高數(shù)據(jù)的準(zhǔn)確性而選擇使用的平均算法模式,可選:HI_ADC_EQU_MODEL_1,/*不使用平均算法,直接取轉(zhuǎn)換結(jié)果*/HI_ADC_EQU_MODEL_8,/*ADC轉(zhuǎn)換8次后,取平均值作為結(jié)果*/cur_bais:用于設(shè)置ADC基準(zhǔn)電壓值,可選:HI_ADC_CUR_BAIS_1P8V,/*選擇1.8V作為基準(zhǔn)電壓*/HI_ADC_CUR_BAIS_3P3V,/*選擇3.3V作為基準(zhǔn)電壓*/delay_cut:為了確保轉(zhuǎn)換電壓值的穩(wěn)定,設(shè)置等待時(shí)間,一次計(jì)數(shù)是334ns,其值需在0~4080之間
函數(shù)返回值:成功返回HI_ERR_SUCCESS(0),失敗返回非0的錯(cuò)誤碼hi_floathi_adc_convert_to_voltage(hi_u16data);//將ADC轉(zhuǎn)換結(jié)果再轉(zhuǎn)換成對(duì)應(yīng)的電壓值
參數(shù)data為要轉(zhuǎn)換成電壓值的數(shù)值,函數(shù)返回值為帶小數(shù)的電壓值,如2.2V。
鴻蒙系統(tǒng)ADC函數(shù)(3/4)鴻蒙系統(tǒng)ADC函數(shù)(4/4)熊派開發(fā)板廠商提供的頭文件iot_adc.h中,也提供獲取ADC轉(zhuǎn)換結(jié)果的函數(shù):unsignedintIoTAdcRead(unsignedintchannel,unsignedshort*data,IotAdcEquModelSelequModel,IotAdcCurBaiscurBais,unsignedshortrstCnt);此函數(shù)的功能、參數(shù)與hi_adc.h中hi_adc_read函數(shù)基本一致。ADC信號(hào)原理鴻蒙系統(tǒng)ADC函數(shù)ADC應(yīng)用案例ADC應(yīng)用案例(1/2)
光敏電阻傳感器能夠檢測(cè)周圍環(huán)境的光線亮度,它的電阻值會(huì)隨著光照強(qiáng)度的變化而變化,環(huán)境亮度越強(qiáng)時(shí)傳感器的電阻值越低;亮度越弱或處于暗處時(shí)傳感器的電阻值越大。ADC應(yīng)用案例(2/2)
光敏電阻傳感器主要驅(qū)動(dòng)過程
:
IoTGpioInit(SENSOR_IO);//初始化IO口
hi_io_set_func(SENSOR_IO,SENSOR_IOFUNC);//配置IO功能為GPIO
IoTGpioSetDir(SENSOR_IO,IOT_GPIO_DIR_IN);//ADC引腳配置為輸入
//獲取ADC4轉(zhuǎn)換結(jié)果,使用轉(zhuǎn)換8次平均算法,3.3V基準(zhǔn)電壓,等待3340ns后開始轉(zhuǎn)換
ret=hi_adc_read(ADC_CHANNEL,&val,HI_ADC_EQU_MODEL_8,HI_ADC_CUR_BAIS_3P3V,10);
//將ADC轉(zhuǎn)換結(jié)果再轉(zhuǎn)換成電壓值
vol=hi_adc_convert_to_voltage(val);請(qǐng)簡(jiǎn)述ADC信號(hào)的關(guān)鍵要素。
講述了ADC工作原理講述了鴻蒙系統(tǒng)ADC函數(shù)講述了光敏電阻模塊的ADC驅(qū)動(dòng)本章主要講述智能煙霧警報(bào)器的項(xiàng)目開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解智能煙霧警報(bào)器的項(xiàng)目開發(fā)。通過本節(jié)學(xué)習(xí)可以熟悉:項(xiàng)目架構(gòu)煙霧傳感器繼電器項(xiàng)目架構(gòu)煙霧傳感器模塊繼電器模塊主程序項(xiàng)目架構(gòu)(1/2)項(xiàng)目架構(gòu)(2/2)項(xiàng)目程序流程圖:項(xiàng)目架構(gòu)煙霧傳感器模塊繼電器模塊主程序煙霧傳感器模塊(1/2)
煙霧傳感器模塊可以根據(jù)當(dāng)前環(huán)境偵測(cè)到可燃?xì)怏w的濃度,通過DO引腳輸出高低電平表示感應(yīng)到可燃?xì)怏w與否(靈敏度可在模塊的旋轉(zhuǎn)電位器上調(diào)節(jié));通過AO輸出一個(gè)表示當(dāng)前可燃?xì)怏w的濃度值,濃度越高,AO輸出的電壓值越大,反之,AO輸出的電壓值就越小。煙霧傳感器模塊(2/2)煙霧傳感器接入開發(fā)板:項(xiàng)目架構(gòu)煙霧傳感器模塊繼電器模塊主程序繼電器模塊(1/2)
繼電器實(shí)現(xiàn)通過低電壓控制高電壓的功能:繼電器模塊(2/2)繼電器模塊接入開發(fā)板:項(xiàng)目架構(gòu)煙霧傳感器模塊繼電器模塊主程序主程序
通過定時(shí)改變PWM信號(hào)的占空比,讓LED燈光從弱到強(qiáng),再?gòu)膹?qiáng)到弱的過程,實(shí)現(xiàn)呼吸燈的效果。接著通過ADC轉(zhuǎn)換煙霧傳感器模塊輸出的電壓值,從而獲取當(dāng)前環(huán)境可燃?xì)怏w的濃度數(shù)據(jù),然后根據(jù)濃度數(shù)據(jù)控制聲光警報(bào)器的開關(guān)。主要實(shí)現(xiàn)步驟:1.IO口初臺(tái)化:
(1)煙霧傳感器IO設(shè)置(2)繼電器IO設(shè)置(3)LED的PWM設(shè)置2.循環(huán)處理:(1)LED燈PWM定時(shí)改變占空比
(2)定時(shí)獲取煙霧濃度
(3)根據(jù)濃度數(shù)據(jù)控制繼電器講述了智能煙霧警報(bào)器的項(xiàng)目架構(gòu)講述了煙霧傳感器的應(yīng)用開發(fā)講述了繼電器的應(yīng)用謝謝128鴻蒙系統(tǒng)設(shè)備開發(fā)進(jìn)階本章主要講述鴻蒙系統(tǒng)多線程應(yīng)用開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙多線程應(yīng)用開發(fā)技術(shù)。通過本節(jié)學(xué)習(xí)可以熟悉:多線程工作原理與用途CMSIS多線程編程POSIX多線程編程多線程應(yīng)用案例-多線程煙霧警報(bào)器多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應(yīng)用案例-多線程煙霧警報(bào)器多線程工作原理
線程是操作系統(tǒng)能夠進(jìn)行任務(wù)調(diào)度的最小單位,也是一個(gè)程序中并行執(zhí)行的分支。
每個(gè)線程有自己的工作函數(shù)與不同的執(zhí)行路徑,且每個(gè)線程都獨(dú)自擁有在內(nèi)存上分配局部變量的??臻g,但同屬一個(gè)程序的多個(gè)線程共享此程序的全局變量等資源。
在多核多線程的主控芯片上,通常由操作系統(tǒng)優(yōu)先調(diào)度線程的任務(wù)由一個(gè)CPU硬件線程來完成,如果硬件線程資源不足則與單核單線程的主控芯片一樣,采用時(shí)間片的調(diào)度方式來實(shí)施線程的并行執(zhí)行多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應(yīng)用案例-多線程煙霧警報(bào)器CMSIS多線程編程(1/2)
CMSIS(CortexMicrocontrollerSoftwareInterfaceStandard)標(biāo)準(zhǔn)的多線程編程接口。CMSIS多線程函數(shù)在cmsis_os2.h頭文件中已聲明,具體的編程步驟如下:1.
定義線程執(zhí)行的函數(shù)CMSIS線程函數(shù)原型:void(*func)(void*arg),其中arg是在函數(shù)執(zhí)行時(shí)附帶的參數(shù)值,線程在創(chuàng)建時(shí)除指定arg參數(shù)值外,還需指定線程要執(zhí)行的函數(shù)名。線程創(chuàng)建成功后自動(dòng)執(zhí)行線程函數(shù)。2.
設(shè)置線程屬性
在CMSIS多線程編程中,使用osThreadAttr_t結(jié)構(gòu)體變量描述線程的名稱、棧大小、優(yōu)先級(jí)別等屬性值,參考代碼如下:
osThreadAttr_tattr;//聲明描述線程屬性的結(jié)構(gòu)體變量memset(&attr,0,sizeof(attr));//將結(jié)構(gòu)體變量的全部屬性值清零
="myLed";//設(shè)置線程名
attr.stack_size=1024;//設(shè)置線程所用的棧大小
attr.priority=osPriorityNormal1;//設(shè)置線程優(yōu)先級(jí)別CMSIS多線程編程(2/2)
3.
線程管理在CMSIS多線程編程中,使用osThreadNew函數(shù)創(chuàng)建線程,函數(shù)原型:osThreadId_tosThreadNew(osThreadFunc_tfunc,void*arg,constosThreadAttr_t*attr)
其中func參數(shù)用于指定線程函數(shù)名,arg參數(shù)用于指定當(dāng)線程函數(shù)執(zhí)行時(shí)得到的參數(shù)值,attr參數(shù)用于指定使用的線程屬性值。使用上一步驟設(shè)置的線程屬性,創(chuàng)建一個(gè)線程執(zhí)行呼吸燈處理函數(shù)的代碼如下:osThreadId_ttid=osThreadNew(myLedThreadFunc,NULL,&attr);函數(shù)osThreadNew執(zhí)行成功返回線程的id,通過此線程id,可以通過以下函數(shù)管理線程:osStatus_tosThreadSuspend(osThreadId_ttid);//設(shè)置tid線程暫停執(zhí)行osStatus_tosThreadResume(osThreadId_ttid);//設(shè)置tid線程恢復(fù)執(zhí)行osStatus_tosThreadTerminate(osThreadId_ttid);//結(jié)束tid線程的執(zhí)行多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應(yīng)用案例-多線程煙霧警報(bào)器POSIX多線程編程(1/3)
POSIX(PortableOperatingSystemInterface)標(biāo)準(zhǔn)多線程在pthread.h頭文件提供相關(guān)操作的函數(shù)聲明,具體的編程步驟如下:1.
定義線程執(zhí)行的函數(shù)POSIX線程與CMSIS線程功能一致,它的函數(shù)原型為:void*(*func)(void*arg),其中arg是在函數(shù)執(zhí)行時(shí)附帶的參數(shù)值,線程函數(shù)執(zhí)行結(jié)束返回一個(gè)地址。POSIX多線程編程(2/3)2.
設(shè)置線程屬性
使用pthread_attr_t結(jié)構(gòu)體變量描述線程的屬性,并通過函數(shù)設(shè)置線程的屬性值,常用的函數(shù)有:
pthread_attr_tattr;//聲明線程屬性結(jié)構(gòu)體變量
intpthread_attr_init(pthread_attr_t*attr);//初始化線程結(jié)構(gòu)體變量
intpthread_attr_setstacksize(pthread_attr_t*attr,size_tsize);
//在線程屬性結(jié)構(gòu)體變量中設(shè)置線程棧大小。
intpthread_attr_setschedpolicy(pthread_attr_t*attr,intpolicy);
//在線程屬性結(jié)構(gòu)體變量中設(shè)置線程的調(diào)度算法
policy參數(shù)可選:
SCHED_OTHER(默認(rèn)值):分時(shí)調(diào)度算法,每個(gè)線程得到相同的執(zhí)行時(shí)間
SCHED_FIFO:工作隊(duì)列調(diào)度算法,一個(gè)線程執(zhí)行完才會(huì)執(zhí)行下一個(gè)線程
SCHED_RR:輪流調(diào)度算法,以分時(shí)為基礎(chǔ),結(jié)合線程優(yōu)先級(jí)別進(jìn)行調(diào)度
//在線程屬性結(jié)構(gòu)體變量中設(shè)置線程的優(yōu)先級(jí)別
intpthread_attr_setschedparam(pthread_attr_t*attr,conststructsched_param*param);
用法:先創(chuàng)建一個(gè)sched_param類型的結(jié)構(gòu)體變量,
并為其內(nèi)部的sched_priority成員賦一個(gè)表示級(jí)別的int類型值(數(shù)值越大則級(jí)別越高),然后執(zhí)行此函數(shù)并傳遞此sched_param變量的地址。
POSIX多線程編程(3/3)3.
線程管理在POSIX多線程編程中,使用pthread_create函數(shù)創(chuàng)建線程,函數(shù)原型:intpthread_create(pthread_t*tid,constpthread_attr_t*attr,void*(*func)(void*),void*arg);
其中tid參數(shù)用于存放線程id的pthread_t變量地址,attr參數(shù)用于指定使用的線程屬性值,func參數(shù)指定線程執(zhí)行的函數(shù),arg參數(shù)用于指定當(dāng)線程函數(shù)執(zhí)行時(shí)得到的參數(shù)值,函數(shù)執(zhí)行成功返回0,失敗則返回小于0的錯(cuò)誤碼。pthread_tpthread_self(void);//獲取當(dāng)前線程的id//當(dāng)線程函數(shù)執(zhí)行結(jié)束后,通過此函數(shù)回收指定id的線程資源,并通過retval參數(shù)接收線程函數(shù)的返回值intpthread_join(pthread_ttid,void**retval);//設(shè)置指定id的線程名稱,name為線程名稱intpthread_setname_np(pthread_ttid,constchar*name);//獲取指定id的線程名稱,
獲取的名稱存入buf數(shù)組中,buflen參數(shù)為buf數(shù)組的長(zhǎng)度intpthread_getname_np(pthread_ttid,char*buf,size_tbuflen);多線程工作原理CMSIS多線程編程POSIX多線程編程多線程應(yīng)用案例-多線程煙霧警報(bào)器多線程應(yīng)用案例(1/2)
通過多線程并行執(zhí)行與模塊化開發(fā)的技術(shù),由一個(gè)線程專門實(shí)現(xiàn)呼吸燈的功能,再由另一個(gè)線程循環(huán)檢測(cè)煙霧傳感器,當(dāng)數(shù)據(jù)異常時(shí)及時(shí)發(fā)出警報(bào)。在工程源碼的myhello目錄下,創(chuàng)建myledThread.c源文件。在源文件中由一個(gè)CMSIS標(biāo)準(zhǔn)的線程,循環(huán)改變PWM信號(hào)占空比實(shí)現(xiàn)呼吸燈的功能。voidmyLedInit(){1.LED的PWM初始化
2.線程屬性設(shè)置
3.創(chuàng)建PWM線程,指定線程函數(shù)與線程屬性設(shè)置}4.PWM線程函數(shù):
循環(huán)定時(shí)改變PWM占空比多線程應(yīng)用案例(2/2)
在工程源碼的myhello目錄下,再創(chuàng)建myadcThread.c源文件。在源文件中由一個(gè)POSIX標(biāo)準(zhǔn)的線程,循環(huán)檢測(cè)煙霧傳感器及時(shí)發(fā)生聲光警報(bào)的功能。voidmyAdcInit(){1.煙霧傳感器IO初始化
2.繼電器模塊IO初始化
3.線程屬性設(shè)置
4.創(chuàng)建ADC線程,指定線程函數(shù)與線程屬性設(shè)置}5.ADC線程函數(shù):(1)循環(huán)定時(shí)獲取煙霧傳感器的ADC值
(2)根據(jù)ADC值判斷煙霧濃度,當(dāng)超出預(yù)設(shè)值則導(dǎo)通繼電器請(qǐng)簡(jiǎn)述多線程的作用。
講述了多線程工作原理。講述了CMSIS多線程編程。講述了POSIX多線程編程。講述了多線程應(yīng)用案例。本章主要講述鴻蒙系統(tǒng)定時(shí)器與線程同步技術(shù)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)定時(shí)器與線程同步技術(shù)。通過本節(jié)學(xué)習(xí)可以熟悉:osTimer定時(shí)器信號(hào)量實(shí)現(xiàn)的線程間同步應(yīng)用案例-DHT11溫濕度傳感器osTimer定時(shí)器鴻蒙系統(tǒng)線程同步綜合應(yīng)用案例-DHT11溫濕度傳感器驅(qū)動(dòng)osTimer定時(shí)器(1/2)
鴻蒙系統(tǒng)的osTimer定時(shí)器是基于一個(gè)Systemtick硬件定時(shí)器封裝出來的軟件定時(shí)器。tick硬件定時(shí)器按系統(tǒng)的配置的頻率做加1計(jì)數(shù),每次增加的間隔為10毫秒。在鴻蒙系統(tǒng)中可以使用多個(gè)osTimer軟件定時(shí)器,但每個(gè)osTimer定時(shí)器的時(shí)間應(yīng)當(dāng)以tick硬件定時(shí)器的計(jì)數(shù)間隔時(shí)間為單位(10ms)。osTimer定時(shí)器(2/2)
在頭文件cmsis_os2.h中,已聲明了osTimer相關(guān)的操作函數(shù):osTimerId_tosTimerNew(osTimerFunc_tfunc,osTimerType_ttype,void*argument,constosTimerAttr_t*attr)//創(chuàng)建osTimer定時(shí)器//其中定時(shí)器的超時(shí)函數(shù)原型為:void(*osTimerFunc_t)(void*arg);//type參數(shù)可選:osTimerOnce(一次性的定時(shí)器),osTimerPeriodic(重復(fù)的定時(shí)器)//函數(shù)執(zhí)行成功后,返回osTimer定時(shí)器的id,通過此id可啟動(dòng)或停止定時(shí)器工作。
//啟動(dòng)指定id的定時(shí)器,并指定ticks定時(shí)器間隔時(shí)間。如2秒:ticks=計(jì)數(shù)頻率*2osTimerStart(osTimerId_tid,uint32_tticks)//注意定時(shí)器啟動(dòng)后,在定時(shí)器超時(shí)前再執(zhí)行此函數(shù),則定時(shí)器會(huì)重新開始計(jì)數(shù)。
//停止指定id的定時(shí)器osTimerStop(osTimerId_ttimer_id)osTimer定時(shí)器鴻蒙系統(tǒng)線程同步綜合應(yīng)用案例-DHT11溫濕度傳感器驅(qū)動(dòng)鴻蒙系統(tǒng)線程同步(1/3)
信號(hào)量(Semaphore)是操作系統(tǒng)中一種重要的線程同步機(jī)制,主要用于對(duì)共享資源的保護(hù)訪問。信號(hào)量以一個(gè)非負(fù)整數(shù)值表示可用資源的數(shù)量,當(dāng)信號(hào)量值大于0時(shí),表示有資源可用。此時(shí),若對(duì)信號(hào)量執(zhí)行上鎖操作,信號(hào)量值會(huì)減一,并允許線程繼續(xù)執(zhí)行。當(dāng)信號(hào)量值等于0時(shí)表示已沒有可用資源,此時(shí)上鎖會(huì)讓當(dāng)前線程進(jìn)入休眠阻塞狀態(tài),直到有可分配的資源才會(huì)喚醒并恢復(fù)執(zhí)行。信號(hào)量的解鎖操作會(huì)讓信號(hào)量值加一,如果有等待此信號(hào)量資源的其他線程時(shí),解鎖操作會(huì)喚醒一個(gè)處于阻塞狀態(tài)的線程。鴻蒙系統(tǒng)線程同步(2/3)
POSIX信號(hào)量在semaphore.h頭文件中聲明了sem_t信號(hào)量類型及相關(guān)操作函數(shù),關(guān)鍵的函數(shù)有:sem_tsem;//聲明一個(gè)信號(hào)量變量intsem_init(sem_t*sem,intpshared,unsignedintvalue);//信號(hào)量初始化參數(shù)列表:sem參數(shù)指定要初始化的變量pshared參數(shù)值非零表示此信號(hào)量支持跨線程,零值則表示只支持線程內(nèi)訪問value參數(shù)設(shè)置信號(hào)量初始時(shí)的可用資源數(shù)//對(duì)sem信號(hào)量作上鎖操作,如信號(hào)量值已為0,調(diào)用的線程則進(jìn)入休眠阻塞狀態(tài),直到有可用資源止;如信號(hào)量值大于0,則信號(hào)量值減一,上鎖成功接著執(zhí)行。intsem_wait(sem_t*sem);//對(duì)sem信號(hào)量做解鎖操作,讓信號(hào)量值加一,喚醒一個(gè)等待此信號(hào)量可用資源的阻塞線程。intsem_post(sem_t*sem);鴻蒙系統(tǒng)線程同步(3/3)
實(shí)踐:以一個(gè)線程循環(huán)對(duì)信號(hào)量作上鎖操作并進(jìn)入休眠阻塞狀態(tài),在按鍵按下時(shí)對(duì)信號(hào)量作解鎖操作,喚醒與恢復(fù)線程的執(zhí)行。osTimer定時(shí)器鴻蒙系統(tǒng)線程同步綜合應(yīng)用案例-DHT11溫濕度傳感器驅(qū)動(dòng)綜合應(yīng)用案例(1/5)DHT11是一款輸出高低電平數(shù)字信號(hào)的溫濕度傳感器。模塊通過DOUT引腳接收開始采集溫濕度信號(hào),并通過DOUT引腳輸出溫濕度與數(shù)據(jù)校驗(yàn)和。一次完整的數(shù)據(jù)傳輸為40bit,高位先出。先后輸出:8位濕度整數(shù)數(shù)據(jù)、8位濕度小數(shù)數(shù)據(jù)、8位溫度整數(shù)數(shù)據(jù)、8位溫度小數(shù)數(shù)、8位校驗(yàn)和。其中校驗(yàn)和的值應(yīng)當(dāng)是前面4節(jié)溫濕數(shù)據(jù)累加后所得結(jié)果的末8位。綜合應(yīng)用案例(2/5)DHT11只有接收到開始信號(hào)后才會(huì)啟動(dòng)溫濕度數(shù)據(jù)的采集。首先,連接模塊DOUT引腳的GPIO應(yīng)當(dāng)接上拉,默認(rèn)處于高電平狀態(tài),GPIO應(yīng)當(dāng)輸出18毫秒以上的低電平再接著輸出20至40微秒的高電平信號(hào)。開始信號(hào)發(fā)出后GPIO應(yīng)當(dāng)改為輸入功能,由DHT11模塊控制GPIO的電平。DHT11接收到開始信號(hào)后,輸出80微秒的低電平的響應(yīng)信號(hào),正常情況下,通過GPIO即獲取到此低電平信號(hào);如DHT11未接入等不正常情況下,因GPIO的上拉功能,會(huì)獲取到高電平信號(hào)。綜合應(yīng)用案例(3/5)DHT11輸出響應(yīng)信號(hào)后,就會(huì)發(fā)出表示二進(jìn)制0或1的電平信號(hào)。數(shù)值0的電平信號(hào)。DOUT引腳先輸出50微秒低電平信號(hào),接著輸出26至28微秒的高電平信號(hào)。DHT11輸出二進(jìn)制數(shù)值1的電平信號(hào)。DOUT引腳先輸出50微秒低電平信號(hào),接著輸出70微秒的高電平信號(hào)。綜合應(yīng)用案例(4/5)
1.初始化:sem_init(&semLock,1,0);//初始化信號(hào)量pthread_create(&tid,NULL,threadFunc,NULL);//創(chuàng)建線程timerID=osTimerNew(timerFunc,osTimerOnce,NULL,NULL);//創(chuàng)建osTimer定時(shí)器2.在線程函數(shù)里循環(huán):(1)DHT11發(fā)出開始信號(hào),檢查DHT11的響應(yīng)信號(hào),獲取模塊DOUT輸出的低電平(2)如沒有接收到DHT11輸出的低電平響應(yīng)信號(hào),則退出循環(huán)(3)注冊(cè)GPIO中斷(4)信號(hào)量上鎖,當(dāng)前線程進(jìn)入休眠狀態(tài),直到信號(hào)量解鎖止。(5)線程被喚醒后,輸出獲取的濕度整數(shù)、濕度小數(shù)、溫度整數(shù)、溫度小數(shù)、校驗(yàn)和(6)釋放GPIO的中斷功能
DHT11驅(qū)動(dòng)實(shí)現(xiàn)主要步驟:綜合應(yīng)用案例(5/5)
3.在GPIO中斷處理函數(shù):(1)由數(shù)組記錄每個(gè)中斷的間隔時(shí)間(2)啟動(dòng)定時(shí)器,1秒后執(zhí)行timerFunc函數(shù)。注意未超時(shí)并再次啟動(dòng),定時(shí)器會(huì)重新計(jì)時(shí)
4.在timerFunc函數(shù):(1)檢查每個(gè)中斷間隔時(shí)間,如果大于100微秒則是二進(jìn)制1,否則是0(2)并將二進(jìn)制值存放起來(3)數(shù)據(jù)解析完成后,信號(hào)量解鎖
請(qǐng)簡(jiǎn)述信號(hào)量的工作原理。
講述了osTimer定時(shí)器。講述了信號(hào)量實(shí)現(xiàn)的線程間同步。講述了綜合應(yīng)用案例-DHT11溫濕度傳感器。本章主要講述鴻蒙系統(tǒng)I2C應(yīng)用開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解鴻蒙系統(tǒng)I2C應(yīng)用開發(fā)技術(shù)。通過本節(jié)學(xué)習(xí)可以熟悉:I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅(qū)動(dòng)I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅(qū)動(dòng)I2C通信原理(1/4)I2C(Inter-IntegratedCircuit),也被稱為I2C或IIC。它既是一種通信協(xié)議,也是一種硬件接口,實(shí)現(xiàn)硬件模塊間的通信。常用于獲取觸摸屏的觸點(diǎn)坐標(biāo)、控制聲卡的音量、配置攝像頭的圖像分辨率等操作。I2C接口是由兩根導(dǎo)線組成:
一根數(shù)據(jù)線SDA,一根時(shí)鐘線SCL。時(shí)鐘線提供周期信號(hào),每個(gè)周期信號(hào)表示數(shù)據(jù)線上傳輸一位數(shù)據(jù);數(shù)據(jù)線在每個(gè)時(shí)鐘周期中,用高電平表示二進(jìn)制值1,低電平表示二進(jìn)制值0。并且,I2C傳輸以8位為一個(gè)單位,每傳輸8位后,應(yīng)由接收方拉低SDA引腳電平作為應(yīng)答ACK信號(hào)。I2C通信原理(2/4)
一個(gè)I2C接口可并聯(lián)接入多個(gè)I2C設(shè)備。在同一接口上的每個(gè)I2C設(shè)備都需要有一個(gè)不同的設(shè)備地址(通常是7位地址)予以區(qū)分,
每次I2C通信時(shí)需要指定所操作的設(shè)備地址,I2C通信原理(3/4)WriteMode(向從機(jī)設(shè)備發(fā)送數(shù)據(jù)):主機(jī)先發(fā)出開始信號(hào),
接著發(fā)出8位數(shù)據(jù)(由7位設(shè)備地址和一位R/W讀寫位),讀寫位的值為0。同一I2C接口的所有設(shè)備都會(huì)接收到此設(shè)備地址后,與自身的地址進(jìn)行比較,如果地址是一樣,則由匹配的設(shè)備回復(fù)應(yīng)答信號(hào)。如果沒有設(shè)備匹配設(shè)備地址,則沒有應(yīng)答信號(hào)。主機(jī)收到應(yīng)答信號(hào)后,再發(fā)出8位數(shù)據(jù),
從機(jī)收到數(shù)據(jù)回復(fù)應(yīng)答,表示已收到數(shù)據(jù)。主機(jī)如需再發(fā)數(shù)據(jù),則在接收到應(yīng)答信號(hào)后,再發(fā)出8位數(shù)據(jù),如此循環(huán),最后發(fā)出停止信號(hào)。I2C通信原理(4/4)ReadMode(讀取從機(jī)設(shè)備數(shù)據(jù)):主機(jī)先發(fā)出開始信號(hào),接著發(fā)出8位數(shù)據(jù)(由7位設(shè)備地址和一位R/W讀寫位),讀寫位的值為1。從機(jī)地址匹配后,回復(fù)應(yīng)答信號(hào),接著從機(jī)輸出8位數(shù)據(jù),而主機(jī)接收數(shù)據(jù)后,如需再接收數(shù)據(jù),則向從機(jī)回復(fù)應(yīng)答信號(hào)。從機(jī)收到應(yīng)答信號(hào)后,再發(fā)出8位數(shù)據(jù),如此循環(huán),直到主機(jī)停止接收,發(fā)出停止信號(hào)。I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅(qū)動(dòng)鴻蒙系統(tǒng)I2C操作函數(shù)(1/2)鴻蒙系統(tǒng)在iot_i2c.h頭文件中提供了I2C控制器操作函數(shù),關(guān)鍵的函數(shù)有:unsignedintIoTI2cInit(unsignedintid,unsignedintbaudrate);//初始化I2C控制器//id參數(shù)指定操作第幾個(gè)控制器,bandrate參數(shù)指定I2C傳輸速率(標(biāo)準(zhǔn)100KHz,高速400KHz)//執(zhí)行成功返回IOT_SUCCESS,失敗則返回IOT_FAILUREunsignedintIoTI2cWrite(unsignedintid,unsignedshortdevAddr,constunsignedchar*data,unsignedintdataLen);//通過I2C控制器發(fā)出數(shù)據(jù)//參數(shù)id指定操作第幾個(gè)控制器,devAddr指定操作的設(shè)備地址(包含讀寫位)//參數(shù)data為存放要發(fā)出數(shù)據(jù)的緩沖區(qū)地址,dataLen參數(shù)指定要發(fā)出的數(shù)據(jù)長(zhǎng)度//執(zhí)行成功返回IOT_SUCCESS,失敗則返回IOT_FAILURE鴻蒙系統(tǒng)I2C操作函數(shù)(2/2)unsignedintIoTI2cRead(unsignedintid,unsignedshortdevAddr,unsignedchar*data,unsignedintdataLen);//通過I2C控制器接收數(shù)據(jù)//參數(shù)id指定操作第幾個(gè)控制器,devAddr指定操作的設(shè)備地址(包含讀寫位)//參數(shù)data為存放接收數(shù)據(jù)的緩沖區(qū)地址,dataLen參數(shù)指定要接收的數(shù)據(jù)長(zhǎng)度//執(zhí)行成功返回IOT_SUCCESS,失敗則返回IOT_FAILUREI2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅(qū)動(dòng)OLED屏工作原理(1/3)
OLED,全稱是OrganicLight-EmittingDiode,即有機(jī)發(fā)光二極管。OLED屏也就是使用一個(gè)發(fā)光二極管的亮與熄分別表示圖像每個(gè)像素點(diǎn)的白與黑。由于存在能發(fā)出不同顏色光的二極管,OLED屏因此既有白、藍(lán)、黃等單色屏,也有由紅、綠、藍(lán)三個(gè)不同的發(fā)光二極管共同構(gòu)成每個(gè)像素顏色的OLED彩屏。OLED屏工作原理(2/3)OLED屏物理上一行有128個(gè)像素點(diǎn),共有64行,因此稱12864屏。屏幕上的每個(gè)像素點(diǎn),通過控制其對(duì)應(yīng)的發(fā)光二極管來顯示黑色或藍(lán)色,而圖像與字符的呈現(xiàn),則依賴于由多個(gè)像素點(diǎn)構(gòu)成的點(diǎn)陣來實(shí)現(xiàn)。如K字符16x8點(diǎn)陣的像素?cái)?shù)據(jù)分成兩行,每行8字節(jié)數(shù)據(jù),每字節(jié)表示從低位到高位上下8行一列的像素點(diǎn)數(shù)據(jù)OLED屏工作原理(3/3)
本次OLED屏模塊采用了SSD1306驅(qū)動(dòng)IC,該驅(qū)動(dòng)IC內(nèi)部集成了128x64像素點(diǎn)的顯存以及眾多配置寄存器,并支持I2C通信接口。OLED屏的驅(qū)動(dòng)流程:I2C通信原理鴻蒙系統(tǒng)I2C操作函數(shù)OLED屏工作原理OLED屏驅(qū)動(dòng)OLED屏驅(qū)動(dòng)(1/8)
根據(jù)芯片手冊(cè),SSD1306芯片在作為I2C設(shè)備時(shí),其設(shè)備地址為0x3C。根據(jù)屏商家提供的例程源碼,雖然在物理上OLED屏像素分成64行,每行128個(gè)像素點(diǎn),但在代碼邏輯中僅僅分成8行,每行由物理上的8行組成:OLED屏驅(qū)動(dòng)(2/8)開發(fā)板與OLED屏模塊引腳連接如下:OLED屏模塊
開發(fā)板
VCC
-------
3.3V
GND
-------
GND
SDA
-------
IO13//I2C0_SDA
SCL
-------
IO14//I2C0_SCLOLED屏驅(qū)動(dòng)(3/8)驅(qū)動(dòng)流程:1.OLED屏所接的I2C控制器初始化2.通過I2C控制器向OLED屏發(fā)送命令進(jìn)行屏的初始化3.屏初始化完成后,顯示花屏。OLED屏驅(qū)動(dòng)(4/8)屏上顯示圖像流程:1.使用PcToLCD工具將圖像轉(zhuǎn)換為二進(jìn)制像素?cái)?shù)據(jù)。工具的配置選項(xiàng):OLED屏驅(qū)動(dòng)(5/8)2.生成字模數(shù)據(jù)后,圖像的二進(jìn)制數(shù)據(jù)由十六進(jìn)制數(shù)據(jù)表示。將圖像數(shù)據(jù)復(fù)制到源文件中,并由一個(gè)數(shù)組存放起來:OLED屏驅(qū)動(dòng)(6/8)3.實(shí)現(xiàn)設(shè)置OLED屏刷出像素點(diǎn)的開始坐標(biāo)函數(shù):voidoledSetPosition(u8x,u8y){//x表示一行的第幾個(gè)像素點(diǎn),y表示OLED屏的第幾行(注意此行為物理上的8行像素) oledSendCmd(0xb0+y); oledSendCmd(((x&0xf0)>>4)|0x10); oledSendCmd(x&0x0f);}OLED屏驅(qū)動(dòng)(7/8)4.實(shí)現(xiàn)將圖像數(shù)據(jù)傳輸至SSD1306驅(qū)動(dòng)IC,讓之在OLED屏上顯示圖像的功能函數(shù):voidoledShowBmp(u8x,u8y,u8bmpW,u8bmpH,u8*bmpData){//oled每行8列,也是oled屏的一行相當(dāng)于8行像素
intn=0;
for(intr=0;r<bmpH/8;r++)
{
oledSetPosition(x,r+y);//設(shè)置屏顯的始坐標(biāo)
for(intc=0;c<bmpW;c++)
{
oledSendData(bmpData[n++]);//每次發(fā)一列的8個(gè)像素?cái)?shù)據(jù)
}
}}OLED屏驅(qū)動(dòng)(8/8)5.增加調(diào)用代碼:
//在oled屏上32:0坐標(biāo)開始顯示華為L(zhǎng)ogo,圖像寬與高均是64個(gè)像素
oledShowBmp(32,0,64,64,hwLogo);請(qǐng)簡(jiǎn)述I2C接口在OLED屏中的作用。
講述了I2C通信原理講述了鴻蒙系統(tǒng)I2C操作函數(shù)講述了OLED屏工作原理講述了OLED屏驅(qū)動(dòng)本章主要項(xiàng)目實(shí)踐-帶屏顯的溫濕度計(jì)。通過學(xué)習(xí)本節(jié)將能夠了解屏顯溫濕度計(jì)的項(xiàng)目實(shí)踐過程。通過本節(jié)學(xué)習(xí)可以熟悉:OLED屏顯示數(shù)字OLED屏顯示中文項(xiàng)目程序?qū)崿F(xiàn)
OLED屏顯示數(shù)字OLED屏顯示中文項(xiàng)目程序?qū)崿F(xiàn)
OLED屏顯示數(shù)字(1/5)
在屏上顯示一個(gè)字符如同顯示一個(gè)小圖片一樣,字符的像素點(diǎn)陣數(shù)據(jù)記錄每個(gè)像素點(diǎn)是否要顯示出來,如‘W’字符的8x6像素點(diǎn)陣圖:點(diǎn)陣數(shù)據(jù)第0列的數(shù)據(jù)為0x00,第1列數(shù)據(jù)為0x3F,依次對(duì)應(yīng)。OLED屏顯示數(shù)字(2/5)打開PcToLCD工具后,在菜單“模式”中選中“字符模式”后配置選項(xiàng):OLED屏顯示數(shù)字(3/5)輸入框中輸入“0123456789.”,生成字模16x8的像素點(diǎn)陣數(shù)據(jù):OLED屏顯示數(shù)字(4/5)然后將字符的像素點(diǎn)陣數(shù)據(jù)復(fù)制到源文件中,并由一個(gè)二維數(shù)組存放起來:OLED屏顯示數(shù)字(5/5)在源文件中實(shí)現(xiàn)讓OLED屏顯示數(shù)字字符的功能函數(shù)關(guān)鍵代碼:voidoledShowFloat(u8x,u8y,floatn)//在oled屏上顯示浮點(diǎn)數(shù),
x、y表示屏顯始坐標(biāo),
n表示要顯示的浮點(diǎn)數(shù)
u8data[20];
sprintf(data,"%.1f",n);//轉(zhuǎn)換成一位小數(shù)的浮點(diǎn)數(shù)字符串
for(intk=0;k<strlen(data);k++)
for(intr=0;r<2;r++)//每個(gè)字符像素?cái)?shù)據(jù)是16x8,所以只算2行
oledSetPosition(x+k*8,r+y);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 28889-2012復(fù)合材料面內(nèi)剪切性能試驗(yàn)方法》專題研究報(bào)告
- 《GBT 20944.3-2008紡織品 抗菌性能的評(píng)價(jià) 第3部分:振蕩法》專題研究報(bào)告
- 《GBT 9978.7-2008建筑構(gòu)件耐火試驗(yàn)方法 第7部分:柱的特殊要求》專題研究報(bào)告
- 道路安全培訓(xùn)通訊稿課件
- 道路保通安全知識(shí)培訓(xùn)課件
- 道路交通安全教學(xué)課件
- 道路交通安全培訓(xùn)學(xué)習(xí)課件
- 2025-2026年人教版七年級(jí)數(shù)學(xué)上冊(cè)期末試題(附答案)
- 2026年甘肅平?jīng)鍪懈呗殕握杏⒄Z(yǔ)題庫(kù)試題附答案
- 2026年廣東省輔警人員招聘考試題庫(kù)含答案
- 2025貴州貴陽(yáng)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘27人考試參考題庫(kù)附答案
- 2026貴州省法院系統(tǒng)招聘聘用制書記員282人筆試參考題庫(kù)及答案解析
- 自然資源部所屬單位2026年度公開招聘工作人員備考題庫(kù)(第一批634人)含答案詳解
- 2025內(nèi)蒙古交通集團(tuán)有限公司社會(huì)化招聘168人筆試考試參考試題及答案解析
- 蘇州工業(yè)園區(qū)領(lǐng)軍創(chuàng)業(yè)投資有限公司招聘?jìng)淇碱}庫(kù)必考題
- 2025廣東東莞市東城街道辦事處2025年招聘23人模擬筆試試題及答案解析
- 2025年及未來5年市場(chǎng)數(shù)據(jù)中國(guó)硝基化合物行業(yè)投資研究分析及發(fā)展前景預(yù)測(cè)報(bào)告
- 2026年內(nèi)蒙古建筑職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 園博園(一期)項(xiàng)目全過程BIM技術(shù)服務(wù)方案投標(biāo)文件(技術(shù)標(biāo))
- 2025-2026學(xué)年湘美版三年級(jí)美術(shù)上冊(cè)全冊(cè)教案
- 2025年軟考電子商務(wù)設(shè)計(jì)師真題答案
評(píng)論
0/150
提交評(píng)論