日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

FreeRTOS 教程指南 学习笔记 第二章 内存管理

發(fā)布時(shí)間:2023/12/14 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeRTOS 教程指南 学习笔记 第二章 内存管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

FreeRTOS 教程指南 學(xué)習(xí)筆記 第二章 內(nèi)存管理

一、簡(jiǎn)介

本書的以下章節(jié)將介紹內(nèi)核對(duì)象,如任務(wù)、隊(duì)列、信號(hào)量和事件組。為了使FreeRTOS盡可能容易使用,這些內(nèi)核對(duì)象不是在編譯時(shí)靜態(tài)分配,而是在運(yùn)行時(shí)動(dòng)態(tài)分配;FreeRTOS在每次創(chuàng)建內(nèi)核對(duì)象時(shí)分配RAM,并在每次刪除內(nèi)核對(duì)象時(shí)釋放RAM。此策略減少了設(shè)計(jì)和規(guī)劃工作,簡(jiǎn)化了API,并最小化了RAM占用。
本章討論了動(dòng)態(tài)內(nèi)存分配。動(dòng)態(tài)內(nèi)存分配是一個(gè)C語(yǔ)言編程的概念,而不是一個(gè)特定于FreeRTOS或多任務(wù)處理的概念。它與FreeRTOS相關(guān),因?yàn)閮?nèi)核對(duì)象是動(dòng)態(tài)分配的,而且由通用編譯器提供的動(dòng)態(tài)內(nèi)存分配方案并不總是適合于實(shí)時(shí)應(yīng)用程序。

二、動(dòng)態(tài)內(nèi)存分配及其與FreeRTOS的相關(guān)性

內(nèi)存可以使用標(biāo)準(zhǔn)的C庫(kù)malloc()和免費(fèi)的()函數(shù)進(jìn)行分配,但它們可能不適合,或不適合,因?yàn)橐韵乱粋€(gè)或多個(gè)原因:

  • 它們并不總是在小型嵌入式系統(tǒng)上可用。
  • 它們的實(shí)現(xiàn)可以相對(duì)較大,占用有價(jià)值的代碼空間。
  • 它們很少是線程安全的。
  • 它們不是確定性的;執(zhí)行函數(shù)所花費(fèi)的時(shí)間與調(diào)用不同。
  • 他們可能會(huì)是碎片化的。
  • 它們可以使連接器的配置復(fù)雜化。
  • 如果允許堆空間增長(zhǎng)到其他變量使用的內(nèi)存中,它們可能成為難以調(diào)試錯(cuò)誤的來(lái)源

三、用于動(dòng)態(tài)內(nèi)存分配的選項(xiàng)

FreeRTOS現(xiàn)在將內(nèi)存分配視為可移植層的一部分(而不是核心代碼庫(kù)的一部分)。這是為了認(rèn)識(shí)到不同的嵌入式系統(tǒng)具有不同的動(dòng)態(tài)內(nèi)存分配和時(shí)間要求,因此一個(gè)單一的動(dòng)態(tài)內(nèi)存分配算法將永遠(yuǎn)只適用于應(yīng)用程序的一個(gè)子集。此外,從核心代碼庫(kù)中刪除動(dòng)態(tài)內(nèi)存分配可以使應(yīng)用程序編寫器能夠在適當(dāng)?shù)臅r(shí)候提供它們自己的特定實(shí)現(xiàn)。
當(dāng)FreeRTOS需要RAM時(shí),它不是調(diào)用Malloc(),而是調(diào)用pvPortMalloc()。當(dāng)釋放RAM時(shí),內(nèi)核不是調(diào)用free(),而是調(diào)用vPortFree()。pvPortMalloc()與標(biāo)準(zhǔn)C庫(kù)malloc()函數(shù)具有相同的原型,而vPortFree()與標(biāo)準(zhǔn)C庫(kù)free()函數(shù)具有相同的原型。
pvPortMalloc()和vPortFree()是公共函數(shù),因此也可以從應(yīng)用程序代碼中調(diào)用。
FreeRTOS提供了pvPortMalloc()和vPortFree()的五個(gè)實(shí)現(xiàn)示例,所有這些都將在本章中記錄。FreeRTOS應(yīng)用程序可以使用其中一個(gè)示例實(shí)現(xiàn),或者提供它們自己的實(shí)現(xiàn)。這五個(gè)例子分別在heap_1.c、heap_2.c、heap_3.c、heap_4.c和heap_5.c源文件中進(jìn)行了定義,所有這些文件都位于FreeRTOS/Source/portable/MemMang目錄中。
本章旨在讓讀者能夠很好地理解:

  • FreeRTOS何時(shí)進(jìn)行RAM分配。
  • 介紹FreeRTOS提供的五個(gè)內(nèi)存分配方案示例。
  • 如何選擇內(nèi)存分配方案。

四、內(nèi)存分配方案的示例

Heap_1

對(duì)于小型專用嵌入式系統(tǒng),通常在調(diào)度程序啟動(dòng)之前只創(chuàng)建任務(wù)和其他內(nèi)核對(duì)象。在這種情況下,只有在應(yīng)用程序開(kāi)始執(zhí)行任何實(shí)時(shí)功能之前,內(nèi)核才能動(dòng)態(tài)地分配內(nèi)存,并且內(nèi)存會(huì)保持分配到應(yīng)用程序的整個(gè)生命周期。這意味著所選擇的分配方案不必考慮任何更復(fù)雜的內(nèi)存分配問(wèn)題,如決定論和碎片化,而可以只考慮代碼大小和簡(jiǎn)單性等屬性。
Heap_1.c實(shí)現(xiàn)了一個(gè)非常基本的pvPortMalloc()版本,而沒(méi)有實(shí)現(xiàn)vPortFree()。從未刪除任務(wù)或其他內(nèi)核對(duì)象的應(yīng)用程序有可能使用heap_1方式。一些原本會(huì)禁止使用動(dòng)態(tài)內(nèi)存分配的商業(yè)關(guān)鍵和安全關(guān)鍵系統(tǒng)也有可能使用heap_1。關(guān)鍵系統(tǒng)通常禁止動(dòng)態(tài)內(nèi)存分配,因?yàn)榇嬖趦?nèi)存碎片和失敗的分配相關(guān)的不確定性——但Heap_1總是確定性的,不能將內(nèi)存碎片分割。
heap_1分配方案將一個(gè)簡(jiǎn)單的數(shù)組細(xì)分為更小的塊,作為對(duì)pvPortMalloc()的調(diào)用。該數(shù)組被稱為FreeRTOS堆。數(shù)組的總大小(以字節(jié)為單位)由FreeRTOSConfig.h中的定義configTOTAL_HEAP_SIZE設(shè)置。以這種方式定義一個(gè)大數(shù)組會(huì)使應(yīng)用程序消耗大量RAM——甚至在從數(shù)組分配任何內(nèi)存之前。每個(gè)已創(chuàng)建的任務(wù)都需要從堆中分配一個(gè)任務(wù)控制塊(TCB)和一個(gè)堆棧。圖5演示了heap_1如何在創(chuàng)建任務(wù)時(shí)細(xì)分簡(jiǎn)單數(shù)組。

  • A顯示了在創(chuàng)建任何任務(wù)之前的數(shù)組——整個(gè)數(shù)組都是空閑的。
  • B顯示了創(chuàng)建一個(gè)任務(wù)后的數(shù)組。
  • C表示在創(chuàng)建了三個(gè)任務(wù)后的數(shù)組。

Heap_2

