版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
4.1.1LiteOS-M內(nèi)核架構(gòu)通過本節(jié)學(xué)習(xí),您可以:了解LiteOS-M內(nèi)核架構(gòu)LiteOS-M內(nèi)核架構(gòu)LiteOS-M內(nèi)核架構(gòu)包含了硬件相關(guān)層以及硬件無關(guān)層。硬件相關(guān)層硬件無關(guān)層LiteOS-M內(nèi)核架構(gòu)硬件相關(guān)層按不同編譯工具鏈、芯片架構(gòu)分類,提供統(tǒng)一的HAL(HardwareAbstractionLayer)接口。硬件架構(gòu)支持ARM、RISC-V、Xtensa、C-SKY等內(nèi)核,在此基礎(chǔ)上抽象出統(tǒng)一的硬件架構(gòu)。支持驅(qū)動框架HDF,統(tǒng)一驅(qū)動標(biāo)準(zhǔn),為設(shè)備廠商提供統(tǒng)一的接入方式。硬件相關(guān)層LiteOS-M內(nèi)核架構(gòu)基礎(chǔ)內(nèi)核模塊提供基礎(chǔ)能力。包含任務(wù)管理、內(nèi)存管理、中斷管理、通信機(jī)制、調(diào)度器、與硬件相關(guān)管理等。硬件無關(guān)層擴(kuò)展模塊提供文件系統(tǒng)、網(wǎng)絡(luò)、調(diào)測工具、動態(tài)鏈接、低功耗框架等可選組件。KAL模塊提供統(tǒng)一的標(biāo)準(zhǔn)接口,包括POSIX和CMSIS標(biāo)準(zhǔn)庫接口。謝謝4.1.2LiteOS-M內(nèi)核運行機(jī)制通過本節(jié)學(xué)習(xí),您可以:了解LiteOS-M內(nèi)核運行機(jī)制LiteOS-M內(nèi)核運行機(jī)制設(shè)備開始上電。上電之后,各種外設(shè)進(jìn)行初始化。初始化完畢開始系統(tǒng)時鐘配置。下一步內(nèi)核初始化。操作系統(tǒng)開始啟動。啟動完成。操作系統(tǒng)的啟動過程:
上電
外設(shè)初始化
系統(tǒng)時鐘配置
內(nèi)核初始化
操作系統(tǒng)啟動
啟動完成LiteOS-M內(nèi)核運行機(jī)制LitOS-M內(nèi)核初始化是根據(jù)系統(tǒng)的不同配置進(jìn)行指定模塊的初始化。LiteOS-M內(nèi)核初始化包含的各個模塊,如圖所示。LiteOS-M內(nèi)核運行機(jī)制初始化動態(tài)內(nèi)存池:假如內(nèi)存池是一間倉庫,靜態(tài)內(nèi)存池是倉庫內(nèi)固定的幾個位置,而動態(tài)內(nèi)存池是臨時分配的,沒有固定位置。初始化動態(tài)內(nèi)存池,方便進(jìn)行動態(tài)內(nèi)存管理。中斷初始化:在程序運行過程中,出現(xiàn)需要由CPU立即處理的事務(wù)時,CPU暫時中止當(dāng)前程序的執(zhí)行轉(zhuǎn)而處理這個事務(wù),這個過程叫做中斷。在為某個中斷源編寫中斷服務(wù)程序前,首先在主程序中對中斷系統(tǒng)進(jìn)行初始化操作。Task初始化:即任務(wù)初始化。檢測內(nèi)核的任務(wù)模塊是否正常運行。LiteOS-M內(nèi)核運行機(jī)制IPC初始化:IPC(InterProcessCommunication)是指內(nèi)核進(jìn)程間的通信,在不同進(jìn)程之間傳播或交換信息。對內(nèi)核通信進(jìn)行初始化,檢測內(nèi)核通信是否正常。LiteOS-M內(nèi)核運行機(jī)制IPC初始化包含如下內(nèi)容:Sem初始化:Sem(Semaphore)即信號量,信號量初始化是為配置的N個信號量申請內(nèi)存(N值可以由用戶自行配置),并把所有信號量初始化成未使用,加入到未使用鏈表中供系統(tǒng)使用。Mutex初始化:Mutex即互斥鎖,每個線程在對資源操作前都嘗試先加鎖,成功加鎖才能操作,操作結(jié)束解鎖。適用于多線程訪問共享資源?;コ怄i初始化檢測互斥鎖是否正常運行。Queue初始化:Queue即消息隊列,消息隊列是一種常用于任務(wù)間通信的數(shù)據(jù)結(jié)構(gòu)。消息隊列初始化是為任務(wù)間傳遞的消息建立一個隊列空間,存放來自任務(wù)或中斷的消息。LiteOS-M內(nèi)核運行機(jī)制Swtmr初始化:Swtmr(softwaretimer)即軟件定時器,是基于系統(tǒng)Tick時鐘中斷且由軟件來模擬的定時器,當(dāng)經(jīng)過設(shè)定的Tick時鐘計數(shù)值后會觸發(fā)用戶定義的回調(diào)函數(shù)。軟件定時器初始化是系統(tǒng)配置軟件定時器和啟動軟件定時器,對每個定時器結(jié)構(gòu)體的成員賦初值的過程。LiteOS-M內(nèi)核運行機(jī)制IdleTask初始化:即空閑任務(wù)初始化,操作系統(tǒng)會自動創(chuàng)建1個空閑任務(wù),該任務(wù)是必須存在的。其他可裁剪模塊初始化:用戶根據(jù)需要對可裁剪模塊進(jìn)行裁剪,系統(tǒng)啟動時,這些模塊進(jìn)行初始化。謝謝4.2.1中斷管理的基本概念通過本節(jié)學(xué)習(xí),您可以:了解LiteOS-M中斷管理的基本概念中斷管理的基本概念中斷是計算機(jī)術(shù)語,是指計算機(jī)運行過程中,出現(xiàn)某些意外情況需要干預(yù)時,CPU能暫時停止當(dāng)前運行的程序而去處理意外情況,處理完畢后繼續(xù)返回暫停的程序繼續(xù)運行。申請CPU中斷的請求源稱為中斷源。中斷是一種異常,異常是導(dǎo)致處理器脫離正常運行轉(zhuǎn)向執(zhí)行特殊代碼的任何事件,如果不及時進(jìn)行處理,輕則系統(tǒng)出錯,重則會導(dǎo)致系統(tǒng)毀滅性地癱瘓。1.中斷的概念中斷管理的基本概念中斷管理,就是對系統(tǒng)產(chǎn)生的中斷進(jìn)行處理的過程。作用:通過中斷機(jī)制,在外設(shè)不需要CPU介入時,CPU可以執(zhí)行其它任務(wù);當(dāng)外設(shè)需要CPU時,CPU會中斷當(dāng)前任務(wù)來響應(yīng)中斷請求??梢允笴PU避免把大量時間耗費在等待、查詢外設(shè)狀態(tài)的操作上,有效提高系統(tǒng)實時性及執(zhí)行效率。中斷管理的基本概念中斷管理的專用詞語:
名稱說明中斷號中斷請求信號特定的標(biāo)志,計算機(jī)能夠根據(jù)中斷號判斷是哪個設(shè)備提出的中斷請求。中斷請求“緊急事件”向CPU提出申請(發(fā)一個電脈沖信號),請求中斷,需要CPU暫停當(dāng)前執(zhí)行的任務(wù)處理該“緊急事件”,這一過程稱為中斷請求中斷優(yōu)先級為使系統(tǒng)能夠及時響應(yīng)并處理所有中斷,系統(tǒng)根據(jù)中斷事件的重要性和緊迫程度,將中斷源分為若干個級別,稱作中斷優(yōu)先級中斷處理程序當(dāng)外設(shè)發(fā)出中斷請求后,CPU暫停當(dāng)前的任務(wù),轉(zhuǎn)而響應(yīng)中斷請求,即執(zhí)行中斷處理程序。產(chǎn)生中斷的每個設(shè)備都有相應(yīng)的中斷處理程序中斷觸發(fā)中斷源向中斷控制器發(fā)送中斷信號,中斷控制器對中斷進(jìn)行仲裁,確定優(yōu)先級,將中斷信號發(fā)送給CPU。中斷源產(chǎn)生中斷信號的時候,會將中斷觸發(fā)器置“1”,表明該中斷源產(chǎn)生了中斷,要求CPU去響應(yīng)該中斷。中斷向量中斷服務(wù)程序的入口地址。中斷向量表存儲中斷向量的存儲區(qū),中斷向量與中斷號對應(yīng),中斷向量在中斷向量表中按照中斷號順序存儲。中斷管理的基本概念設(shè)備是發(fā)起中斷的源,當(dāng)設(shè)備需要請求CPU時,產(chǎn)生一個中斷信號,該信號發(fā)送給中斷控制器。中斷控制器分發(fā)中斷源的請求給各個CPU,CPU收到請求便中斷當(dāng)前正在執(zhí)行的任務(wù),轉(zhuǎn)而執(zhí)行中斷處理程序。2.與中斷有關(guān)的硬件與中斷有關(guān)硬件設(shè)備中斷控制器CPUVIC矢量中斷控制器GIC矢量中斷控制器中斷管理的基本概念中斷控制器:是CPU眾多外設(shè)中的一個,管理外設(shè)的外設(shè)。外設(shè)要使用CPU需先經(jīng)過中斷控制器仲裁,它一方面接收其它外設(shè)中斷引腳的輸入,另一方面它會發(fā)出中斷信號給CPU??梢酝ㄟ^對中斷控制器編程來打開和關(guān)閉中斷源、設(shè)置中斷源的優(yōu)先級和觸發(fā)方式。常用的中斷控制器:VIC(VectorInterruptController,矢量中斷控制器)GIC(GeneralInterruptController,通用中斷控制器)。在ARMCortex-M系列中使用的中斷控制器是NVIC(NestedVectorInterruptController,嵌套矢量中斷控制器)。2.與中斷有關(guān)的硬件中斷管理的基本概念中斷源:引起中斷的事件或原因,或發(fā)出中斷申請的來源。分為外部中斷源和內(nèi)部中斷源兩大類。一般中、慢速外設(shè),如鍵盤、打印機(jī)、鼠標(biāo)等數(shù)據(jù)通道,如磁盤、數(shù)據(jù)采集裝置、網(wǎng)絡(luò)等實時時鐘,如定時器定時已到,發(fā)中斷申請故障源,如電源掉電、外設(shè)故障、存儲器讀取出錯以及越限報警等事件外部中斷源中斷管理的基本概念中斷源:引起中斷的事件或原因,或發(fā)出中斷申請的來源。分為外部中斷源和內(nèi)部中斷源兩大類。由CPU執(zhí)行中斷指令I(lǐng)NTn引起的中斷由CPU的某些運算錯誤引起的中斷,如除數(shù)為0或商數(shù)超過了寄存器所能表達(dá)的范圍、溢出等為調(diào)試程序設(shè)置的中斷,如單步中斷、斷點中斷由特殊操作引起的異常,如存儲器越限、缺頁等內(nèi)部中斷源核間中斷,比如CPUA讓CPUB停止工作,產(chǎn)生調(diào)度等謝謝4.2.2中斷管理接口及應(yīng)用通過本節(jié)學(xué)習(xí),您可以:了解中斷管理接口說明及應(yīng)用中斷管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的中斷模塊提供的接口列表:1.中斷管理接口功能分類接口名描述創(chuàng)建中斷LOS_HwiCreate中斷創(chuàng)建,注冊中斷號、中斷觸發(fā)模式、中斷優(yōu)先級、中斷處理程序中斷被觸發(fā)時,會調(diào)用該中斷處理程序刪除中斷LOS_HwiDelete根據(jù)指定的中斷號,刪除中斷打開中斷LOS_IntUnLock開中斷,使能當(dāng)前處理器所有中斷響應(yīng)關(guān)閉中斷LOS_IntLock關(guān)中斷,關(guān)閉當(dāng)前處理器所有中斷響應(yīng)恢復(fù)中斷LOS_IntRestore恢復(fù)到使用LOS_IntLock、LOS_IntUnLock操作之前的中斷狀態(tài)中斷管理接口及應(yīng)用1.中斷管理接口功能分類接口名描述觸發(fā)中斷LOS_HwiTrigger通過寫中斷控制器的相關(guān)寄存器模擬外部中斷使能中斷LOS_HwiEnable通過設(shè)置寄存器,允許CPU響應(yīng)中斷禁用中斷LOS_HwiDisable通過設(shè)置寄存器,禁止CPU響應(yīng)中斷清除中斷寄存器狀態(tài)LOS_HwiClear中斷手動清除清除中斷號對應(yīng)的中斷寄存器的狀態(tài)位,此接口依賴中斷控制器版本,非必需設(shè)置中斷優(yōu)先級LOS_HwiSetPriority設(shè)置中斷的優(yōu)先級獲取中斷號LOS_HwiCurIrqNum獲取當(dāng)前中斷號OpenHarmonyLiteOS-M內(nèi)核的中斷模塊提供的接口列表:中斷管理接口及應(yīng)用中斷管理的一般開發(fā)流程如下:調(diào)用中斷創(chuàng)建接口LOS_HwiCreate創(chuàng)建中斷。調(diào)用LOS_HwiTrigger接口觸發(fā)指定中斷,或通過外設(shè)觸發(fā)中斷。調(diào)用LOS_HwiDelete接口刪除指定中斷,此接口根據(jù)實際情況使用,開發(fā)者判斷是否需要刪除中斷。2.中斷管理應(yīng)用中斷管理接口及應(yīng)用進(jìn)行中斷管理操作時的注意事項:在進(jìn)行中斷管理時,要根據(jù)具體的硬件來配置支持的最大中斷數(shù),和可設(shè)置的中斷優(yōu)先級個數(shù)。中斷處理程序耗時不能過長,否則會影響CPU對中斷的及時響應(yīng)。中斷響應(yīng)過程中不能直接、間接執(zhí)行引起調(diào)度的LOS_Schedule等函數(shù)。中斷恢復(fù)LOS_IntRestore()的入?yún)⒈仨毷桥c之對應(yīng)的LOS_IntLock()的返回值(即關(guān)中斷之前的CPSR值)。Cortex-M系列處理器中0-15中斷為內(nèi)部使用,因此不建議用戶去申請和創(chuàng)建。2.中斷管理應(yīng)用中斷管理接口及應(yīng)用中斷管理要實現(xiàn)以下功能:(1)創(chuàng)建中斷;(2)觸發(fā)中斷;(3)刪除中斷。1.#include<stdio.h>2.#include"hi_io.h"3.#include"los_hwi.h"4.#include"hi_gpio.h"5.#include"los_task.h"6.#include"ohos_init.h"7.#include"ohos_types.h"具體代碼如下:中斷管理接口及應(yīng)用
/**中斷響應(yīng)函數(shù)**/
voidOhos_Interrupt_TestIRQHandler(void){printf("\r\n!!!ThisistheOhos_Test_IRQHandler!!!\r\n");}
/**按鍵中斷函數(shù)**/
voidOhos_Interrupt_Gpioinit(void){hi_gpio_init();/**GPIO初始化**/
/**設(shè)置管腳11的復(fù)用功能為GPIO**/
hi_io_set_func(HI_GPIO_IDX_11,HI_IO_FUNC_GPIO_11_GPIO);/**設(shè)置管腳11為上拉狀態(tài)**/
hi_io_set_pull(HI_GPIO_IDX_11,HI_IO_PULL_UP);/**設(shè)置GPIO11的方向為輸入**/
hi_gpio_set_dir(HI_GPIO_IDX_11,HI_GPIO_DIR_IN);/**使能GPIO11的斯密特觸發(fā)器**/
hi_io_set_schmitt(HI_GPIO_IDX_11,1);/**設(shè)置GPIO11的中斷功能**/
hi_gpio_register_isr_function(HI_GPIO_IDX_11,HI_INT_TYPE_EDGE,HI_GPIO_EDGE_FALL_LEVEL_LOW,Ohos_Interrupt_TestIRQHandler,NULL);printf("\r\n!!!Thisisthehi_gpio_init!!!\r\n");}中斷管理接口及應(yīng)用
/**任務(wù)創(chuàng)建函數(shù)**/
voidInterrupt_hi(void){unsignedinttask_ohos;//ohos任務(wù)ID
unsignedintret;/**創(chuàng)建中斷**/LOS_HwiCreate(HI_GPIO_IDX_11,NULL,NULL,Ohos_Interrupt_TestIRQHandler,NULL);
if(ret==LOS_OK){printf("HwiLOS_HwiCreatesuccess!\r\n");}else{printf("HwiLOS_HwiCreatefailed!\r\n");returnLOS_NOK;}LOS_IntUnLock();//開啟中斷
TSK_INIT_PARAM_Staskoh;//定義ohos任務(wù)結(jié)構(gòu)體
taskoh.pfnTaskEntry=(TSK_ENTRY_FUNC)Ohos_Interrupt_Gpioinit;//任務(wù)函數(shù)
taskoh.uwStackSize=1028;//任務(wù)堆棧
taskoh.pcName="Ohos_Interrupt_Gpioinit";//任務(wù)名稱
taskoh.usTaskPrio=12;//任務(wù)優(yōu)先級
中斷管理接口及應(yīng)用
/**創(chuàng)建任務(wù)**/
if(LOS_TaskCreate(&task_ohos,&taskoh)!=LOS_OK){printf("Ohos_Interrupt_GpioinitcreateFailed!\r\n");}}/**運行函數(shù)**/
SYS_RUN(Interrupt_hi);中斷管理接口及應(yīng)用代碼編譯后的運行結(jié)果:謝謝4.3.1任務(wù)管理的基本概念通過本節(jié)學(xué)習(xí),您可以:了解任務(wù)管理的基本概念任務(wù)管理的基本概念任務(wù)管理:LiteOS是一個支持多任務(wù)的操作系統(tǒng)。在LiteOS中,一個任務(wù)表示一個線程。當(dāng)有多個任務(wù)存在時,就需要對這些任務(wù)進(jìn)行管理,實現(xiàn)多個任務(wù)同時運行的目的。OpenHarmonyLiteOS-M的任務(wù)模塊可以給用戶提供多個任務(wù),實現(xiàn)任務(wù)間的切換和通信,幫助用戶管理業(yè)務(wù)程序流程。這樣用戶可以將更多的精力投入到業(yè)務(wù)功能的實現(xiàn)中。LiteOS-M的任務(wù)模塊具有以下特點:LiteOS中的任務(wù)是搶占式調(diào)度機(jī)制,同時相同優(yōu)先級任務(wù)支持時間片輪轉(zhuǎn)調(diào)度方式。高優(yōu)先級的任務(wù)可打斷低優(yōu)先級任務(wù),低優(yōu)先級任務(wù)必須在高優(yōu)先級任務(wù)阻塞或結(jié)束后才能得到調(diào)度。LiteOS的任務(wù)一共有32個優(yōu)先級(0-31),最高優(yōu)先級為0,最低優(yōu)先級為31。1.
任務(wù)管理概念任務(wù)管理的基本概念(1)任務(wù)狀態(tài)(2)任務(wù)狀態(tài)遷移(3)任務(wù)ID(4)任務(wù)優(yōu)先級(5)任務(wù)入口函數(shù)2.與任務(wù)管理有關(guān)術(shù)語(6)任務(wù)棧(7)任務(wù)上下文(8)任務(wù)控制塊(TCB)(9)任務(wù)切換任務(wù)管理的基本概念(1)任務(wù)狀態(tài)任務(wù)有多種運行狀態(tài)。系統(tǒng)初始化完成后,創(chuàng)建的任務(wù)就可以在系統(tǒng)中競爭一定的資源,由內(nèi)核進(jìn)行調(diào)度。任務(wù)狀態(tài)通常分為以下四種:就緒(Ready):該任務(wù)在就緒隊列中,只等待CPU。運行(Running):該任務(wù)正在執(zhí)行。阻塞(Blocked):該任務(wù)不在就緒隊列中。包含任務(wù)被掛起(suspend狀態(tài))、任務(wù)被延時(delay狀態(tài))、任務(wù)正在等待信號量、讀寫隊列或者等待事件等。退出態(tài)(Dead):該任務(wù)運行結(jié)束,等待系統(tǒng)回收資源。2.與任務(wù)管理有關(guān)術(shù)語任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移就緒態(tài)→運行態(tài):任務(wù)創(chuàng)建后進(jìn)入就緒態(tài),就緒態(tài)的任務(wù)加入就緒隊列。發(fā)生任務(wù)切換時,就緒隊列中最高優(yōu)先級的任務(wù)被執(zhí)行,從而進(jìn)入運行態(tài),同時該任務(wù)從就緒隊列中移出。運行態(tài)→就緒態(tài):有更高優(yōu)先級任務(wù)創(chuàng)建或者恢復(fù)后,會發(fā)生任務(wù)調(diào)度,此刻就緒隊列中最高優(yōu)先級任務(wù)變?yōu)檫\行態(tài),那么原先運行的任務(wù)由運行態(tài)變?yōu)榫途w態(tài),依然在就緒隊列中。
就緒態(tài)
運行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運行任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移就緒態(tài)→阻塞態(tài):任務(wù)也有可能在就緒態(tài)時被阻塞(掛起),此時任務(wù)狀態(tài)由就緒態(tài)變?yōu)樽枞麘B(tài),該任務(wù)從就緒隊列中移出,不會參與任務(wù)調(diào)度,直到該任務(wù)被恢復(fù)。阻塞態(tài)→就緒態(tài):阻塞的任務(wù)被恢復(fù)后(任務(wù)恢復(fù)、延時時間超時、讀信號量超時或讀到信號量等),此時被恢復(fù)的任務(wù)會被加入就緒隊列,從而由阻塞態(tài)變成就緒態(tài)。
就緒態(tài)
運行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運行任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移運行態(tài)→退出態(tài):運行中的任務(wù)運行結(jié)束,任務(wù)狀態(tài)由運行態(tài)變?yōu)橥顺鰬B(tài)。退出態(tài)包含任務(wù)運行結(jié)束的正常退出狀態(tài)以及Invalid(無效)狀態(tài)。例如,任務(wù)運行結(jié)束但是沒有自刪除,對外呈現(xiàn)的就是Invalid狀態(tài),即退出態(tài)。阻塞態(tài)→退出態(tài):阻塞的任務(wù)調(diào)用刪除接口,任務(wù)狀態(tài)由阻塞態(tài)變?yōu)橥顺鰬B(tài)。
就緒態(tài)
運行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運行任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移運行態(tài)→阻塞態(tài):正在運行的任務(wù)發(fā)生阻塞(掛起、延時、讀信號量等)時,將該任務(wù)插入到對應(yīng)的阻塞隊列中,任務(wù)狀態(tài)由運行態(tài)變成阻塞態(tài),然后發(fā)生任務(wù)切換,運行就緒隊列中最高優(yōu)先級任務(wù)。
就緒態(tài)
運行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運行任務(wù)管理的基本概念(3)任務(wù)ID在任務(wù)創(chuàng)建時通過參數(shù)返回給用戶。系統(tǒng)中任務(wù)ID號是唯一的,是任務(wù)的重要標(biāo)識。用戶可以通過任務(wù)ID對指定任務(wù)進(jìn)行任務(wù)掛起、任務(wù)恢復(fù)、查詢?nèi)蝿?wù)名等操作。(4)任務(wù)優(yōu)先級優(yōu)先級表示任務(wù)執(zhí)行的優(yōu)先順序。任務(wù)的優(yōu)先級決定了在發(fā)生任務(wù)切換時即將要執(zhí)行的任務(wù),就緒隊列中最高優(yōu)先級的任務(wù)將得到執(zhí)行。(5)任務(wù)入口函數(shù)新任務(wù)得到調(diào)度后將執(zhí)行的函數(shù)。該函數(shù)由用戶實現(xiàn),在任務(wù)創(chuàng)建時,通過任務(wù)創(chuàng)建結(jié)構(gòu)體設(shè)置。(6)任務(wù)棧每個任務(wù)都擁有一個獨立的棧空間,我們稱為任務(wù)棧。??臻g里保存的信息包含局部變量、寄存器、函數(shù)參數(shù)、函數(shù)返回地址等。任務(wù)管理的基本概念(7)任務(wù)上下文任務(wù)在運行過程中使用的一些資源,如寄存器等,稱為任務(wù)上下文。當(dāng)這個任務(wù)掛起時,其他任務(wù)繼續(xù)執(zhí)行,可能會修改寄存器等資源中的值。如果任務(wù)切換時沒有保存任務(wù)上下文,可能會導(dǎo)致任務(wù)恢復(fù)后出現(xiàn)未知錯誤。因此在任務(wù)切換時會將切出任務(wù)的任務(wù)上下文信息,保存在自身的任務(wù)棧中,以便任務(wù)恢復(fù)后,從??臻g中恢復(fù)掛起時的上下文信息,從而繼續(xù)執(zhí)行掛起時被打斷的代碼。(8)任務(wù)控制塊(TCB)每個任務(wù)都含有一個任務(wù)控制塊(TaskControlBlock,TCB)。TCB包含了任務(wù)上下文棧指針(stackpointer)、任務(wù)狀態(tài)、任務(wù)優(yōu)先級、任務(wù)ID、任務(wù)名、任務(wù)棧大小等信息。TCB可以反映出每個任務(wù)運行情況。(9)任務(wù)切換任務(wù)切換包含獲取就緒隊列中最高優(yōu)先級任務(wù)、切出任務(wù)上下文保存、切入任務(wù)上下文恢復(fù)等動作。謝謝4.3.2任務(wù)管理接口及應(yīng)用通過本節(jié)學(xué)習(xí),您可以:了解任務(wù)管理接口說明及應(yīng)用任務(wù)管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:1.
任務(wù)管理接口功能分類接口名接口描述創(chuàng)建和刪除任務(wù)
LOS_TaskCreateOnly創(chuàng)建任務(wù),并使該任務(wù)進(jìn)入suspend狀態(tài)LOS_TaskCreate創(chuàng)建任務(wù),并使該任務(wù)進(jìn)入ready狀態(tài),如果就緒隊列中沒有更高優(yōu)先級的任務(wù),則運行該任務(wù)LOS_TaskDelete刪除指定的任務(wù)任務(wù)管理接口及應(yīng)用1.
任務(wù)管理接口功能分類接口名接口描述控制任務(wù)狀態(tài)
LOS_TaskResume恢復(fù)掛起的任務(wù),使該任務(wù)進(jìn)入ready狀態(tài)LOS_TaskSuspend掛起指定的任務(wù),然后切換任務(wù)LOS_TaskJoin掛起當(dāng)前任務(wù),等待指定任務(wù)運行結(jié)束并回收其任務(wù)控制塊資源LOS_TaskDelay任務(wù)延時等待,釋放CPU,等待時間到期后該任務(wù)會重新進(jìn)入ready狀態(tài)。傳入?yún)?shù)為Tick數(shù)目LOS_Msleep任務(wù)延時等待,釋放CPU,等待時間到期后該任務(wù)會重新進(jìn)入ready狀態(tài)。傳入?yún)?shù)為毫秒數(shù)LOS_TaskYield當(dāng)前任務(wù)時間片設(shè)置為0,釋放CPU,觸發(fā)調(diào)度運行就緒任務(wù)隊列中優(yōu)先級最高的任務(wù)OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:任務(wù)管理接口及應(yīng)用功能分類接口名接口描述控制任務(wù)調(diào)度LOS_TaskLock鎖任務(wù)調(diào)度,但任務(wù)仍可被中斷打斷LOS_TaskUnlock解鎖任務(wù)調(diào)度LOS_Schedule觸發(fā)任務(wù)調(diào)度控制任務(wù)優(yōu)先級LOS_CurTaskPriSet設(shè)置當(dāng)前任務(wù)的優(yōu)先級LOS_TaskPriSet設(shè)置指定任務(wù)的優(yōu)先級LOS_TaskPriGet獲取指定任務(wù)的優(yōu)先級OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:1.
任務(wù)管理接口任務(wù)管理接口及應(yīng)用功能分類接口名接口描述獲取任務(wù)信息LOS_CurTaskIDGet獲取當(dāng)前任務(wù)的IDLOS_NextTaskIDGet獲取任務(wù)就緒隊列中優(yōu)先級最高的任務(wù)的IDLOS_NewTaskIDGet獲取任務(wù)就緒隊列中優(yōu)先級最高的任務(wù)的IDLOS_CurTaskNameGet獲取當(dāng)前任務(wù)的名稱LOS_TaskNameGet獲取指定任務(wù)的名稱LOS_TaskStatusGet獲取指定任務(wù)的狀態(tài)LOS_TaskInfoGet獲取指定任務(wù)的信息,包括任務(wù)狀態(tài)、優(yōu)先級、任務(wù)棧大小、棧頂指針SP、任務(wù)入口函數(shù)、已使用的任務(wù)棧大小等LOS_TaskIsRunning獲取任務(wù)模塊是否已經(jīng)開始調(diào)度運行。任務(wù)信息維測LOS_TaskSwitchInfoGet獲取任務(wù)切換信息,需要開啟編譯控制宏:LOSCFG_BASE_CORE_EXC_TSK_SWITCH。OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:1.
任務(wù)管理接口任務(wù)管理接口及應(yīng)用任務(wù)管理的一般開發(fā)流程如下:(1)鎖任務(wù)調(diào)度LOS_TaskLock,防止高優(yōu)先級任務(wù)調(diào)度。(2)創(chuàng)建任務(wù)LOS_TaskCreate。(3)解鎖任務(wù)LOS_TaskUnlock,讓任務(wù)按照優(yōu)先級進(jìn)行調(diào)度。(4)延時任務(wù)LOS_TaskDelay,任務(wù)延時等待。(5)掛起指定的任務(wù)LOS_TaskSuspend,任務(wù)掛起等待恢復(fù)操作。(6)恢復(fù)掛起的任務(wù)LOS_TaskResume。2.任務(wù)管理應(yīng)用任務(wù)管理接口及應(yīng)用進(jìn)行任務(wù)管理時的注意事項如下:執(zhí)行Idle任務(wù)時,會對待回收鏈表中的任務(wù)控制塊和任務(wù)棧進(jìn)行回收。任務(wù)名是指針,并沒有分配空間,在設(shè)置任務(wù)名時,禁止將局部變量的地址賦值給任務(wù)名指針。任務(wù)棧的大小按8字節(jié)大小對齊。確定任務(wù)棧大小的原則是,夠用就行,多了浪費,少了任務(wù)棧溢出。掛起當(dāng)前任務(wù)時,如果已經(jīng)鎖任務(wù)調(diào)度,則無法掛起。Idle任務(wù)及軟件定時器任務(wù)不能被掛起或者刪除。在中斷處理函數(shù)中或者在鎖任務(wù)的情況下,執(zhí)行LOS_TaskDelay會失敗。鎖任務(wù)調(diào)度,并不關(guān)中斷,因此任務(wù)仍可被中斷打斷。鎖任務(wù)調(diào)度必須和解鎖任務(wù)調(diào)度配合使用。設(shè)置任務(wù)優(yōu)先級時可能會發(fā)生任務(wù)調(diào)度。任務(wù)管理接口及應(yīng)用可配置的系統(tǒng)最大任務(wù)數(shù):整個系統(tǒng)的任務(wù)總個數(shù),而非用戶能使用的任務(wù)個數(shù)。例如:系統(tǒng)軟件定時器多占用一個任務(wù)資源,那么用戶能使用的任務(wù)資源就會減少一個。LOS_CurTaskPriSet和LOS_TaskPriSet接口不能在中斷中使用,也不能用于修改軟件定時器任務(wù)的優(yōu)先級。LOS_TaskPriGet接口傳入的taskID對應(yīng)的任務(wù)未創(chuàng)建或者超過最大任務(wù)數(shù),統(tǒng)一返回-1。在刪除任務(wù)時要保證任務(wù)申請的資源(如互斥鎖、信號量等)已被釋放。任務(wù)管理接口及應(yīng)用具體代碼如下:#include<stdio.h>#include"los_task.h"#include"ohos_init.h"#include"ohos_types.h"
任務(wù)管理的應(yīng)用:基本的任務(wù)操作方法,包含2個不同優(yōu)先級任務(wù)的創(chuàng)建、任務(wù)延時、任務(wù)鎖與解鎖調(diào)度、掛起和恢復(fù)等操作。任務(wù)管理接口及應(yīng)用具體代碼如下:#include<stdio.h>#include"los_task.h"#include"ohos_init.h"#include"ohos_types.h"
/**每隔1秒輸出“hellohi3861”函數(shù)**/
voidTask_hello_hi3861(void){
while(1){
printf("Hellohi3861!!!\r\n");LOS_Msleep(1000);
}
}
/**每隔2秒輸出“helloohos”函數(shù)**/
voidTask_hello_ohos(void){
while(1){
printf("Helloohos!!!\r\n");
LOS_Msleep(2000);
}}任務(wù)管理接口及應(yīng)用
/**任務(wù)創(chuàng)建函數(shù)**/
voidTask_hi(void)
{
unsignedinttask_ohos;//ohos任務(wù)ID
unsignedinttask_hi3861;//hi3861任務(wù)ID
TSK_INIT_PARAM_Staskoh;//定義ohos任務(wù)結(jié)構(gòu)體
TSK_INIT_PARAM_Staskhi;//定義hi3861任務(wù)結(jié)構(gòu)體
taskoh.pfnTaskEntry=(TSK_ENTRY_FUNC)Task_hello_ohos;//任務(wù)函數(shù)
taskoh.uwStackSize=1028;//任務(wù)堆棧
taskoh.pcName="Task_hello_ohos";//任務(wù)名稱
taskoh.usTaskPrio=12;//任務(wù)優(yōu)先級
/**創(chuàng)建任務(wù)**/
if(LOS_TaskCreate(&task_ohos,&taskoh)!=LOS_OK)
{
printf("Task_hello_ohoscreateFailed!\r\n");
}任務(wù)管理接口及應(yīng)用
taskhi.pfnTaskEntry=(TSK_ENTRY_FUNC)Task_hello_hi3861;//任務(wù)函數(shù)
taskhi.uwStackSize=1028;//任務(wù)堆棧
taskhi.pcName="Task_hello_hi3861";//任務(wù)名稱
taskhi.usTaskPrio=13;//任務(wù)優(yōu)先級
/**創(chuàng)建任務(wù)**/
if(LOS_TaskCreate(&task_hi3861,&taskhi)!=LOS_OK)
{
printf("Task_hello_hi3861createFailed!\r\n");
}
}
/**運行函數(shù)**/
SYS_RUN(Task_hi);任務(wù)管理接口及應(yīng)用編譯運行的結(jié)果如下:謝謝4.4.1內(nèi)存管理的基本概念通過本節(jié)學(xué)習(xí),您可以:了解內(nèi)存管理的基本概念內(nèi)存管理的基本概念內(nèi)存管理:指軟件運行時對計算機(jī)內(nèi)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效、快速的分配,并且在適當(dāng)?shù)臅r候釋放和回收內(nèi)存資源。計算機(jī)內(nèi)存的缺點:容量有限,不能一次性將所有的用戶進(jìn)程和系統(tǒng)進(jìn)程全部裝入內(nèi)存。1.
內(nèi)存管理概述將內(nèi)存分配給計算機(jī)程序的兩種方式是靜態(tài)內(nèi)存分配和動態(tài)內(nèi)存分配。靜態(tài)內(nèi)存是指在靜態(tài)內(nèi)存池中分配用戶初始化時預(yù)設(shè)大小的內(nèi)存塊。靜態(tài)內(nèi)存一旦分配給程序,靜態(tài)內(nèi)存將保留在整個程序中,即從程序被編譯的那一刻到程序完成其執(zhí)行的那一刻。動態(tài)內(nèi)存是指在動態(tài)內(nèi)存池中分配用戶指定大小的內(nèi)存塊。動態(tài)分配的內(nèi)存可以在程序執(zhí)行期間隨時釋放。甚至分配的內(nèi)存也可以調(diào)整大小,即可以增加或減少內(nèi)存大小。內(nèi)存管理的基本概念在OpenHarmony系統(tǒng)中,內(nèi)存管理模塊管理系統(tǒng)的內(nèi)存資源,它是操作系統(tǒng)的核心模塊之一,主要包括內(nèi)存的初始化、分配以及釋放。OpenHarmonyLiteOS-M的內(nèi)存管理分為靜態(tài)內(nèi)存管理和動態(tài)內(nèi)存管理。內(nèi)存管理的功能:地址轉(zhuǎn)換:將程序中的邏輯地址轉(zhuǎn)換成內(nèi)存中的物理地址。存儲保護(hù):保證各個任務(wù)在自己的內(nèi)存空間內(nèi)運行,互不干擾。內(nèi)存的分配與回收:當(dāng)進(jìn)程創(chuàng)建后系統(tǒng)會為他們分配內(nèi)存空間,當(dāng)結(jié)束后內(nèi)存空間也會被回收。內(nèi)存空間的擴(kuò)充:利用虛擬存儲技術(shù)或自動覆蓋技術(shù),從邏輯上擴(kuò)充內(nèi)存。內(nèi)存管理的基本概念靜態(tài)內(nèi)存是在靜態(tài)內(nèi)存池中分配用戶初始化時預(yù)設(shè)大小的內(nèi)存塊。內(nèi)存池在創(chuàng)建時先向系統(tǒng)申請一大塊內(nèi)存,然后分成大小相等的多個小內(nèi)存塊,小內(nèi)存塊通過鏈表連接起來。2.靜態(tài)內(nèi)存管理內(nèi)存池:物理內(nèi)存中允許存在多個大小不同的內(nèi)存池,每一個內(nèi)存池又由多個大小相同的空閑內(nèi)存塊組成。內(nèi)存管理的基本概念LiteOS-M的靜態(tài)內(nèi)存池由一個控制塊LOS_MEMBOX_INFO和若干相同大小的內(nèi)存塊LOS_MEMBOX_NODE構(gòu)成。內(nèi)存管理的基本概念LOS_MEMBOX_INFO控制塊位于內(nèi)存池頭部,用于內(nèi)存塊管理,包含內(nèi)容:內(nèi)存塊大小uwBlkSize內(nèi)存塊數(shù)量uwBlkNum,已分配使用的內(nèi)存塊數(shù)量uwBlkCnt空閑內(nèi)存塊鏈表stFreeList。內(nèi)存塊的申請和釋放以塊大小為粒度,每個內(nèi)存塊包含指向下一個內(nèi)存塊的指針pstNext。內(nèi)存管理的基本概念動態(tài)內(nèi)存管理:是在內(nèi)存資源充足的情況下,根據(jù)用戶需求,從系統(tǒng)配置的內(nèi)存池中分配相應(yīng)大小的內(nèi)存塊。當(dāng)用戶不需要該內(nèi)存塊時,釋放回系統(tǒng)供下一次使用。LiteOS系統(tǒng)中動態(tài)內(nèi)存管理系統(tǒng)通過分組來管理內(nèi)存。系統(tǒng)將所有內(nèi)存分成223個分組,每個分組負(fù)責(zé)管理特定大小的空閑內(nèi)存。在內(nèi)存池初始化時會將所有剩余內(nèi)存轉(zhuǎn)換成一個很大的空閑內(nèi)存塊,大的空閑內(nèi)存塊會被分割成小的內(nèi)存塊。切割后的空閑內(nèi)存塊會按大小重新分組,釋放時也會將回收內(nèi)存塊按大小進(jìn)行分組。3.
動態(tài)內(nèi)存管理內(nèi)存管理的基本概念動態(tài)內(nèi)存池是通過內(nèi)存池管理信息和內(nèi)存塊管理信息來共同管理的。內(nèi)存池管理信息在內(nèi)存池的頭部,內(nèi)存塊信息在每個空閑或已分配內(nèi)存的頭部。內(nèi)存管理的基本概念內(nèi)存池管理信息(OsMemPoolHead):包含內(nèi)存池信息(OsMemPoolInfo)、空閑內(nèi)存鏈表位圖數(shù)組(freeListBitmap[])和空閑鏈表數(shù)組(freeList[])。內(nèi)存池信息:包含內(nèi)存池起始地址及堆區(qū)域總大小,內(nèi)存池屬性??臻e內(nèi)存鏈表位圖數(shù)組:標(biāo)記所對應(yīng)的空閑內(nèi)存塊是否存在??臻e鏈表數(shù)組:包含223個空閑內(nèi)存頭節(jié)點信息,每個空閑內(nèi)存頭節(jié)點信息維護(hù)內(nèi)存節(jié)點頭和空閑鏈表中的前驅(qū)、后繼空閑內(nèi)存節(jié)點。內(nèi)存管理的基本概念內(nèi)存塊管理信息(OsMemNodeHead):用于管理空閑內(nèi)存,每個數(shù)組成員對應(yīng)一個內(nèi)存分組??臻e內(nèi)存塊分組的管理是通過內(nèi)存池管理信息的空閑內(nèi)存鏈表位圖數(shù)組和空閑鏈表數(shù)組來完成的。謝謝4.4.2靜態(tài)內(nèi)存管理接口及應(yīng)用通過本節(jié)學(xué)習(xí),您可以:了解靜態(tài)內(nèi)存管理接口說明及應(yīng)用靜態(tài)內(nèi)存管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的靜態(tài)內(nèi)存模塊提供了初始化靜態(tài)內(nèi)存池、清除靜態(tài)內(nèi)存塊內(nèi)容、申請、釋放靜態(tài)內(nèi)存、獲取打印靜態(tài)內(nèi)存池信息等幾種功能。1.
靜態(tài)內(nèi)存管理接口功能分類接口名描述初始化靜態(tài)內(nèi)存池LOS_MemboxInit初始化一個靜態(tài)內(nèi)存池,根據(jù)入?yún)⒃O(shè)定其起始地址、總大小及每個內(nèi)存塊大小。清除靜態(tài)內(nèi)存塊內(nèi)容LOS_MemboxClr清零從靜態(tài)內(nèi)存池中申請的靜態(tài)內(nèi)存塊的內(nèi)容。申請、釋放靜態(tài)內(nèi)存LOS_MemboxAlloc從指定的靜態(tài)內(nèi)存池中申請一塊靜態(tài)內(nèi)存塊。LOS_MemboxFree釋放從靜態(tài)內(nèi)存池中申請的一塊靜態(tài)內(nèi)存塊。獲取、打印靜態(tài)內(nèi)存池信息LOS_MemboxStatisticsGet獲取指定靜態(tài)內(nèi)存池的信息,包括內(nèi)存池中總內(nèi)存塊數(shù)量、已經(jīng)分配出去的內(nèi)存塊數(shù)量、每個內(nèi)存塊的大小。LOS_ShowBox打印指定靜態(tài)內(nèi)存池所有節(jié)點信息,打印等級是LOG_INFO_LEVEL(當(dāng)前打印等級配置是PRINT_LEVEL),包括內(nèi)存池起始地址、內(nèi)存塊大小、總內(nèi)存塊數(shù)量、每個空閑內(nèi)存塊的起始地址、所有內(nèi)存塊的起始地址。靜態(tài)內(nèi)存管理接口及應(yīng)用當(dāng)用戶需要使用固定長度的內(nèi)存時,可以通過靜態(tài)內(nèi)存分配的方式獲取內(nèi)存,一旦使用完畢,通過靜態(tài)內(nèi)存釋放函數(shù)歸還所占用內(nèi)存,使之可以重復(fù)使用。靜態(tài)內(nèi)存管理的一般開發(fā)流程如下:規(guī)劃一片內(nèi)存區(qū)域作為靜態(tài)內(nèi)存池。調(diào)用LOS_MemboxInit初始化靜態(tài)內(nèi)存池。初始化會將入?yún)⒅付ǖ膬?nèi)存區(qū)域分割為N塊(N值取決于靜態(tài)內(nèi)存總大小和塊大?。?,將所有內(nèi)存塊掛到空閑鏈表,在內(nèi)存起始處放置控制頭。調(diào)用LOS_MemboxAlloc接口分配靜態(tài)內(nèi)存。系統(tǒng)將會從空閑鏈表中獲取第一個空閑塊,并返回該內(nèi)存塊的起始地址。調(diào)用LOS_MemboxClr接口,將入?yún)⒌刂穼?yīng)的內(nèi)存塊清零。調(diào)用LOS_MemboxFree接口,將該內(nèi)存塊加入空閑鏈表。2.靜態(tài)內(nèi)存管理應(yīng)用謝謝4.4.3動態(tài)管理接口及應(yīng)用通過本節(jié)學(xué)習(xí),您可以:了解動態(tài)管理接口說明及應(yīng)用動態(tài)管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的動態(tài)內(nèi)存模塊提供了初始化內(nèi)存池、申請釋放動態(tài)內(nèi)存、獲取內(nèi)存池信息、獲取內(nèi)存塊信息等幾種功能。1.動態(tài)內(nèi)存管理接口功能分類接口名描述初始化和刪除內(nèi)存池
LOS_MemInit初始化一塊指定的動態(tài)內(nèi)存池,大小為sizeLOS_MemDeInit刪除指定內(nèi)存池,僅打開編譯控制開關(guān)LOSCFG_MEM_MUL_POOL時有效申請、釋放動態(tài)內(nèi)存
LOS_MemAlloc從指定動態(tài)內(nèi)存池中申請size長度的內(nèi)存LOS_MemFree釋放從指定動態(tài)內(nèi)存中申請的內(nèi)存LOS_MemRealloc按size大小重新分配內(nèi)存塊,并將原內(nèi)存塊內(nèi)容拷貝到新內(nèi)存塊。如果新內(nèi)存塊申請成功,則釋放原內(nèi)存塊動態(tài)管理接口及應(yīng)用功能分類接口名描述獲取內(nèi)存池信息
LOS_MemPoolSizeGet獲取指定動態(tài)內(nèi)存池的總大小LOS_MemTotalUsedGet獲取指定動態(tài)內(nèi)存池的總使用量大小LOS_MemInfoGet獲取指定內(nèi)存池的內(nèi)存結(jié)構(gòu)信息,包括空閑內(nèi)存大小、已使用內(nèi)存大小、空閑內(nèi)存塊數(shù)量、已使用的內(nèi)存塊數(shù)量、最大的空閑內(nèi)存塊大小LOS_MemPoolList打印系統(tǒng)中已初始化的所有內(nèi)存池,包括內(nèi)存池的起始地址、內(nèi)存池大小、空閑內(nèi)存總大小、已使用內(nèi)存總大小、最大的空閑內(nèi)存塊大小、空閑內(nèi)存塊數(shù)量、已使用的內(nèi)存塊數(shù)量。僅打開編譯控制開關(guān)LOSCFG_MEM_MUL_POOL時有效。動態(tài)管理接口及應(yīng)用功能分類接口名描述獲取內(nèi)存塊信息
LOS_MemFreeNodeShow打印
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 居間合同2025年度版:定義、屬性與服務(wù)質(zhì)量評估體系3篇
- 二零二五年度能源項目權(quán)益轉(zhuǎn)讓與投資合同3篇
- 二零二五年軟件開發(fā)服務(wù)合同4篇
- 二零二五版智能LED戶外廣告平臺合作項目合同3篇
- 影視器材租賃與技術(shù)服務(wù)2025年度合同3篇
- 二零二五年度房地產(chǎn)開發(fā)項目造價咨詢合同6篇
- 二零二五版搬家運輸合同:搬家運輸途中物品丟失賠償3篇
- 二零二五版海鮮加盟店日常運營管理與維護(hù)服務(wù)合同范本2篇
- 二零二五年度車輛轉(zhuǎn)讓附帶綠色出行獎勵政策合同3篇
- 二零二五年度智能辦公桌椅研發(fā)合作合同2篇
- 一年級語文雨點兒-教學(xué)課件【希沃白板初階培訓(xùn)結(jié)營大作業(yè)】
- 替格瑞洛藥物作用機(jī)制、不良反應(yīng)機(jī)制、與氯吡格雷區(qū)別和合理使用
- 河北省大學(xué)生調(diào)研河北社會調(diào)查活動項目申請書
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領(lǐng)導(dǎo)力
- 企業(yè)人員組織結(jié)構(gòu)圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 兩段焙燒除砷技術(shù)簡介 - 文字版(1)(2)課件
- 實習(xí)證明模板免費下載【8篇】
- 復(fù)旦大學(xué)用經(jīng)濟(jì)學(xué)智慧解讀中國課件03用大歷史觀看中國社會轉(zhuǎn)型
- 案件受理登記表模版
評論
0/150
提交評論