




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.1.1LiteOS-M內(nèi)核架構(gòu)通過(guò)本節(jié)學(xué)習(xí),您可以:了解LiteOS-M內(nèi)核架構(gòu)LiteOS-M內(nèi)核架構(gòu)LiteOS-M內(nèi)核架構(gòu)包含了硬件相關(guān)層以及硬件無(wú)關(guān)層。硬件相關(guān)層硬件無(wú)關(guān)層LiteOS-M內(nèi)核架構(gòu)硬件相關(guān)層按不同編譯工具鏈、芯片架構(gòu)分類(lèi),提供統(tǒng)一的HAL(HardwareAbstractionLayer)接口。硬件架構(gòu)支持ARM、RISC-V、Xtensa、C-SKY等內(nèi)核,在此基礎(chǔ)上抽象出統(tǒng)一的硬件架構(gòu)。支持驅(qū)動(dòng)框架HDF,統(tǒng)一驅(qū)動(dòng)標(biāo)準(zhǔn),為設(shè)備廠(chǎng)商提供統(tǒng)一的接入方式。硬件相關(guān)層LiteOS-M內(nèi)核架構(gòu)基礎(chǔ)內(nèi)核模塊提供基礎(chǔ)能力。包含任務(wù)管理、內(nèi)存管理、中斷管理、通信機(jī)制、調(diào)度器、與硬件相關(guān)管理等。硬件無(wú)關(guān)層擴(kuò)展模塊提供文件系統(tǒng)、網(wǎng)絡(luò)、調(diào)測(cè)工具、動(dòng)態(tài)鏈接、低功耗框架等可選組件。KAL模塊提供統(tǒng)一的標(biāo)準(zhǔn)接口,包括POSIX和CMSIS標(biāo)準(zhǔn)庫(kù)接口。謝謝4.1.2LiteOS-M內(nèi)核運(yùn)行機(jī)制通過(guò)本節(jié)學(xué)習(xí),您可以:了解LiteOS-M內(nèi)核運(yùn)行機(jī)制LiteOS-M內(nèi)核運(yùn)行機(jī)制設(shè)備開(kāi)始上電。上電之后,各種外設(shè)進(jìn)行初始化。初始化完畢開(kāi)始系統(tǒng)時(shí)鐘配置。下一步內(nèi)核初始化。操作系統(tǒng)開(kāi)始啟動(dòng)。啟動(dòng)完成。操作系統(tǒng)的啟動(dòng)過(guò)程:
上電
外設(shè)初始化
系統(tǒng)時(shí)鐘配置
內(nèi)核初始化
操作系統(tǒng)啟動(dòng)
啟動(dòng)完成LiteOS-M內(nèi)核運(yùn)行機(jī)制LitOS-M內(nèi)核初始化是根據(jù)系統(tǒng)的不同配置進(jìn)行指定模塊的初始化。LiteOS-M內(nèi)核初始化包含的各個(gè)模塊,如圖所示。LiteOS-M內(nèi)核運(yùn)行機(jī)制初始化動(dòng)態(tài)內(nèi)存池:假如內(nèi)存池是一間倉(cāng)庫(kù),靜態(tài)內(nèi)存池是倉(cāng)庫(kù)內(nèi)固定的幾個(gè)位置,而動(dòng)態(tài)內(nèi)存池是臨時(shí)分配的,沒(méi)有固定位置。初始化動(dòng)態(tài)內(nèi)存池,方便進(jìn)行動(dòng)態(tài)內(nèi)存管理。中斷初始化:在程序運(yùn)行過(guò)程中,出現(xiàn)需要由CPU立即處理的事務(wù)時(shí),CPU暫時(shí)中止當(dāng)前程序的執(zhí)行轉(zhuǎn)而處理這個(gè)事務(wù),這個(gè)過(guò)程叫做中斷。在為某個(gè)中斷源編寫(xiě)中斷服務(wù)程序前,首先在主程序中對(duì)中斷系統(tǒng)進(jìn)行初始化操作。Task初始化:即任務(wù)初始化。檢測(cè)內(nèi)核的任務(wù)模塊是否正常運(yùn)行。LiteOS-M內(nèi)核運(yùn)行機(jī)制IPC初始化:IPC(InterProcessCommunication)是指內(nèi)核進(jìn)程間的通信,在不同進(jìn)程之間傳播或交換信息。對(duì)內(nèi)核通信進(jìn)行初始化,檢測(cè)內(nèi)核通信是否正常。LiteOS-M內(nèi)核運(yùn)行機(jī)制IPC初始化包含如下內(nèi)容:Sem初始化:Sem(Semaphore)即信號(hào)量,信號(hào)量初始化是為配置的N個(gè)信號(hào)量申請(qǐng)內(nèi)存(N值可以由用戶(hù)自行配置),并把所有信號(hào)量初始化成未使用,加入到未使用鏈表中供系統(tǒng)使用。Mutex初始化:Mutex即互斥鎖,每個(gè)線(xiàn)程在對(duì)資源操作前都嘗試先加鎖,成功加鎖才能操作,操作結(jié)束解鎖。適用于多線(xiàn)程訪(fǎng)問(wèn)共享資源?;コ怄i初始化檢測(cè)互斥鎖是否正常運(yùn)行。Queue初始化:Queue即消息隊(duì)列,消息隊(duì)列是一種常用于任務(wù)間通信的數(shù)據(jù)結(jié)構(gòu)。消息隊(duì)列初始化是為任務(wù)間傳遞的消息建立一個(gè)隊(duì)列空間,存放來(lái)自任務(wù)或中斷的消息。LiteOS-M內(nèi)核運(yùn)行機(jī)制Swtmr初始化:Swtmr(softwaretimer)即軟件定時(shí)器,是基于系統(tǒng)Tick時(shí)鐘中斷且由軟件來(lái)模擬的定時(shí)器,當(dāng)經(jīng)過(guò)設(shè)定的Tick時(shí)鐘計(jì)數(shù)值后會(huì)觸發(fā)用戶(hù)定義的回調(diào)函數(shù)。軟件定時(shí)器初始化是系統(tǒng)配置軟件定時(shí)器和啟動(dòng)軟件定時(shí)器,對(duì)每個(gè)定時(shí)器結(jié)構(gòu)體的成員賦初值的過(guò)程。LiteOS-M內(nèi)核運(yùn)行機(jī)制IdleTask初始化:即空閑任務(wù)初始化,操作系統(tǒng)會(huì)自動(dòng)創(chuàng)建1個(gè)空閑任務(wù),該任務(wù)是必須存在的。其他可裁剪模塊初始化:用戶(hù)根據(jù)需要對(duì)可裁剪模塊進(jìn)行裁剪,系統(tǒng)啟動(dòng)時(shí),這些模塊進(jìn)行初始化。謝謝4.2.1中斷管理的基本概念通過(guò)本節(jié)學(xué)習(xí),您可以:了解LiteOS-M中斷管理的基本概念中斷管理的基本概念中斷是計(jì)算機(jī)術(shù)語(yǔ),是指計(jì)算機(jī)運(yùn)行過(guò)程中,出現(xiàn)某些意外情況需要干預(yù)時(shí),CPU能暫時(shí)停止當(dāng)前運(yùn)行的程序而去處理意外情況,處理完畢后繼續(xù)返回暫停的程序繼續(xù)運(yùn)行。申請(qǐng)CPU中斷的請(qǐng)求源稱(chēng)為中斷源。中斷是一種異常,異常是導(dǎo)致處理器脫離正常運(yùn)行轉(zhuǎn)向執(zhí)行特殊代碼的任何事件,如果不及時(shí)進(jìn)行處理,輕則系統(tǒng)出錯(cuò),重則會(huì)導(dǎo)致系統(tǒng)毀滅性地癱瘓。1.中斷的概念中斷管理的基本概念中斷管理,就是對(duì)系統(tǒng)產(chǎn)生的中斷進(jìn)行處理的過(guò)程。作用:通過(guò)中斷機(jī)制,在外設(shè)不需要CPU介入時(shí),CPU可以執(zhí)行其它任務(wù);當(dāng)外設(shè)需要CPU時(shí),CPU會(huì)中斷當(dāng)前任務(wù)來(lái)響應(yīng)中斷請(qǐng)求??梢允笴PU避免把大量時(shí)間耗費(fèi)在等待、查詢(xún)外設(shè)狀態(tài)的操作上,有效提高系統(tǒng)實(shí)時(shí)性及執(zhí)行效率。中斷管理的基本概念中斷管理的專(zhuān)用詞語(yǔ):
名稱(chēng)說(shuō)明中斷號(hào)中斷請(qǐng)求信號(hào)特定的標(biāo)志,計(jì)算機(jī)能夠根據(jù)中斷號(hào)判斷是哪個(gè)設(shè)備提出的中斷請(qǐng)求。中斷請(qǐng)求“緊急事件”向CPU提出申請(qǐng)(發(fā)一個(gè)電脈沖信號(hào)),請(qǐng)求中斷,需要CPU暫停當(dāng)前執(zhí)行的任務(wù)處理該“緊急事件”,這一過(guò)程稱(chēng)為中斷請(qǐng)求中斷優(yōu)先級(jí)為使系統(tǒng)能夠及時(shí)響應(yīng)并處理所有中斷,系統(tǒng)根據(jù)中斷事件的重要性和緊迫程度,將中斷源分為若干個(gè)級(jí)別,稱(chēng)作中斷優(yōu)先級(jí)中斷處理程序當(dāng)外設(shè)發(fā)出中斷請(qǐng)求后,CPU暫停當(dāng)前的任務(wù),轉(zhuǎn)而響應(yīng)中斷請(qǐng)求,即執(zhí)行中斷處理程序。產(chǎn)生中斷的每個(gè)設(shè)備都有相應(yīng)的中斷處理程序中斷觸發(fā)中斷源向中斷控制器發(fā)送中斷信號(hào),中斷控制器對(duì)中斷進(jìn)行仲裁,確定優(yōu)先級(jí),將中斷信號(hào)發(fā)送給CPU。中斷源產(chǎn)生中斷信號(hào)的時(shí)候,會(huì)將中斷觸發(fā)器置“1”,表明該中斷源產(chǎn)生了中斷,要求CPU去響應(yīng)該中斷。中斷向量中斷服務(wù)程序的入口地址。中斷向量表存儲(chǔ)中斷向量的存儲(chǔ)區(qū),中斷向量與中斷號(hào)對(duì)應(yīng),中斷向量在中斷向量表中按照中斷號(hào)順序存儲(chǔ)。中斷管理的基本概念設(shè)備是發(fā)起中斷的源,當(dāng)設(shè)備需要請(qǐng)求CPU時(shí),產(chǎn)生一個(gè)中斷信號(hào),該信號(hào)發(fā)送給中斷控制器。中斷控制器分發(fā)中斷源的請(qǐng)求給各個(gè)CPU,CPU收到請(qǐng)求便中斷當(dāng)前正在執(zhí)行的任務(wù),轉(zhuǎn)而執(zhí)行中斷處理程序。2.與中斷有關(guān)的硬件與中斷有關(guān)硬件設(shè)備中斷控制器CPUVIC矢量中斷控制器GIC矢量中斷控制器中斷管理的基本概念中斷控制器:是CPU眾多外設(shè)中的一個(gè),管理外設(shè)的外設(shè)。外設(shè)要使用CPU需先經(jīng)過(guò)中斷控制器仲裁,它一方面接收其它外設(shè)中斷引腳的輸入,另一方面它會(huì)發(fā)出中斷信號(hào)給CPU。可以通過(guò)對(duì)中斷控制器編程來(lái)打開(kāi)和關(guān)閉中斷源、設(shè)置中斷源的優(yōu)先級(jí)和觸發(fā)方式。常用的中斷控制器:VIC(VectorInterruptController,矢量中斷控制器)GIC(GeneralInterruptController,通用中斷控制器)。在ARMCortex-M系列中使用的中斷控制器是NVIC(NestedVectorInterruptController,嵌套矢量中斷控制器)。2.與中斷有關(guān)的硬件中斷管理的基本概念中斷源:引起中斷的事件或原因,或發(fā)出中斷申請(qǐng)的來(lái)源。分為外部中斷源和內(nèi)部中斷源兩大類(lèi)。一般中、慢速外設(shè),如鍵盤(pán)、打印機(jī)、鼠標(biāo)等數(shù)據(jù)通道,如磁盤(pán)、數(shù)據(jù)采集裝置、網(wǎng)絡(luò)等實(shí)時(shí)時(shí)鐘,如定時(shí)器定時(shí)已到,發(fā)中斷申請(qǐng)故障源,如電源掉電、外設(shè)故障、存儲(chǔ)器讀取出錯(cuò)以及越限報(bào)警等事件外部中斷源中斷管理的基本概念中斷源:引起中斷的事件或原因,或發(fā)出中斷申請(qǐng)的來(lái)源。分為外部中斷源和內(nèi)部中斷源兩大類(lèi)。由CPU執(zhí)行中斷指令I(lǐng)NTn引起的中斷由CPU的某些運(yùn)算錯(cuò)誤引起的中斷,如除數(shù)為0或商數(shù)超過(guò)了寄存器所能表達(dá)的范圍、溢出等為調(diào)試程序設(shè)置的中斷,如單步中斷、斷點(diǎn)中斷由特殊操作引起的異常,如存儲(chǔ)器越限、缺頁(yè)等內(nèi)部中斷源核間中斷,比如CPUA讓CPUB停止工作,產(chǎn)生調(diào)度等謝謝4.2.2中斷管理接口及應(yīng)用通過(guò)本節(jié)學(xué)習(xí),您可以:了解中斷管理接口說(shuō)明及應(yīng)用中斷管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的中斷模塊提供的接口列表:1.中斷管理接口功能分類(lèi)接口名描述創(chuàng)建中斷LOS_HwiCreate中斷創(chuàng)建,注冊(cè)中斷號(hào)、中斷觸發(fā)模式、中斷優(yōu)先級(jí)、中斷處理程序中斷被觸發(fā)時(shí),會(huì)調(diào)用該中斷處理程序刪除中斷LOS_HwiDelete根據(jù)指定的中斷號(hào),刪除中斷打開(kāi)中斷LOS_IntUnLock開(kāi)中斷,使能當(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.中斷管理接口功能分類(lèi)接口名描述觸發(fā)中斷LOS_HwiTrigger通過(guò)寫(xiě)中斷控制器的相關(guān)寄存器模擬外部中斷使能中斷LOS_HwiEnable通過(guò)設(shè)置寄存器,允許CPU響應(yīng)中斷禁用中斷LOS_HwiDisable通過(guò)設(shè)置寄存器,禁止CPU響應(yīng)中斷清除中斷寄存器狀態(tài)LOS_HwiClear中斷手動(dòng)清除清除中斷號(hào)對(duì)應(yīng)的中斷寄存器的狀態(tài)位,此接口依賴(lài)中斷控制器版本,非必需設(shè)置中斷優(yōu)先級(jí)LOS_HwiSetPriority設(shè)置中斷的優(yōu)先級(jí)獲取中斷號(hào)LOS_HwiCurIrqNum獲取當(dāng)前中斷號(hào)OpenHarmonyLiteOS-M內(nèi)核的中斷模塊提供的接口列表:中斷管理接口及應(yīng)用中斷管理的一般開(kāi)發(fā)流程如下:調(diào)用中斷創(chuàng)建接口LOS_HwiCreate創(chuàng)建中斷。調(diào)用LOS_HwiTrigger接口觸發(fā)指定中斷,或通過(guò)外設(shè)觸發(fā)中斷。調(diào)用LOS_HwiDelete接口刪除指定中斷,此接口根據(jù)實(shí)際情況使用,開(kāi)發(fā)者判斷是否需要?jiǎng)h除中斷。2.中斷管理應(yīng)用中斷管理接口及應(yīng)用進(jìn)行中斷管理操作時(shí)的注意事項(xiàng):在進(jìn)行中斷管理時(shí),要根據(jù)具體的硬件來(lái)配置支持的最大中斷數(shù),和可設(shè)置的中斷優(yōu)先級(jí)個(gè)數(shù)。中斷處理程序耗時(shí)不能過(guò)長(zhǎng),否則會(huì)影響CPU對(duì)中斷的及時(shí)響應(yīng)。中斷響應(yīng)過(guò)程中不能直接、間接執(zhí)行引起調(diào)度的LOS_Schedule等函數(shù)。中斷恢復(fù)LOS_IntRestore()的入?yún)⒈仨毷桥c之對(duì)應(yīng)的LOS_IntLock()的返回值(即關(guān)中斷之前的CPSR值)。Cortex-M系列處理器中0-15中斷為內(nèi)部使用,因此不建議用戶(hù)去申請(qǐng)和創(chuàng)建。2.中斷管理應(yīng)用中斷管理接口及應(yīng)用中斷管理要實(shí)現(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的方向?yàn)檩斎?*/
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();//開(kāi)啟中斷
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ù)名稱(chēng)
taskoh.usTaskPrio=12;//任務(wù)優(yōu)先級(jí)
中斷管理接口及應(yīng)用
/**創(chuàng)建任務(wù)**/
if(LOS_TaskCreate(&task_ohos,&taskoh)!=LOS_OK){printf("Ohos_Interrupt_GpioinitcreateFailed!\r\n");}}/**運(yùn)行函數(shù)**/
SYS_RUN(Interrupt_hi);中斷管理接口及應(yīng)用代碼編譯后的運(yùn)行結(jié)果:謝謝4.3.1任務(wù)管理的基本概念通過(guò)本節(jié)學(xué)習(xí),您可以:了解任務(wù)管理的基本概念任務(wù)管理的基本概念任務(wù)管理:LiteOS是一個(gè)支持多任務(wù)的操作系統(tǒng)。在LiteOS中,一個(gè)任務(wù)表示一個(gè)線(xiàn)程。當(dāng)有多個(gè)任務(wù)存在時(shí),就需要對(duì)這些任務(wù)進(jìn)行管理,實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)運(yùn)行的目的。OpenHarmonyLiteOS-M的任務(wù)模塊可以給用戶(hù)提供多個(gè)任務(wù),實(shí)現(xiàn)任務(wù)間的切換和通信,幫助用戶(hù)管理業(yè)務(wù)程序流程。這樣用戶(hù)可以將更多的精力投入到業(yè)務(wù)功能的實(shí)現(xiàn)中。LiteOS-M的任務(wù)模塊具有以下特點(diǎn):LiteOS中的任務(wù)是搶占式調(diào)度機(jī)制,同時(shí)相同優(yōu)先級(jí)任務(wù)支持時(shí)間片輪轉(zhuǎn)調(diào)度方式。高優(yōu)先級(jí)的任務(wù)可打斷低優(yōu)先級(jí)任務(wù),低優(yōu)先級(jí)任務(wù)必須在高優(yōu)先級(jí)任務(wù)阻塞或結(jié)束后才能得到調(diào)度。LiteOS的任務(wù)一共有32個(gè)優(yōu)先級(jí)(0-31),最高優(yōu)先級(jí)為0,最低優(yōu)先級(jí)為31。1.
任務(wù)管理概念任務(wù)管理的基本概念(1)任務(wù)狀態(tài)(2)任務(wù)狀態(tài)遷移(3)任務(wù)ID(4)任務(wù)優(yōu)先級(jí)(5)任務(wù)入口函數(shù)2.與任務(wù)管理有關(guān)術(shù)語(yǔ)(6)任務(wù)棧(7)任務(wù)上下文(8)任務(wù)控制塊(TCB)(9)任務(wù)切換任務(wù)管理的基本概念(1)任務(wù)狀態(tài)任務(wù)有多種運(yùn)行狀態(tài)。系統(tǒng)初始化完成后,創(chuàng)建的任務(wù)就可以在系統(tǒng)中競(jìng)爭(zhēng)一定的資源,由內(nèi)核進(jìn)行調(diào)度。任務(wù)狀態(tài)通常分為以下四種:就緒(Ready):該任務(wù)在就緒隊(duì)列中,只等待CPU。運(yùn)行(Running):該任務(wù)正在執(zhí)行。阻塞(Blocked):該任務(wù)不在就緒隊(duì)列中。包含任務(wù)被掛起(suspend狀態(tài))、任務(wù)被延時(shí)(delay狀態(tài))、任務(wù)正在等待信號(hào)量、讀寫(xiě)隊(duì)列或者等待事件等。退出態(tài)(Dead):該任務(wù)運(yùn)行結(jié)束,等待系統(tǒng)回收資源。2.與任務(wù)管理有關(guān)術(shù)語(yǔ)任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移就緒態(tài)→運(yùn)行態(tài):任務(wù)創(chuàng)建后進(jìn)入就緒態(tài),就緒態(tài)的任務(wù)加入就緒隊(duì)列。發(fā)生任務(wù)切換時(shí),就緒隊(duì)列中最高優(yōu)先級(jí)的任務(wù)被執(zhí)行,從而進(jìn)入運(yùn)行態(tài),同時(shí)該任務(wù)從就緒隊(duì)列中移出。運(yùn)行態(tài)→就緒態(tài):有更高優(yōu)先級(jí)任務(wù)創(chuàng)建或者恢復(fù)后,會(huì)發(fā)生任務(wù)調(diào)度,此刻就緒隊(duì)列中最高優(yōu)先級(jí)任務(wù)變?yōu)檫\(yùn)行態(tài),那么原先運(yùn)行的任務(wù)由運(yùn)行態(tài)變?yōu)榫途w態(tài),依然在就緒隊(duì)列中。
就緒態(tài)
運(yùn)行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運(yùn)行任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移就緒態(tài)→阻塞態(tài):任務(wù)也有可能在就緒態(tài)時(shí)被阻塞(掛起),此時(shí)任務(wù)狀態(tài)由就緒態(tài)變?yōu)樽枞麘B(tài),該任務(wù)從就緒隊(duì)列中移出,不會(huì)參與任務(wù)調(diào)度,直到該任務(wù)被恢復(fù)。阻塞態(tài)→就緒態(tài):阻塞的任務(wù)被恢復(fù)后(任務(wù)恢復(fù)、延時(shí)時(shí)間超時(shí)、讀信號(hào)量超時(shí)或讀到信號(hào)量等),此時(shí)被恢復(fù)的任務(wù)會(huì)被加入就緒隊(duì)列,從而由阻塞態(tài)變成就緒態(tài)。
就緒態(tài)
運(yùn)行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運(yùn)行任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移運(yùn)行態(tài)→退出態(tài):運(yùn)行中的任務(wù)運(yùn)行結(jié)束,任務(wù)狀態(tài)由運(yùn)行態(tài)變?yōu)橥顺鰬B(tài)。退出態(tài)包含任務(wù)運(yùn)行結(jié)束的正常退出狀態(tài)以及Invalid(無(wú)效)狀態(tài)。例如,任務(wù)運(yùn)行結(jié)束但是沒(méi)有自刪除,對(duì)外呈現(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)
運(yùn)行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運(yùn)行任務(wù)管理的基本概念(2)任務(wù)狀態(tài)遷移運(yùn)行態(tài)→阻塞態(tài):正在運(yùn)行的任務(wù)發(fā)生阻塞(掛起、延時(shí)、讀信號(hào)量等)時(shí),將該任務(wù)插入到對(duì)應(yīng)的阻塞隊(duì)列中,任務(wù)狀態(tài)由運(yùn)行態(tài)變成阻塞態(tài),然后發(fā)生任務(wù)切換,運(yùn)行就緒隊(duì)列中最高優(yōu)先級(jí)任務(wù)。
就緒態(tài)
運(yùn)行態(tài)
阻塞態(tài)
退出態(tài)先就緒再運(yùn)行任務(wù)管理的基本概念(3)任務(wù)ID在任務(wù)創(chuàng)建時(shí)通過(guò)參數(shù)返回給用戶(hù)。系統(tǒng)中任務(wù)ID號(hào)是唯一的,是任務(wù)的重要標(biāo)識(shí)。用戶(hù)可以通過(guò)任務(wù)ID對(duì)指定任務(wù)進(jìn)行任務(wù)掛起、任務(wù)恢復(fù)、查詢(xún)?nèi)蝿?wù)名等操作。(4)任務(wù)優(yōu)先級(jí)優(yōu)先級(jí)表示任務(wù)執(zhí)行的優(yōu)先順序。任務(wù)的優(yōu)先級(jí)決定了在發(fā)生任務(wù)切換時(shí)即將要執(zhí)行的任務(wù),就緒隊(duì)列中最高優(yōu)先級(jí)的任務(wù)將得到執(zhí)行。(5)任務(wù)入口函數(shù)新任務(wù)得到調(diào)度后將執(zhí)行的函數(shù)。該函數(shù)由用戶(hù)實(shí)現(xiàn),在任務(wù)創(chuàng)建時(shí),通過(guò)任務(wù)創(chuàng)建結(jié)構(gòu)體設(shè)置。(6)任務(wù)棧每個(gè)任務(wù)都擁有一個(gè)獨(dú)立的??臻g,我們稱(chēng)為任務(wù)棧。??臻g里保存的信息包含局部變量、寄存器、函數(shù)參數(shù)、函數(shù)返回地址等。任務(wù)管理的基本概念(7)任務(wù)上下文任務(wù)在運(yùn)行過(guò)程中使用的一些資源,如寄存器等,稱(chēng)為任務(wù)上下文。當(dāng)這個(gè)任務(wù)掛起時(shí),其他任務(wù)繼續(xù)執(zhí)行,可能會(huì)修改寄存器等資源中的值。如果任務(wù)切換時(shí)沒(méi)有保存任務(wù)上下文,可能會(huì)導(dǎo)致任務(wù)恢復(fù)后出現(xiàn)未知錯(cuò)誤。因此在任務(wù)切換時(shí)會(huì)將切出任務(wù)的任務(wù)上下文信息,保存在自身的任務(wù)棧中,以便任務(wù)恢復(fù)后,從??臻g中恢復(fù)掛起時(shí)的上下文信息,從而繼續(xù)執(zhí)行掛起時(shí)被打斷的代碼。(8)任務(wù)控制塊(TCB)每個(gè)任務(wù)都含有一個(gè)任務(wù)控制塊(TaskControlBlock,TCB)。TCB包含了任務(wù)上下文棧指針(stackpointer)、任務(wù)狀態(tài)、任務(wù)優(yōu)先級(jí)、任務(wù)ID、任務(wù)名、任務(wù)棧大小等信息。TCB可以反映出每個(gè)任務(wù)運(yùn)行情況。(9)任務(wù)切換任務(wù)切換包含獲取就緒隊(duì)列中最高優(yōu)先級(jí)任務(wù)、切出任務(wù)上下文保存、切入任務(wù)上下文恢復(fù)等動(dòng)作。謝謝4.3.2任務(wù)管理接口及應(yīng)用通過(guò)本節(jié)學(xué)習(xí),您可以:了解任務(wù)管理接口說(shuō)明及應(yīng)用任務(wù)管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:1.
任務(wù)管理接口功能分類(lèi)接口名接口描述創(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),如果就緒隊(duì)列中沒(méi)有更高優(yōu)先級(jí)的任務(wù),則運(yùn)行該任務(wù)LOS_TaskDelete刪除指定的任務(wù)任務(wù)管理接口及應(yīng)用1.
任務(wù)管理接口功能分類(lèi)接口名接口描述控制任務(wù)狀態(tài)
LOS_TaskResume恢復(fù)掛起的任務(wù),使該任務(wù)進(jìn)入ready狀態(tài)LOS_TaskSuspend掛起指定的任務(wù),然后切換任務(wù)LOS_TaskJoin掛起當(dāng)前任務(wù),等待指定任務(wù)運(yùn)行結(jié)束并回收其任務(wù)控制塊資源LOS_TaskDelay任務(wù)延時(shí)等待,釋放CPU,等待時(shí)間到期后該任務(wù)會(huì)重新進(jìn)入ready狀態(tài)。傳入?yún)?shù)為T(mén)ick數(shù)目LOS_Msleep任務(wù)延時(shí)等待,釋放CPU,等待時(shí)間到期后該任務(wù)會(huì)重新進(jìn)入ready狀態(tài)。傳入?yún)?shù)為毫秒數(shù)LOS_TaskYield當(dāng)前任務(wù)時(shí)間片設(shè)置為0,釋放CPU,觸發(fā)調(diào)度運(yùn)行就緒任務(wù)隊(duì)列中優(yōu)先級(jí)最高的任務(wù)OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:任務(wù)管理接口及應(yīng)用功能分類(lèi)接口名接口描述控制任務(wù)調(diào)度LOS_TaskLock鎖任務(wù)調(diào)度,但任務(wù)仍可被中斷打斷LOS_TaskUnlock解鎖任務(wù)調(diào)度LOS_Schedule觸發(fā)任務(wù)調(diào)度控制任務(wù)優(yōu)先級(jí)LOS_CurTaskPriSet設(shè)置當(dāng)前任務(wù)的優(yōu)先級(jí)LOS_TaskPriSet設(shè)置指定任務(wù)的優(yōu)先級(jí)LOS_TaskPriGet獲取指定任務(wù)的優(yōu)先級(jí)OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:1.
任務(wù)管理接口任務(wù)管理接口及應(yīng)用功能分類(lèi)接口名接口描述獲取任務(wù)信息LOS_CurTaskIDGet獲取當(dāng)前任務(wù)的IDLOS_NextTaskIDGet獲取任務(wù)就緒隊(duì)列中優(yōu)先級(jí)最高的任務(wù)的IDLOS_NewTaskIDGet獲取任務(wù)就緒隊(duì)列中優(yōu)先級(jí)最高的任務(wù)的IDLOS_CurTaskNameGet獲取當(dāng)前任務(wù)的名稱(chēng)LOS_TaskNameGet獲取指定任務(wù)的名稱(chēng)LOS_TaskStatusGet獲取指定任務(wù)的狀態(tài)LOS_TaskInfoGet獲取指定任務(wù)的信息,包括任務(wù)狀態(tài)、優(yōu)先級(jí)、任務(wù)棧大小、棧頂指針SP、任務(wù)入口函數(shù)、已使用的任務(wù)棧大小等LOS_TaskIsRunning獲取任務(wù)模塊是否已經(jīng)開(kāi)始調(diào)度運(yùn)行。任務(wù)信息維測(cè)LOS_TaskSwitchInfoGet獲取任務(wù)切換信息,需要開(kāi)啟編譯控制宏:LOSCFG_BASE_CORE_EXC_TSK_SWITCH。OpenHarmonyLiteOS-M內(nèi)核的任務(wù)模塊提供的功能:1.
任務(wù)管理接口任務(wù)管理接口及應(yīng)用任務(wù)管理的一般開(kāi)發(fā)流程如下:(1)鎖任務(wù)調(diào)度LOS_TaskLock,防止高優(yōu)先級(jí)任務(wù)調(diào)度。(2)創(chuàng)建任務(wù)LOS_TaskCreate。(3)解鎖任務(wù)LOS_TaskUnlock,讓任務(wù)按照優(yōu)先級(jí)進(jìn)行調(diào)度。(4)延時(shí)任務(wù)LOS_TaskDelay,任務(wù)延時(shí)等待。(5)掛起指定的任務(wù)LOS_TaskSuspend,任務(wù)掛起等待恢復(fù)操作。(6)恢復(fù)掛起的任務(wù)LOS_TaskResume。2.任務(wù)管理應(yīng)用任務(wù)管理接口及應(yīng)用進(jìn)行任務(wù)管理時(shí)的注意事項(xiàng)如下:執(zhí)行Idle任務(wù)時(shí),會(huì)對(duì)待回收鏈表中的任務(wù)控制塊和任務(wù)棧進(jìn)行回收。任務(wù)名是指針,并沒(méi)有分配空間,在設(shè)置任務(wù)名時(shí),禁止將局部變量的地址賦值給任務(wù)名指針。任務(wù)棧的大小按8字節(jié)大小對(duì)齊。確定任務(wù)棧大小的原則是,夠用就行,多了浪費(fèi),少了任務(wù)棧溢出。掛起當(dāng)前任務(wù)時(shí),如果已經(jīng)鎖任務(wù)調(diào)度,則無(wú)法掛起。Idle任務(wù)及軟件定時(shí)器任務(wù)不能被掛起或者刪除。在中斷處理函數(shù)中或者在鎖任務(wù)的情況下,執(zhí)行LOS_TaskDelay會(huì)失敗。鎖任務(wù)調(diào)度,并不關(guān)中斷,因此任務(wù)仍可被中斷打斷。鎖任務(wù)調(diào)度必須和解鎖任務(wù)調(diào)度配合使用。設(shè)置任務(wù)優(yōu)先級(jí)時(shí)可能會(huì)發(fā)生任務(wù)調(diào)度。任務(wù)管理接口及應(yīng)用可配置的系統(tǒng)最大任務(wù)數(shù):整個(gè)系統(tǒng)的任務(wù)總個(gè)數(shù),而非用戶(hù)能使用的任務(wù)個(gè)數(shù)。例如:系統(tǒng)軟件定時(shí)器多占用一個(gè)任務(wù)資源,那么用戶(hù)能使用的任務(wù)資源就會(huì)減少一個(gè)。LOS_CurTaskPriSet和LOS_TaskPriSet接口不能在中斷中使用,也不能用于修改軟件定時(shí)器任務(wù)的優(yōu)先級(jí)。LOS_TaskPriGet接口傳入的taskID對(duì)應(yīng)的任務(wù)未創(chuàng)建或者超過(guò)最大任務(wù)數(shù),統(tǒng)一返回-1。在刪除任務(wù)時(shí)要保證任務(wù)申請(qǐng)的資源(如互斥鎖、信號(hào)量等)已被釋放。任務(wù)管理接口及應(yīng)用具體代碼如下:#include<stdio.h>#include"los_task.h"#include"ohos_init.h"#include"ohos_types.h"
任務(wù)管理的應(yīng)用:基本的任務(wù)操作方法,包含2個(gè)不同優(yōu)先級(jí)任務(wù)的創(chuàng)建、任務(wù)延時(shí)、任務(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ù)名稱(chēng)
taskoh.usTaskPrio=12;//任務(wù)優(yōu)先級(jí)
/**創(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ù)名稱(chēng)
taskhi.usTaskPrio=13;//任務(wù)優(yōu)先級(jí)
/**創(chuàng)建任務(wù)**/
if(LOS_TaskCreate(&task_hi3861,&taskhi)!=LOS_OK)
{
printf("Task_hello_hi3861createFailed!\r\n");
}
}
/**運(yùn)行函數(shù)**/
SYS_RUN(Task_hi);任務(wù)管理接口及應(yīng)用編譯運(yùn)行的結(jié)果如下:謝謝4.4.1內(nèi)存管理的基本概念通過(guò)本節(jié)學(xué)習(xí),您可以:了解內(nèi)存管理的基本概念內(nèi)存管理的基本概念內(nèi)存管理:指軟件運(yùn)行時(shí)對(duì)計(jì)算機(jī)內(nèi)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效、快速的分配,并且在適當(dāng)?shù)臅r(shí)候釋放和回收內(nèi)存資源。計(jì)算機(jī)內(nèi)存的缺點(diǎn):容量有限,不能一次性將所有的用戶(hù)進(jìn)程和系統(tǒng)進(jìn)程全部裝入內(nèi)存。1.
內(nèi)存管理概述將內(nèi)存分配給計(jì)算機(jī)程序的兩種方式是靜態(tài)內(nèi)存分配和動(dòng)態(tài)內(nèi)存分配。靜態(tài)內(nèi)存是指在靜態(tài)內(nèi)存池中分配用戶(hù)初始化時(shí)預(yù)設(shè)大小的內(nèi)存塊。靜態(tài)內(nèi)存一旦分配給程序,靜態(tài)內(nèi)存將保留在整個(gè)程序中,即從程序被編譯的那一刻到程序完成其執(zhí)行的那一刻。動(dòng)態(tài)內(nèi)存是指在動(dòng)態(tài)內(nèi)存池中分配用戶(hù)指定大小的內(nèi)存塊。動(dòng)態(tài)分配的內(nèi)存可以在程序執(zhí)行期間隨時(shí)釋放。甚至分配的內(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)存管理和動(dòng)態(tài)內(nèi)存管理。內(nèi)存管理的功能:地址轉(zhuǎn)換:將程序中的邏輯地址轉(zhuǎn)換成內(nèi)存中的物理地址。存儲(chǔ)保護(hù):保證各個(gè)任務(wù)在自己的內(nèi)存空間內(nèi)運(yùn)行,互不干擾。內(nèi)存的分配與回收:當(dāng)進(jìn)程創(chuàng)建后系統(tǒng)會(huì)為他們分配內(nèi)存空間,當(dāng)結(jié)束后內(nèi)存空間也會(huì)被回收。內(nèi)存空間的擴(kuò)充:利用虛擬存儲(chǔ)技術(shù)或自動(dòng)覆蓋技術(shù),從邏輯上擴(kuò)充內(nèi)存。內(nèi)存管理的基本概念靜態(tài)內(nèi)存是在靜態(tài)內(nèi)存池中分配用戶(hù)初始化時(shí)預(yù)設(shè)大小的內(nèi)存塊。內(nèi)存池在創(chuàng)建時(shí)先向系統(tǒng)申請(qǐng)一大塊內(nèi)存,然后分成大小相等的多個(gè)小內(nèi)存塊,小內(nèi)存塊通過(guò)鏈表連接起來(lái)。2.靜態(tài)內(nèi)存管理內(nèi)存池:物理內(nèi)存中允許存在多個(gè)大小不同的內(nèi)存池,每一個(gè)內(nèi)存池又由多個(gè)大小相同的空閑內(nèi)存塊組成。內(nèi)存管理的基本概念LiteOS-M的靜態(tài)內(nèi)存池由一個(gè)控制塊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)存塊的申請(qǐng)和釋放以塊大小為粒度,每個(gè)內(nèi)存塊包含指向下一個(gè)內(nèi)存塊的指針pstNext。內(nèi)存管理的基本概念動(dòng)態(tài)內(nèi)存管理:是在內(nèi)存資源充足的情況下,根據(jù)用戶(hù)需求,從系統(tǒng)配置的內(nèi)存池中分配相應(yīng)大小的內(nèi)存塊。當(dāng)用戶(hù)不需要該內(nèi)存塊時(shí),釋放回系統(tǒng)供下一次使用。LiteOS系統(tǒng)中動(dòng)態(tài)內(nèi)存管理系統(tǒng)通過(guò)分組來(lái)管理內(nèi)存。系統(tǒng)將所有內(nèi)存分成223個(gè)分組,每個(gè)分組負(fù)責(zé)管理特定大小的空閑內(nèi)存。在內(nèi)存池初始化時(shí)會(huì)將所有剩余內(nèi)存轉(zhuǎn)換成一個(gè)很大的空閑內(nèi)存塊,大的空閑內(nèi)存塊會(huì)被分割成小的內(nèi)存塊。切割后的空閑內(nèi)存塊會(huì)按大小重新分組,釋放時(shí)也會(huì)將回收內(nèi)存塊按大小進(jìn)行分組。3.
動(dòng)態(tài)內(nèi)存管理內(nèi)存管理的基本概念動(dòng)態(tài)內(nèi)存池是通過(guò)內(nèi)存池管理信息和內(nèi)存塊管理信息來(lái)共同管理的。內(nèi)存池管理信息在內(nèi)存池的頭部,內(nèi)存塊信息在每個(gè)空閑或已分配內(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)記所對(duì)應(yīng)的空閑內(nèi)存塊是否存在??臻e鏈表數(shù)組:包含223個(gè)空閑內(nèi)存頭節(jié)點(diǎn)信息,每個(gè)空閑內(nèi)存頭節(jié)點(diǎn)信息維護(hù)內(nèi)存節(jié)點(diǎn)頭和空閑鏈表中的前驅(qū)、后繼空閑內(nèi)存節(jié)點(diǎn)。內(nèi)存管理的基本概念內(nèi)存塊管理信息(OsMemNodeHead):用于管理空閑內(nèi)存,每個(gè)數(shù)組成員對(duì)應(yīng)一個(gè)內(nèi)存分組??臻e內(nèi)存塊分組的管理是通過(guò)內(nèi)存池管理信息的空閑內(nèi)存鏈表位圖數(shù)組和空閑鏈表數(shù)組來(lái)完成的。謝謝4.4.2靜態(tài)內(nèi)存管理接口及應(yīng)用通過(guò)本節(jié)學(xué)習(xí),您可以:了解靜態(tài)內(nèi)存管理接口說(shuō)明及應(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)容、申請(qǐng)、釋放靜態(tài)內(nèi)存、獲取打印靜態(tài)內(nèi)存池信息等幾種功能。1.
靜態(tài)內(nèi)存管理接口功能分類(lèi)接口名描述初始化靜態(tài)內(nèi)存池LOS_MemboxInit初始化一個(gè)靜態(tài)內(nèi)存池,根據(jù)入?yún)⒃O(shè)定其起始地址、總大小及每個(gè)內(nèi)存塊大小。清除靜態(tài)內(nèi)存塊內(nèi)容LOS_MemboxClr清零從靜態(tài)內(nèi)存池中申請(qǐng)的靜態(tài)內(nèi)存塊的內(nèi)容。申請(qǐng)、釋放靜態(tài)內(nèi)存LOS_MemboxAlloc從指定的靜態(tài)內(nèi)存池中申請(qǐng)一塊靜態(tài)內(nèi)存塊。LOS_MemboxFree釋放從靜態(tài)內(nèi)存池中申請(qǐng)的一塊靜態(tài)內(nèi)存塊。獲取、打印靜態(tài)內(nèi)存池信息LOS_MemboxStatisticsGet獲取指定靜態(tài)內(nèi)存池的信息,包括內(nèi)存池中總內(nèi)存塊數(shù)量、已經(jīng)分配出去的內(nèi)存塊數(shù)量、每個(gè)內(nèi)存塊的大小。LOS_ShowBox打印指定靜態(tài)內(nèi)存池所有節(jié)點(diǎn)信息,打印等級(jí)是LOG_INFO_LEVEL(當(dāng)前打印等級(jí)配置是PRINT_LEVEL),包括內(nèi)存池起始地址、內(nèi)存塊大小、總內(nèi)存塊數(shù)量、每個(gè)空閑內(nèi)存塊的起始地址、所有內(nèi)存塊的起始地址。靜態(tài)內(nèi)存管理接口及應(yīng)用當(dāng)用戶(hù)需要使用固定長(zhǎng)度的內(nèi)存時(shí),可以通過(guò)靜態(tài)內(nèi)存分配的方式獲取內(nèi)存,一旦使用完畢,通過(guò)靜態(tài)內(nèi)存釋放函數(shù)歸還所占用內(nèi)存,使之可以重復(fù)使用。靜態(tài)內(nèi)存管理的一般開(kāi)發(fā)流程如下:規(guī)劃一片內(nèi)存區(qū)域作為靜態(tài)內(nèi)存池。調(diào)用LOS_MemboxInit初始化靜態(tài)內(nèi)存池。初始化會(huì)將入?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)將會(huì)從空閑鏈表中獲取第一個(gè)空閑塊,并返回該內(nèi)存塊的起始地址。調(diào)用LOS_MemboxClr接口,將入?yún)⒌刂穼?duì)應(yīng)的內(nèi)存塊清零。調(diào)用LOS_MemboxFree接口,將該內(nèi)存塊加入空閑鏈表。2.靜態(tài)內(nèi)存管理應(yīng)用謝謝4.4.3動(dòng)態(tài)管理接口及應(yīng)用通過(guò)本節(jié)學(xué)習(xí),您可以:了解動(dòng)態(tài)管理接口說(shuō)明及應(yīng)用動(dòng)態(tài)管理接口及應(yīng)用OpenHarmonyLiteOS-M內(nèi)核的動(dòng)態(tài)內(nèi)存模塊提供了初始化內(nèi)存池、申請(qǐng)釋放動(dòng)態(tài)內(nèi)存、獲取內(nèi)存池信息、獲取內(nèi)存塊信息等幾種功能。1.動(dòng)態(tài)內(nèi)存管理接口功能分類(lèi)接口名描述初始化和刪除內(nèi)存池
LOS_MemInit初始化一塊指定的動(dòng)態(tài)內(nèi)存池,大小為sizeLOS_MemDeInit刪除指定內(nèi)存池,僅打開(kāi)編譯控制開(kāi)關(guān)LOSCFG_MEM_MUL_POOL時(shí)有效申請(qǐng)、釋放動(dòng)態(tài)內(nèi)存
LOS_MemAlloc從指定動(dòng)態(tài)內(nèi)存池中申請(qǐng)size長(zhǎng)度的內(nèi)存LOS_MemFree釋放從指定動(dòng)態(tài)內(nèi)存中申請(qǐng)的內(nèi)存LOS_MemRealloc按size大小重新分配內(nèi)存塊,并將原內(nèi)存塊內(nèi)容拷貝到新內(nèi)存塊。如果新內(nèi)存塊申請(qǐng)成功,則釋放原內(nèi)存塊動(dòng)態(tài)管理接口及應(yīng)用功能分類(lèi)接口名描述獲取內(nèi)存池信息
LOS_MemPoolSizeGet獲取指定動(dòng)態(tài)內(nèi)存池的總大小LOS_MemTotalUsedGet獲取指定動(dòng)態(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ù)量。僅打開(kāi)編譯控制開(kāi)關(guān)LOSCFG_MEM_MUL_POOL時(shí)有效。動(dòng)態(tài)管理接口及應(yīng)用功能分類(lèi)接口名描述獲取內(nèi)存塊信息
LOS_MemFreeNodeShow打印
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于演講稿的知識(shí)
- 2025年中國(guó)音響功放市場(chǎng)調(diào)查研究報(bào)告
- 2025年度炊事員食品安全管理體系聘用合同
- 二零二五年度私企資金流轉(zhuǎn)與財(cái)務(wù)支持合同
- 二零二五年度家居建材店轉(zhuǎn)讓與品牌合作協(xié)議
- 寵物店轉(zhuǎn)讓合同2025年度含寵物店會(huì)員積分系統(tǒng)及會(huì)員服務(wù)協(xié)議
- 二零二五年度綠色農(nóng)業(yè)員工保密協(xié)議及農(nóng)業(yè)科技成果保護(hù)合同
- 二零二五年度高端品牌導(dǎo)購(gòu)員聘用協(xié)議
- 二零二五年度勞動(dòng)合同變更及員工社會(huì)責(zé)任履行協(xié)議
- 2025年度高速公路冬季勞務(wù)掃雪服務(wù)合同
- 2024年內(nèi)蒙古化工職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 城市智慧交通管理系統(tǒng)
- 青少年人工智能技術(shù)水平測(cè)試一級(jí)04
- 心肌病中醫(yī)護(hù)理查房課件
- 國(guó)外藥典介紹
- 第三章新時(shí)代大學(xué)生勞動(dòng)價(jià)值觀(guān)
- 藏在名著里的數(shù)學(xué)1
- 動(dòng)畫(huà)運(yùn)動(dòng)規(guī)律-動(dòng)畫(huà)概論
- 醫(yī)院藥品驗(yàn)收流程
- LLC經(jīng)驗(yàn)教訓(xùn)卡模板
- 中建幕墻方案
評(píng)論
0/150
提交評(píng)論