Heap_2保留在FreeRTOS發(fā)行版中以實(shí)現(xiàn)向后兼容,但不建議在新設(shè)計(jì)中使用它。請(qǐng)考慮使用heap_4而不是heap_2,因?yàn)閔eap_4提供了增強(qiáng)的功能。Heap_2.c同樣通過(guò)細(xì)分一個(gè)由configTOTAL_HEAP_SIZE標(biāo)注的數(shù)組來(lái)工作。它使用最佳匹配算法來(lái)分配內(nèi)存,與heap_1不同,它確實(shí)允許釋放內(nèi)存。同樣,數(shù)組是靜態(tài)聲明的,因此將使應(yīng)用程序可能消耗大量RAM,甚至在數(shù)組的任何內(nèi)存被分配之前。最佳擬合算法確保pvPortMalloc()使用大小最接近請(qǐng)求字節(jié)數(shù)的空閑內(nèi)存塊。例如,考慮以下場(chǎng)景:

  • 堆包含三個(gè)可用內(nèi)存塊,分別為5字節(jié)、25字節(jié)和100字節(jié)。
  • pvPortMalloc()以請(qǐng)求20字節(jié)的RAM。
    適合最小內(nèi)存請(qǐng)求的內(nèi)存塊是25字節(jié)塊,所以在返回一個(gè)20字節(jié)塊的指針前,pvPortMalloc()25字節(jié)塊分割分成一個(gè)20字節(jié)和一個(gè)5 字節(jié)塊。新的5字節(jié)塊仍然留作將來(lái)其他分配對(duì)pvPortMalloc()的調(diào)用。

與heap_4不同,Heap_2不將相鄰的自由塊組合成一個(gè)更大的塊,所以它更容易破碎。但是,如果分配和隨后釋放的塊總是相同的大小,碎片不是問(wèn)題。Heap_2適用于重復(fù)創(chuàng)建和刪除任務(wù)的應(yīng)用程序,前提是分配給已創(chuàng)建任務(wù)的堆棧的大小不會(huì)更改。

圖6演示了最佳匹配算法在創(chuàng)建、刪除任務(wù),然后再次創(chuàng)建任務(wù)時(shí),是如何工作。請(qǐng)參見(jiàn)圖6:

  • A顯示了在創(chuàng)建了三個(gè)任務(wù)后的數(shù)組。一個(gè)很大的自由塊仍然保留在數(shù)組的頂部。
  • B顯示了刪除其中一個(gè)任務(wù)后的數(shù)組。位于數(shù)組頂部的較大的自由塊保留了下來(lái)。現(xiàn)在還有兩個(gè)較小的空閑塊以前分配給TCB和刪除任務(wù)的堆棧
  • C表示在創(chuàng)建另一個(gè)任務(wù)后的情況。創(chuàng)建任務(wù)導(dǎo)致了對(duì)pvportMalloc()的兩個(gè)調(diào)用,一個(gè)用于分配一個(gè)新的TCB,另一個(gè)用于分配任務(wù)棧。任務(wù)是使用xTaskCreate()API函數(shù)創(chuàng)建的,詳細(xì)描述見(jiàn)第3.4節(jié)。對(duì)pvPortMalloc()的調(diào)用發(fā)生在xTaskCreate()的內(nèi)部。

每個(gè)TCB的大小完全相同,因此最佳擬合算法確保先前分配給已刪除任務(wù)的TCB的RAM塊被重用,以分配新任務(wù)的TCB。分配給新創(chuàng)建的任務(wù)的堆棧大小與分配給之前刪除的任務(wù)的棧大小相同,因此最佳匹配算法可以確保重用之前分配給已刪除任務(wù)的棧的內(nèi)存塊來(lái)分配新任務(wù)的棧。位于數(shù)組頂部的較大的未分配塊保持不變。
Heap_2不是確定性的,但比大多數(shù)malloc()和free()的標(biāo)準(zhǔn)庫(kù)執(zhí)行都要快。

Heap_3

Heap_3.c使用標(biāo)準(zhǔn)庫(kù)malloc()和free()函數(shù),因此堆的大小由鏈接器配置確定,而configTOTAL_HEAP_SIZE設(shè)置沒(méi)有影響。Heap_3通過(guò)暫時(shí)暫停FreeRTOS調(diào)度程序,使malloc()和free()線程安全。線程安全,和調(diào)度程序暫停,都是在第7章,資源管理中討論的主題。

Heap_4

和heap_1和heap_2一樣,heap_4的工作原理是將一個(gè)數(shù)組細(xì)分為更小的塊。與前面一樣,數(shù)組是靜態(tài)聲明的,并由configTOTAL_HEAP_SIZE標(biāo)注,因此將使應(yīng)用程序似乎消耗大量RAM,甚至在實(shí)際從數(shù)組分配任何內(nèi)存之前。
==Heap_4使用第一個(gè)擬合算法來(lái)分配內(nèi)存。與heap_2不同,heap_4將合并相鄰的空閑內(nèi)存塊成為一個(gè)更大的內(nèi)存塊,從而將內(nèi)存碎片化的風(fēng)險(xiǎn)降到最低。==第一個(gè)擬合算法確保pvPortMalloc()使用第一個(gè)足夠大空閑內(nèi)存塊來(lái)確保滿足請(qǐng)求的字節(jié)數(shù)。例如,考慮以下場(chǎng)景:

  • 堆包含三個(gè)可用內(nèi)存塊,按照它們?cè)跀?shù)組中出現(xiàn)的順序,分別為5字節(jié)、200字節(jié)和100字節(jié)。
  • pvPortMalloc()以請(qǐng)求20字節(jié)的RAM。

第一個(gè)適合請(qǐng)求的自由RAM塊是200字節(jié)塊,因此pvPortMalloc()將200字節(jié)塊分成一個(gè)20字節(jié)塊和一個(gè)180字節(jié)塊,然后返回一個(gè)指向20字節(jié)塊的指針。新的180字節(jié)塊仍然可用于未來(lái)調(diào)用pvPortMalloc()。Heap_4將相鄰的自由塊合并成一個(gè)更大的塊,最大限度地減少了碎片化的風(fēng)險(xiǎn),并使其適合于重復(fù)分配和釋放不同大小的RAM塊的應(yīng)用程序。

圖7展示了在分配和釋放內(nèi)存時(shí),heap_4匹配算法合并內(nèi)存是如何工作的。參見(jiàn)圖7:

  • A顯示了在創(chuàng)建了三個(gè)任務(wù)后的數(shù)組。一個(gè)很大的自由塊仍然保留在數(shù)組的頂部。
  • B顯示刪除其中一個(gè)任務(wù)后的數(shù)組。大的自由塊在數(shù)組的頂部還在。還有一個(gè)空閑塊,是之前分配各被刪除任務(wù)的TCB和棧。注意,不像當(dāng)heap_2,刪除TCB和棧被刪除時(shí)釋放的內(nèi)存,不再作為兩個(gè)獨(dú)立的空閑塊,而是組合成一個(gè)新的自由塊。
  • C顯示創(chuàng)建了一個(gè)FreeRTOS隊(duì)列后的情況。隊(duì)列使用xQueueCreate()API函數(shù)創(chuàng)建,詳見(jiàn)第4.3節(jié)。xQueueCreate()調(diào)用pvPortMalloc()來(lái)分配隊(duì)列使用的RAM。由于heap_4使用第一個(gè)擬合算法,pvPortMalloc()將從第一個(gè)足以保存隊(duì)列的空閑RAM塊中進(jìn)行分配,即圖7中刪除任務(wù)時(shí)釋放的RAM。但是,該隊(duì)列并不消耗空閑塊中的所有RAM,因此該塊被分成兩個(gè),并且未使用的部分仍然可用于將來(lái)調(diào)用pvPortMalloc()時(shí)進(jìn)行分配。
  • D顯示了應(yīng)用程序代碼直接調(diào)用pvPortMalloc()后,而不是通過(guò)調(diào)用FreeRTOS API函數(shù)間接調(diào)用的情況。用戶程序所需要分配的空間足夠小,第一個(gè)自由塊(隊(duì)列和下一個(gè)TCB之間)就可以滿足。當(dāng)任務(wù)被刪除時(shí)釋放的內(nèi)存現(xiàn)在已經(jīng)被分成三個(gè)單獨(dú)的塊;第一個(gè)塊保存隊(duì)列,第二個(gè)塊保存用戶分配的內(nèi)存,第三個(gè)塊保持空閑。
  • E顯示隊(duì)列被刪除后的情況,這會(huì)自動(dòng)釋放已分配給隊(duì)列的內(nèi)存。現(xiàn)在在用戶分配的塊的兩邊都有空閑內(nèi)存。
  • F顯示了用戶分配的內(nèi)存也被釋放后的情況。用戶分配的塊所使用的內(nèi)存與兩邊的空閑內(nèi)存相結(jié)合,以創(chuàng)建一個(gè)更大的單個(gè)空閑塊。

Heap_4不是確定性的,但比大多數(shù)malloc()和free()的標(biāo)準(zhǔn)庫(kù)執(zhí)行都要快

設(shè)置Heap_4所使用的數(shù)組的起始地址

本節(jié)包含高級(jí)級(jí)別的信息。使用Heap_4并不需要閱讀或理解本節(jié)。
有時(shí),應(yīng)用程序作者需要將heap_4使用的數(shù)組放置在一個(gè)特定的內(nèi)存地址上。例如,FreeRTOS任務(wù)使用的棧是從堆中分配的,因此可能有必要確保堆位于快速的內(nèi)部?jī)?nèi)存中,而不是緩慢的外部?jī)?nèi)存中。
默認(rèn)情況下,heap_4使用的數(shù)組在heap_4.c源文件中聲明,其起始地址由鏈接器自動(dòng)設(shè)置。但是,如果在FreeRTOSConfig.h中將configAPPLICATION_ALLOCATED_HEAP編譯時(shí)配置常量設(shè)置為1,那么該數(shù)組必須由使用FreeRTOS的應(yīng)用程序聲明。如果該數(shù)組被聲明為應(yīng)用程序的一部分,那么應(yīng)用程序作者就可以設(shè)置其起始地址。
如果在FreeRTOSConfig.h中configAPPLICATION_ALLOCATED_HEAP設(shè)置為1,那么應(yīng)用程序的源文件中必須聲明一個(gè)名為ucHeap的uint8_t數(shù)組,并由configTOTAL_HEAP_SIZE設(shè)置大小。
將變量放置在特定內(nèi)存地址所需的語(yǔ)法取決于正在使用的編譯器,因此請(qǐng)參閱編譯器的文檔。下面是兩個(gè)編譯器的示例:

  • 示例2顯示了GCC編譯器聲明該數(shù)組所需的語(yǔ)法,并將該數(shù)組放在一個(gè)名為.my_heap的內(nèi)存塊中。
  • 示例3顯示了IAR編譯器聲明該數(shù)組所需的語(yǔ)法,并將該數(shù)組放在絕對(duì)內(nèi)存地址0x20000000處。
//Listing 2. Using GCC syntax to declare the array that will be used by heap_4, and place the array in a memory section named .my_heap uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] __attribute__ ( ( section( ".my_heap" ) ) ); //Listing 3. Using IAR syntax to declare the array that will be used by heap_4, and place the array at the absolute address 0x20000000 uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] @ 0x20000000;

Heap_5

heap_5用于分配和釋放內(nèi)存的算法與heap_4相同。與heap_4不同的是,heap_5并不局限于從單個(gè)靜態(tài)的數(shù)組中分配內(nèi)存;heap_5可以從多個(gè)獨(dú)立且分散的內(nèi)存空間中分配內(nèi)存。當(dāng)RAM在系統(tǒng)的內(nèi)存表中不顯示為單個(gè)連續(xù)塊時(shí),heap_5將非常有用。
在編寫代碼時(shí),heap_5是唯一在調(diào)用pvPortMalloc()前必須顯式的初始化的內(nèi)存分配方法。Heap_5使用vPortDefineHeapRegions()API函數(shù)初始化。當(dāng)使用heap_5時(shí),必須在創(chuàng)建任何內(nèi)核對(duì)象(任務(wù)、隊(duì)列、信號(hào)量等)之前調(diào)用vPortDefineHeapRegions()。

vPortDefineHeapRegions() API函數(shù)

vPortDefineHeapRegions()用于指定每個(gè)單獨(dú)內(nèi)存區(qū)域的起始地址和大小,這些區(qū)域共同構(gòu)成了heap_5所使用的總內(nèi)存。

//The vPortDefineHeapRegions() API function prototype void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions );

每個(gè)單獨(dú)的存儲(chǔ)區(qū)域都由HeapRegion_t類型的結(jié)構(gòu)體來(lái)描述。所有可用內(nèi)存區(qū)域的描述作為HeapRegion_t結(jié)構(gòu)體組成的數(shù)組傳遞到vPortDefineHeapRegions()中。

//The HeapRegion_t structure /*返回值pxHeapRegions:指向HeapRegion_t結(jié)構(gòu)體組成的數(shù)組開(kāi)頭的指針。數(shù)組中的每個(gè)結(jié)構(gòu)體都描述了在使用heap_5時(shí)將成為堆的一部分的內(nèi)存區(qū)域的起始地址和長(zhǎng)度。數(shù)組中的HeapRegion_t結(jié)構(gòu)體必須按起始地址排序;描述具有最低起始地址的內(nèi)存區(qū)域的HeapRegion_t結(jié)構(gòu)必須是數(shù)組中的第一個(gè)結(jié)構(gòu),而描述具有最高起始地址的內(nèi)存區(qū)域的HeapRegion_t結(jié)構(gòu)必須是數(shù)組中的最后一個(gè)結(jié)構(gòu)。數(shù)組的末端由一個(gè)HeapRegion_t結(jié)構(gòu)標(biāo)記,該結(jié)構(gòu)的啟動(dòng)起始地址成員設(shè)置為NULL。*/ typedef struct HeapRegion {/* The start address of a block of memory that will be part of the heap.*/uint8_t *pucStartAddress;/* The size of the block of memory in bytes. */size_t xSizeInBytes; } HeapRegion_t;

舉例來(lái)說(shuō),考慮圖8A中所示的假設(shè)內(nèi)存映射,它包含三個(gè)獨(dú)立的RAM塊:RAM1、RAM2和RAM3。假設(shè)可執(zhí)行代碼被放置在只讀內(nèi)存中,但沒(méi)有顯示。

示例6顯示了一個(gè)HeapRegion_t結(jié)構(gòu)體數(shù)組,它們一起描述了三個(gè)RAM塊。

//Listing 6. An array of HeapRegion_t structures that together describe the 3 regions of RAM in their entirety /* Define the start address and size of the three RAM regions. */ #define RAM1_START_ADDRESS ( ( uint8_t * ) 0x00010000 ) #define RAM1_SIZE ( 65 * 1024 ) #define RAM2_START_ADDRESS ( ( uint8_t * ) 0x00020000 ) #define RAM2_SIZE ( 32 * 1024 ) #define RAM3_START_ADDRESS ( ( uint8_t * ) 0x00030000 ) #define RAM3_SIZE ( 32 * 1024 ) /* Create an array of HeapRegion_t definitions, with an index for each of the three RAM regions, and terminating the array with a NULL address. The HeapRegion_t structures must appear in start address order, with the structure that contains the lowest start address appearing first. */ const HeapRegion_t xHeapRegions[] = {{ RAM1_START_ADDRESS, RAM1_SIZE },{ RAM2_START_ADDRESS, RAM2_SIZE },{ RAM3_START_ADDRESS, RAM3_SIZE },{ NULL, 0 } /* Marks the end of the array. */ }; int main( void ) {/* Initialize heap_5. */vPortDefineHeapRegions( xHeapRegions );/* Add application code here. */ }

雖然示例6正確地描述了RAM,但它沒(méi)有演示一個(gè)可用的示例,因?yàn)樗鼘⑺蠷AM分配給堆,沒(méi)有留下任何RAM供其他變量使用。
當(dāng)編譯項(xiàng)目時(shí),編譯過(guò)程的鏈接階段將為每個(gè)變量分配一個(gè)RAM地址。鏈接器可供使用的RAM通常由鏈接器配置文件來(lái)描述,例如鏈接器腳本。在圖8B中,假設(shè)鏈接器腳本包含了關(guān)于RAM1的信息,但不包含關(guān)于RAM2或RAM3的信息。因此,鏈接器在RAM1中放置了變量,只留下RAM1中地址0x0001 nnnn以上的部分可供heap_5使用。0x0001 nnnn的實(shí)際值將取決于被鏈接的應(yīng)用程序中所包含的所有變量的組合大小。鏈接器使所有RAM2和所有RAM3都未使用,使得整個(gè)RAM2和整個(gè)RAM3可供heap_5使用。
如果使用了示例6中所示的代碼,那么在地址0x0001 nnnn下面分配給heap_5的RAM將與用于保存變量的RAM重疊。為了避免這種情況,xHeapRegions[]數(shù)組中的第一個(gè)HeapRegion_t結(jié)構(gòu)可以使用起始地址0x0001 nnnn,而不是起始地址0x00010000。但是,這并不是一個(gè)推薦的解決方案,因?yàn)?#xff1a;

  • 起始地址可能不容易確定。
  • 鏈接器所使用的RAM的數(shù)量可能會(huì)在未來(lái)的構(gòu)建中發(fā)生變化,因此需要更新到HeapRegion_t結(jié)構(gòu)中所使用的起始地址。
  • 如果鏈接器使用的RAM和heap_5使用的RAM重疊,構(gòu)建工具將不知道,因此不能警告應(yīng)用程序作者。

示例7展示了一個(gè)更方便和可維護(hù)的示例。它聲明了一個(gè)名為ucHeap的數(shù)組。ucHeap是一個(gè)普通變量,因此它成為鏈接器分配給RAM1的數(shù)據(jù)的一部分。xHeapRegion數(shù)組中的第一個(gè)HeapRegion_t結(jié)構(gòu)描述了ucHeap的起始地址和大小,因此ucHeap成為由heap_5管理的內(nèi)存的一部分。ucHeap的大小可以增加,直到連接器使用的RAM消耗掉了所有的RAM1,如圖8C所示。

//Listing 7. An array of HeapRegion_t structures that describe all of RAM2, all of RAM3, but only part of RAM1 /* Define the start address and size of the two RAM regions not used by the linker. */ #define RAM2_START_ADDRESS ( ( uint8_t * ) 0x00020000 ) #define RAM2_SIZE ( 32 * 1024 ) #define RAM3_START_ADDRESS ( ( uint8_t * ) 0x00030000 ) #define RAM3_SIZE ( 32 * 1024 ) /* Declare an array that will be part of the heap used by heap_5. The array will be placed in RAM1 by the linker. */ #define RAM1_HEAP_SIZE ( 30 * 1024 ) static uint8_t ucHeap[ RAM1_HEAP_SIZE ]; /* Create an array of HeapRegion_t definitions. Whereas in Listing 6 the first entry described all of RAM1, so heap_5 will have used all of RAM1, this time the first entry only describes the ucHeap array, so heap_5 will only use the part of RAM1 that contains the ucHeap array. The HeapRegion_t structures must still appear in start address order, with the structure that contains the lowest start address appearing first. */ const HeapRegion_t xHeapRegions[] = {{ ucHeap, RAM1_HEAP_SIZE },{ RAM2_START_ADDRESS, RAM2_SIZE },{ RAM3_START_ADDRESS, RAM3_SIZE },{ NULL, 0 } /* Marks the end of the array. */ };

示例7中展示的技術(shù)的有如下優(yōu)點(diǎn):

  • 不需要使用硬編碼的起始地址。
  • 在HeapRegion_t結(jié)構(gòu)中使用的地址將由鏈接器自動(dòng)設(shè)置,因此將始終是正確的,即使鏈接器使用的RAM數(shù)量在未來(lái)的編譯中發(fā)生變化。
  • 分配給heap_5的RAM不可能將由鏈接器放置到RAM1中的數(shù)據(jù)重疊。
  • 如果ucHeap的大小太大,則該應(yīng)用程序?qū)⒉粫?huì)進(jìn)行鏈接。

Heap相關(guān)實(shí)用程序功能

The xPortGetFreeHeapSize() API Function

xPortGetFreeHeapSize()API函數(shù)返回在調(diào)用該函數(shù)時(shí)堆中的空閑字節(jié)數(shù)。它可以用于優(yōu)化堆的大小。例如,如果xPortGetFreeHeapSize()在創(chuàng)建了所有內(nèi)核對(duì)象后返回2000,那么configTOTAL_HEAP_SIZE的值可以減少到2000。當(dāng)使用heap_3時(shí),xPortGetFreeHeapSize()不可用。

/*返回值size_t:調(diào)用xPortGetFreeHeapSize()時(shí)堆中未分配的字節(jié)數(shù)。*/ size_t xPortGetFreeHeapSize( void );
The xPortGetMinimumEverFreeHeapSize() API Function

xPortGetMinimumEverFreeHeapSize()API函數(shù)返回自FreeRTOS應(yīng)用程序開(kāi)始執(zhí)行以來(lái)堆中存在的最小未分配的最小字節(jié)數(shù)。函數(shù)的返回值表明應(yīng)用程序離堆內(nèi)存溢出有多近。例如,如果返回值為200,那么,在應(yīng)用程序開(kāi)始執(zhí)行后的某個(gè)時(shí)候,它距離堆空間耗盡不到200字節(jié)。
xPortGetMinimumEverFreeHeapSize()只有在使用heap_4或heap_5時(shí)才可用。

/*返回值size_t:自FreeRTOS應(yīng)用程序開(kāi)始執(zhí)行以來(lái),堆中存在的最小未分配字節(jié)數(shù)。*/ size_t xPortGetMinimumEverFreeHeapSize( void );

宏失效回調(diào)函數(shù)

可以直接從應(yīng)用程序代碼中調(diào)用pvPortMalloc()。在FreeRTOS源文件中,每次創(chuàng)建內(nèi)核對(duì)象(任務(wù)、隊(duì)列、信號(hào)量和事件組)時(shí)都會(huì)調(diào)用它。
就像標(biāo)準(zhǔn)庫(kù)Malloc()函數(shù)一樣,如果pvPortMalloc()因?yàn)檎?qǐng)求的塊大小不存在,則將返回NULL。如果因?yàn)閼?yīng)用程序作者正在創(chuàng)建一個(gè)內(nèi)核對(duì)象而執(zhí)行pvPortMalloc(),并且返回NULL,則該內(nèi)核對(duì)象將無(wú)法創(chuàng)建。所有示例堆分配方案都可以配置一個(gè)回調(diào)函數(shù),當(dāng)pvPortMalloc()返回為NULL時(shí)將調(diào)用該回調(diào)函數(shù)。
如果在FreeRTOSConfig.h中將configUSE_MALLOC_FAILED_HOOK設(shè)置為1,則應(yīng)用程序必須提供一個(gè)宏失效回調(diào)函數(shù),該函數(shù)具有示例10所示的名稱和原型。該函數(shù)可以以任何適合于該應(yīng)用程序的方式來(lái)實(shí)現(xiàn)。

//The malloc failed hook function name and prototype. void vApplicationMallocFailedHook( void );

總結(jié)

以上是生活随笔為你收集整理的FreeRTOS 教程指南 学习笔记 第二章 内存管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

超碰精品在线观看 | 91九色成人 | 欧美日韩亚洲精品在线 | 国产在线精品一区 | 午夜精品久久久久久久久久久 | 国产亚洲精品久久19p | 一区二区三区四区不卡 | 久久免费精彩视频 | 激情亚洲综合在线 | 热久精品 | 国产资源在线免费观看 | 美女视频免费一区二区 | 五月天久久狠狠 | 91精品系列| 五月婷婷在线视频观看 | 国产精品xxxx18a99 | 91福利视频免费观看 | 精品天堂av| 黄色大片网 | 手机看片1042 | 亚洲精品日韩一区二区电影 | 色吊丝av中文字幕 | 亚洲视频国产 | 国产无限资源在线观看 | 国产免费久久久久 | 99久久www免费 | 91精品国产自产91精品 | 婷婷99 | 免费高清在线视频一区· | 91亚洲网| 成人一级影视 | 97天天干| 在线播放日韩av | 久久久久久久看片 | 亚洲视频在线播放 | 国产精品久久久久久久久费观看 | 亚洲精品在线播放视频 | 久久久影院一区二区三区 | 午夜av免费在线观看 | 国内一级片在线观看 | 国产精品99久久久久久小说 | 国产精品日韩在线播放 | 久久久免费精品视频 | 国产精品一区二区在线 | 国产午夜精品一区二区三区 | 久久久91精品国产一区二区精品 | 中文字幕一区二 | 福利久久| 福利久久久 | 青青河边草观看完整版高清 | 国产短视频在线播放 | 97人人精品 | 国产精品久久久一区二区三区网站 | 久久一区二区三区国产精品 | 欧美日韩不卡一区二区三区 | 精品日韩中文字幕 | 久久天天躁夜夜躁狠狠85麻豆 | 精品亚洲一区二区三区 | free,性欧美 九九交易行官网 | 玖玖在线资源 | 久久国产精品99久久久久 | 91人人视频在线观看 | 国产精品久久久久久久久久三级 | 丁香六月婷婷激情 | 久久久久久久久久久久久久免费看 | 国产精品视频永久免费播放 | 日本久久成人 | 91麻豆视频网站 | 免费观看视频黄 | 综合久久久久 | 国产精品涩涩屋www在线观看 | 欧美日韩精品二区第二页 | 丁香婷婷在线观看 | 九九精品久久 | 日本久久久久久久久久 | 天天操天天能 | 亚洲国产最新 | 国产专区精品视频 | 在线观看免费国产小视频 | 欧美日产一区 | 亚洲视频电影在线 | 日韩理论电影在线 | 久久精品欧美视频 | 婷婷成人综合 | 99爱精品视频 | 天天干天天操天天爱 | 嫩模bbw搡bbbb搡bbbb | 69视频国产 | a级片韩国| 99riav1国产精品视频 | 不卡的av在线播放 | 毛片播放网站 | 国产精品国产三级在线专区 | 国语麻豆| 超碰97网站 | 99色在线观看视频 | 天天天干天天天操 | 国产香蕉视频在线观看 | 婷婷 中文字幕 | 极品久久久久久久 | 一区二区三区国产欧美 | 超碰在线人人艹 | 五月天色综合 | 懂色av懂色av粉嫩av分享吧 | 一区二区三区av在线 | 日韩欧美极品 | 99九九免费视频 | 欧美国产日韩在线视频 | 婷婷电影在线观看 | 人人射人人插 | 亚洲视频在线免费观看 | 最近中文字幕免费av | 美女精品国产 | 国产一区二区免费在线观看 | 久久久免费精品 | www.色午夜,com | 在线免费黄色片 | 成年人免费在线 | 天堂入口网站 | av免费电影网站 | 日韩成人在线一区二区 | 免费精品在线观看 | 日本午夜在线亚洲.国产 | 成人污视频在线观看 | 99性视频| 狠狠色噜噜狠狠狠合久 | 综合天堂av久久久久久久 | 日韩中文字幕视频在线观看 | 亚洲国产黄色 | 国产精品美女久久久免费 | 国产精品精品国产婷婷这里av | 狠狠色综合欧美激情 | 色91av| 亚洲日韩欧美一区二区在线 | 亚洲日本中文字幕在线观看 | 成人欧美在线 | 精品国偷自产国产一区 | 在线免费观看视频一区二区三区 | 天堂网一区二区三区 | 激情影院在线 | 婷婷丁香激情 | 久久 在线 | 在线av资源| 国产免费看 | 亚洲精品小视频 | 欧美日韩亚洲第一 | 久久激情小视频 | www.av在线播放| 午夜精品一区二区三区视频免费看 | 在线观看黄a | 久久99精品国产一区二区三区 | 午夜精品一区二区三区免费 | 97视频在线观看免费 | av在线电影免费观看 | 亚洲 欧美 成人 | 亚洲一区不卡视频 | 日韩欧美视频 | 国产精品24小时在线观看 | 久久免费看av | 日韩欧美高清视频在线观看 | 国产日韩一区在线 | 操夜夜操 | 国产午夜一区二区 | 色a综合| 亚洲精品456在线播放 | 国产免费又爽又刺激在线观看 | 久久夜色精品国产欧美乱极品 | 成人在线视频一区 | 国产精品久久久久久久久久久久午 | 在线观看免费高清视频大全追剧 | 国产精品亚洲片夜色在线 | 国产天天综合 | 久久九九免费视频 | 欧美亚洲一区二区在线 | 婷婷www| 18国产精品福利片久久婷 | 日韩二区在线播放 | 亚洲小视频在线观看 | 国产日韩欧美在线一区 | 日韩免费在线观看视频 | 精品国产日本 | 色国产在线| 狠狠干天天色 | 日韩欧美区 | 亚洲影院国产 | 国产精品福利视频 | 国产精品一区二区久久精品爱微奶 | 日韩三级在线观看 | 亚洲综合成人av | 亚洲一区二区三区毛片 | 九九国产精品视频 | 99热播精品 | 亚州精品天堂中文字幕 | 日韩videos| 久久国产成人午夜av影院宅 | 亚洲精品88欧美一区二区 | 亚洲日日夜夜 | 91精品国产99久久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 91精品久久久久久综合乱菊 | 在线视频 精品 | 美女视频永久黄网站免费观看国产 | av韩国在线 | 国产理论影院 | 亚洲综合一区二区精品导航 | 人人草天天草 | 国产毛片aaa| 成人在线播放免费观看 | 丁香综合av| 国产精品久免费的黄网站 | 在线观看v片 | 国产亚洲精品久久久久久网站 | 99久久久国产精品免费观看 | 玖草影院 | 97看片吧| 日韩手机视频 | 综合亚洲视频 | 国产剧情在线一区 | 亚洲免费小视频 | 久久免费看毛片 | 日韩成人精品在线观看 | 欧洲视频一区 | 日韩黄色免费电影 | 久久久精品免费观看 | 亚洲精品国内 | www.久久久精品 | 亚洲色图 校园春色 | av成人动漫在线观看 | 久久久国产精品免费 | 狠狠色丁香婷婷综合视频 | 中文字幕文字幕一区二区 | 精品视频免费在线 | 一区在线免费观看 | 欧美成人猛片 | 福利一区视频 | 国产精品乱码久久久 | 国产白浆在线观看 | 在线观看自拍 | 91视频88av| a午夜电影| 国产精品免费久久久久影院仙踪林 | 久久99精品国产99久久6尤 | 麻豆91精品91久久久 | 蜜桃视频成人在线观看 | 日韩1页| 亚洲网站在线 | 国产区欧美 | 日韩有码专区 | 视频一区二区国产 | 国产一性一爱一乱一交 | 国产在线观看免费 | 一级久久精品 | 国产91亚洲| 这里只有精彩视频 | 一区二区三区高清不卡 | 6699私人影院 | 久久免费视频5 | 91色国产| 三级黄色免费 | 中文字幕一区二区在线播放 | 日韩欧美视频在线观看免费 | 在线观看一区二区视频 | 欧美精品做受xxx性少妇 | 欧洲成人av | 色九色| 亚州日韩中文字幕 | 成人黄色大片 | 国产精品美女视频 | 狠狠色狠狠色综合系列 | 91天天视频 | 九9热这里真品2 | 午夜视频在线观看网站 | 中文字幕电影在线 | 国产99久久久精品 | 精品人妖videos欧美人妖 | 9色在线视频 | 久久精品视频国产 | 97在线观看免费高清 | 日韩电影精品一区 | 首页国产精品 | 中文字幕人成乱码在线观看 | 一本一本久久a久久精品牛牛影视 | 精品国产一区二区三区四区在线观看 | 69国产在线观看 | 国产麻豆电影在线观看 | 九九视频网站 | 国产在线精品一区 | 嫩草91影院 | 欧美成人视 | 99久热在线精品视频成人一区 | 国产网站在线免费观看 | 久久免费av电影 | 色999视频 | 狠狠操夜夜 | 9在线观看免费高清完整 | 久久一久久 | 97在线观看免费高清完整版在线观看 | 欧美成人在线网站 | www.久久久精品 | 97色在线观看免费视频 | 在线观看日韩av | 日韩综合第一页 | 久久国产一区 | 国产亚洲一区二区三区 | 婷婷丁香视频 | 在线观看www视频 | 国产精品v a免费视频 | 狠狠色综合网站久久久久久久 | 色婷婷色 | 日韩av成人在线观看 | 中文字幕成人在线 | 国产91对白在线播 | 久久99精品国产99久久6尤 | 999久久精品 | av色综合网 | 在线a人片免费观看视频 | 久久在线 | 欧美日韩国内在线 | 久久免费a| 日韩一区二区在线免费观看 | 91成人免费在线视频 | 日本激情中文字幕 | 成人免费在线观看av | 精品国产亚洲在线 | www.亚洲精品视频 | 国产一级视频在线观看 | 精品视频中文字幕 | 精品国产一区二区三区噜噜噜 | 久久久久久久久亚洲精品 | 久久久久久99精品 | 亚洲精品综合在线观看 | 91九色视频在线播放 | 色噜噜狠狠色综合中国 | 日韩av成人在线观看 | 91九色网站 | 国产精品一区二区免费 | 成人小视频在线免费观看 | 日韩中文字幕91 | av一二三区 | 国产精品久久一区二区三区, | 91视频 - 114av | 永久免费精品视频网站 | 一级黄色在线免费观看 | 激情婷婷 | 天天色天天综合 | 手机av在线免费观看 | 久久99免费视频 | av大片免费在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 亚洲a资源 | av一级免费 | 日韩精品一区二区不卡 | 成人一级电影在线观看 | 精品毛片久久久久久 | 天天干天天操天天入 | 黄色av成人在线观看 | 欧美一级日韩免费不卡 | 日韩精品一区二区三区免费视频观看 | 精品视频www| 在线视频a | 日韩av资源在线观看 | 麻豆免费视频网站 | 免费在线激情电影 | 亚洲国产偷 | 97超碰人人干 | 久久精品国产精品亚洲 | 日韩精品免费在线 | 欧美黑人xxxx猛性大交 | 亚洲综合黄色 | 久久精品国产成人精品 | 午夜视频在线观看一区 | 激情欧美一区二区三区 | 97在线观看免费高清 | 欧美国产日韩在线视频 | zzijzzij亚洲日本少妇熟睡 | 欧美视频在线观看免费网址 | 91成人亚洲| 日韩视频一| 国产不卡av在线 | 丁香综合av| 久草com| 在线色亚洲 | 超碰伊人网 | 欧美最猛性xxxx| 成人啪啪18免费游戏链接 | 国内精品在线看 | 免费观看91视频大全 | 日本精品视频一区二区 | 在线观看免费中文字幕 | 奇米网在线观看 | 一级片视频免费观看 | 五月激情在线 | 福利片视频区 | 色婷婷伊人 | 日韩专区在线 | 爱干视频| 香蕉网在线 | 色婷婷电影网 | 97超碰在线久草超碰在线观看 | 午夜国产福利在线 | 人人爽人人爽 | 亚洲成av人影院 | 午夜免费久久看 | 国产一级免费观看 | 激情偷乱人伦小说视频在线观看 | 亚洲国产精品免费 | 亚洲精欧美一区二区精品 | 国产精品mm | 免费看黄网站在线 | 午夜视频二区 | 91av国产视频 | 五月花激情| 久久精品99久久久久久 | 亚洲精品资源在线 | 中文字幕在线视频一区二区 | 欧美日韩一区二区三区在线观看视频 | 九月婷婷人人澡人人添人人爽 | 欧美精品中文在线免费观看 | 久久久91精品国产一区二区三区 | 亚洲精品视频在线观看免费 | 成人午夜电影网站 | 久久久久亚洲国产精品 | 日b视频在线观看网址 | 日日干 天天干 | 久久刺激视频 | 在线激情网 | 亚洲精品国产日韩 | 婷婷5月激情5月 | 国产精品高 | 国产高清99 | 日韩高清一 | 国产一级二级三级在线观看 | 在线国产片| 欧美男女爱爱视频 | 日韩免费电影一区二区 | 欧美日韩国产色综合一二三四 | 国产不卡免费视频 | 91九色蝌蚪视频 | 岛国av在线不卡 | 国产精品毛片久久久 | 在线观看免费成人 | www.色婷婷 | 最近日本字幕mv免费观看在线 | 日韩精品网址 | 808电影 | 四季av综合网站 | 亚洲电影久久 | 91精品视频播放 | 91精品久久久久久久久 | 国产成人免费观看久久久 | 99re6热在线精品视频 | 成人教育av| 日韩区欠美精品av视频 | 黄色一及电影 | 97超碰在线人人 | 久久久久久看片 | 91成人久久| 婷婷视频| 青草视频在线免费 | av在线免费播放 | 日韩高清观看 | 91av视频在线观看免费 | 亚洲在线网址 | 国产日本在线观看 | 国产精品专区一 | 日韩激情视频 | 久久尤物电影视频在线观看 | 亚洲自拍自偷 | 国产一级黄色av | 久久综合九色综合97婷婷女人 | 日本少妇视频 | 久草男人天堂 | 久久伊人操 | 91完整版在线观看 | 天天在线操| 中文字幕在线免费看线人 | 国产精品 日韩 | 国产成人在线精品 | 久草免费在线视频观看 | 中文字幕在线观看完整 | 日本久久影视 | av中文字幕在线观看网站 | 国产又粗又猛又爽又黄的视频先 | 国产精品九九久久久久久久 | 9在线观看免费高清完整版在线观看明 | 中文字幕在线观看一区二区 | 激情视频免费观看 | 成人久久毛片 | 91成人区 | 久久久久久中文字幕 | 99久久精品视频免费 | 极品久久久久久久 | 久久久久国产一区二区三区 | 国产高清精 | 国产99久久久国产精品 | 久久精品久久99精品久久 | 国产一级片免费视频 | 国产一区二区综合 | 久久久久久久久免费视频 | 最近免费中文视频 | 在线观看黄a | 麻豆成人在线观看 | 欧美另类高清 | 亚洲成a人片综合在线 | 六月天综合网 | 亚洲精品视频免费在线观看 | 日韩av播放在线 | 欧美日本不卡高清 | 久久视频在线观看免费 | av免费网 | 久久这里只有精品23 | 亚洲最新在线视频 | 综合久久久久久 | 天天插天天干天天操 | 久久久高清一区二区三区 | 欧美日韩在线视频观看 | 欧美国产在线看 | 国产精品女主播一区二区三区 | 久久久久久久99精品免费观看 | 最近2019年日本中文免费字幕 | 久久综合久久久 | 最近中文字幕视频网 | 91人人爱 | 欧美日韩高清一区二区三区 | 欧美日韩国产成人 | 婷婷午夜 | 精品久久久久久国产 | 四虎成人精品永久免费av | 91精品视频一区二区三区 | 蜜臀aⅴ国产精品久久久国产 | 成人黄色av免费在线观看 | 综合久久综合久久 | 五月婷婷综合在线观看 | 欧美日本一区 | 最近中文字幕视频网 | 在线观看网站你懂的 | 色网站中文字幕 | 人人草在线观看 | 成人午夜av电影 | 免费在线观看国产黄 | 国产日韩欧美中文 | 在线看91| 国产99久久九九精品免费 | 欧美成人一二区 | 狠狠色噜噜狠狠狠狠2022 | 久久久蜜桃一区二区 | 日韩a在线播放 | 亚洲国产成人精品久久 | 麻豆国产视频 | 九九色网| av噜噜噜在线播放 | 国产护士在线 | 99精品视频在线观看播放 | 国产精品乱码久久久久 | av在线8| 国产精品久久久久久一区二区 | 激情av综合 | av免费网站观看 | 成人av在线亚洲 | 国产99久久久久久免费看 | 美女在线观看网站 | 久久国产欧美日韩精品 | 成年人免费看av | 在线久热| 欧美国产高清 | 97在线免费 | 欧美a级在线免费观看 | 国产精品刺激对白麻豆99 | 91九色蝌蚪在线 | www色网站 | 色香com.| 麻豆va一区二区三区久久浪 | 国产视频精品免费 | 中文字幕亚洲欧美日韩 | 国产中文字幕在线视频 | 成人国产在线 | 精品国产视频在线观看 | 国产成人三级在线 | 亚洲午夜久久久久久久久久久 | 99热在线这里只有精品 | 亚洲国产精彩中文乱码av | 99久久精品国产欧美主题曲 | 伊人影院在线观看 | 精品一区二区免费在线观看 | 99视屏| 亚洲午夜精品一区二区三区电影院 | 337p日本欧洲亚洲大胆裸体艺术 | 成人午夜影院在线观看 | 亚洲综合视频在线播放 | 人人舔人人爱 | 久久99热这里只有精品国产 | 超碰在线97观看 | 在线观看91精品视频 | 成人av网站在线观看 | 日韩欧美视频免费在线观看 | 97电影院网 | 亚洲精品av中文字幕在线在线 | 色资源网在线观看 | 成人黄色小说在线观看 | 欧美亚洲免费在线一区 | 中文字幕精| 在线观看av不卡 | 欧美色精品天天在线观看视频 | 91av美女| 日韩一级片观看 | 日本中文字幕在线看 | 99爱视频在线观看 | 91免费在线视频 | 怡红院av | 久久伦理电影 | 99精品在线观看 | 伊人婷婷色 | 国产小视频网站 | 久久激情日本aⅴ | 91超碰免费在线 | 亚洲精品中文在线资源 | 亚洲97在线 | 日韩免费看的电影 | 97超碰精品 | 亚洲年轻女教师毛茸茸 | 五月天婷亚洲天综合网鲁鲁鲁 | 蜜臀久久99静品久久久久久 | 国产精品久久久电影 | 日韩av网页 | 国产精品手机在线观看 | 久久综合久久久 | 亚洲天天摸日日摸天天欢 | 国产精品a成v人在线播放 | 国产精品18久久久 | 99久久久久久国产精品 | 国产高清网站 | 国产精品6999成人免费视频 | 国产免费一区二区三区网站免费 | 国产精品一区二区在线观看 | 高清av影院| 98精品国产自产在线观看 | wwxxx日本| 天堂在线视频中文网 | 视频一区二区三区视频 | 九热在线 | 美女网站色 | 久久99国产精品久久99 | 麻豆一区二区三区视频 | 一区二区三区av在线 | 日韩成人中文字幕 | 久草在线观看视频免费 | 国产黄免费看 | 欧美亚洲成人免费 | 在线视频1卡二卡三卡 | 欧美一区在线看 | 中文字幕亚洲字幕 | 国产日韩在线观看一区 | 中文在线字幕免费观看 | 成人羞羞免费 | 97**国产露脸精品国产 | 午夜av一区 | 国产精品麻豆欧美日韩ww | 热99久久精品 | 六月丁香婷婷在线 | 成人黄色在线视频 | 欧美日韩破处 | 日韩精品资源 | 欧美日韩国产在线精品 | 欧美国产视频在线 | 国内免费的中文字幕 | av手机版| 久久久综合电影 | 国产精品久久久久av福利动漫 | 久久久久久久久久影视 | 91福利专区 | 成人在线观看资源 | 黄色小说视频网站 | 久久久夜色 | 欧美激情va永久在线播放 | 国产精品都在这里 | 日韩精品视频第一页 | 99中文字幕 | 国产视频 亚洲精品 | 免费在线激情视频 | 美女一二三区 | 久久超碰99| 天天看天天操 | 精品一区电影 | 国产一区视频免费在线观看 | 国产成人三级在线播放 | 人成午夜视频 | 麻豆国产精品视频 | 国产精品久久久久久超碰 | 美女中文字幕 | 91精品视屏 | 免费一区在线 | 天天操夜夜操天天射 | 日韩区欠美精品av视频 | 日韩高清成人 | 黄色网址在线播放 | 欧美成人精品欧美一级乱 | 国产在线观看午夜 | 国产成人亚洲精品自产在线 | 久久污视频 | 高清av免费看 | 在线国产一区二区三区 | 国产精品18久久久久久不卡孕妇 | av片无限看 | 中文字幕在线观看视频免费 | 激情视频一区二区 | 91大神一区二区三区 | 国产精品永久久久久久久久久 | 91片黄在线观 | 在线精品一区二区 | 天天色天天艹 | 网站在线观看你们懂的 | 国产亚洲精品久久久网站好莱 | 亚洲成人软件 | 中文字幕在线观看免费高清电影 | 欧美精品一区二区在线观看 | 一级欧美日韩 | 国产日韩av在线 | 久久精品国产免费看久久精品 | av超碰免费在线 | 日韩欧美高清一区二区三区 | 在线观看视频日韩 | 亚洲精品影院在线观看 | 亚洲精品国产第一综合99久久 | 精品久久久久久久久久国产 | 欧美日韩中文视频 | 91精品国产麻豆 | 日本 在线 视频 中文 有码 | 青草草在线 | www.香蕉视频在线观看 | 亚洲精品av在线 | 2020天天干天天操 | www.人人草 | www.午夜| 亚洲精品动漫久久久久 | 91最新国产 | 国产免费av一区二区三区 | 91成人在线观看高潮 | 91成人精品一区在线播放69 | 国产黄色片网站 | 中文字幕第一页在线播放 | 97在线观看免费观看高清 | 欧美激情综合五月色丁香 | 成人免费视频免费观看 | 日韩一级片观看 | 91视频免费国产 | 91九色porny蝌蚪视频 | 日韩二区三区 | 综合婷婷久久 | 精品少妇一区二区三区在线 | 999视频网 | av免费观看在线 | 久久91久久久久麻豆精品 | 亚洲精品 在线视频 | 日韩在线观看一区二区三区 | 91国内在线| 国产精品综合在线观看 | 免费看污片| 999亚洲国产996395 | 天天天天色综合 | 久久亚洲免费 | 日韩激情小视频 | 免费大片av| 天天操天天怕 | 三级免费黄色 | 欧美日韩免费网站 | 中文字幕av在线不卡 | 69av视频在线观看 | 91禁在线观看 | free. 性欧美.com | 国产精品一区二区 91 | 国产精品乱码久久久久 | 91精品在线播放 | 麻豆播放 | 亚洲乱码精品久久久久 | 国产一卡久久电影永久 | 丰满少妇麻豆av | 亚洲美女免费精品视频在线观看 | 亚洲精品伦理在线 | 久热色超碰 | 久久久久国产a免费观看rela | 在线观看免费日韩 | 久久成人免费视频 | 国产无限资源在线观看 | 8x成人免费视频 | 手机成人av| 91在线中字 | 久久精品日本啪啪涩涩 | 亚洲理论电影 | 成人小视频在线免费观看 | 2018好看的中文在线观看 | 97国产大学生情侣白嫩酒店 | 九九热精品视频在线播放 | 亚洲专区免费观看 | 成人在线黄色电影 | 久保带人 | 国产私拍在线 | 婷婷在线看 | 免费看91的网站 | 五月天久久综合网 | 中文字幕人成乱码在线观看 | 欧美精品小视频 | 四虎在线永久免费观看 | 国产视频中文字幕在线观看 | 欧美三级高清 | 91尤物国产尤物福利在线播放 | 日日夜夜艹 | 97超级碰 | 又黄又爽又色无遮挡免费 | 欧美动漫一区二区三区 | wwwwwww色| 在线色资源 | 国产精品2区| 五月婷丁香网 | www.99av| 亚洲国产精品第一区二区 | 亚洲天堂网站 | 国产午夜激情视频 | 成人午夜电影网 | 国产中文字幕一区二区三区 | 国产精品成人一区二区 | 久久精品网站免费观看 | 婷婷在线资源 | 久久久美女 | 免费成人黄色 | 婷婷精品视频 | 国语对白少妇爽91 | av电影免费在线播放 | 一级黄色免费 | 国产日韩精品一区二区在线观看播放 | 欧美国产高清 | 又黄又爽免费视频 | 欧美日韩国产在线一区 | 久久国产精品免费一区 | 美女免费视频一区 | 精品视频久久久 | 黄网站色欧美视频 | 国产精品高潮呻吟久久久久 | 婷婷久月 | 91亚色视频在线观看 | 91精品专区 | 国产精品门事件 | 亚洲精品99久久久久中文字幕 | 91丨九色丨国产丨porny精品 | 色综合天天爱 | 色网站视频 | 欧美精品乱码久久久久久 | 国产在线国偷精品产拍 | 伊人影院av| 在线不卡视频 | 亚洲精品在线免费看 | 亚洲精品自拍视频在线观看 | 狠狠狠狠狠狠狠狠干 | 国产色视频123区 | 一级黄色在线视频 | 精品人人爽 | 精品国产欧美一区二区三区不卡 | 国产一级片观看 | 在线观看视频在线 | 精品国产欧美 | 夜夜操网| 色偷偷88888欧美精品久久 | 69视频在线 | 亚洲精品中文在线观看 | 又污又黄网站 | 欧美成年人在线观看 | 日韩一区二区三区不卡 | 国产一级在线 | 成人在线视频在线观看 | 成片免费观看视频999 | 久久九九网站 | 亚洲精品理论 | 91.麻豆视频 | 午夜视频黄 | 中文字幕在线观看第三页 | 国产123av| 特级西西www44高清大胆图片 | 狠狠操狠狠干2017 | 夜添久久精品亚洲国产精品 | 正在播放国产精品 | 免费av观看| 久草视频免费在线播放 | 99久久久久国产精品免费 | 在线观看日本高清mv视频 | a在线免费观看视频 | av一本久道久久波多野结衣 | 国外av在线 | 91九色视频国产 | 午夜精品福利一区二区三区蜜桃 | 激情久久伊人 | 日韩精品欧美专区 | 91丨九色丨国产女 | 伊人影院得得 | 丁香视频在线观看 | 深爱激情丁香 | 久久美女免费视频 | 久久夜色精品国产欧美一区麻豆 | 国产精品亚洲片在线播放 | 日本一区二区免费在线观看 | 国产精品观看在线亚洲人成网 | 香蕉蜜桃视频 | 99久热精品 | 久久久免费精品视频 | 18国产精品福利片久久婷 | 日韩免费视频一区二区 | 亚洲精品资源在线 | 亚洲成人网av | 色综合久久久 | 在线99热 | av电影在线免费 | 免费国产在线精品 | 91丨九色丨首页 | 中文字幕资源网 | 国产精品久久久久一区二区三区共 | 在线观看视频97 | 精品久久久免费 | 麻豆影视网| 亚洲va欧美| 久色小说| 欧美在一区 | 99九九99九九九视频精品 | www.黄色片.com| 日韩视频区 | www久久99| 在线a亚洲视频播放在线观看 | 久久激情小视频 | 天天综合网久久 | 亚洲一区二区麻豆 | 国产无套精品久久久久久 | 欧美日韩一区二区视频在线观看 | 亚洲国产一区av | 国产精品第二页 | 欧美精品国产综合久久 | 一级黄色片毛片 | 久草精品视频在线播放 | 亚洲日韩精品欧美一区二区 | 天天激情综合 | 欧美精品xx | 一级黄色大片 | 欧美性生活一级片 | 99视频精品免费观看, | 伊人久久一区 | 五月婷网站 | 一区二区三区播放 | 在线观看视频97 | 九九久久国产精品 | 999久久久久久久久6666 | 久久艹中文字幕 | 黄av在线 | 婷婷激情综合 | 成人黄色影片在线 | 黄色小视频在线观看免费 | 国产不卡在线视频 | 青青久草在线 | 片网址| а天堂中文最新一区二区三区 | 五月天久久久久久 | 国产高清精 | 2019中文最近的2019中文在线 | 日韩精品欧美专区 | 精品国产亚洲一区二区麻豆 | 亚洲精品视频免费 | 久久视频二区 | 成年人免费在线看 | 美女网站视频免费都是黄 | 午夜国产福利在线 | 久久在线免费观看 | 91丨九色丨高潮 | 色资源中文字幕 | 亚洲精品在线免费 | 色爱区综合激月婷婷 | 国产精品1区 | 丁香激情五月 | 国产粉嫩在线观看 | 在线91观看 | 国产高清不卡一区二区三区 | 国产中文字幕在线看 | 亚洲精品大全 | 4438全国亚洲精品观看视频 | 欧美日韩二区在线 | 日韩高清不卡在线 | 日黄网站| 日本一区二区不卡高清 | 波多野结衣精品在线 | 999ZYZ玖玖资源站永久 | 亚洲精品一区二区三区新线路 | 99在线精品免费视频九九视 | 91精品老司机久久一区啪 | 99精品国产免费久久久久久下载 | 日韩网站在线播放 | 天天插天天狠 | 国产精品二区在线 | 99国产情侣在线播放 | 精品久久一区二区三区 | 99在线看| 国产一区国产二区在线观看 | 国产中文在线观看 | 91精品欧美一区二区三区 | 日本激情动作片免费看 |