国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

eheap嵌入式堆的配置

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Micro Digital ? 2022-06-22 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

許多嵌入式系統(tǒng)不使用堆。許多確實(shí)使用堆的人使用必須按順序搜索的串行堆,因此可能非常慢。大多數(shù)其他嵌入式系統(tǒng)可能使用廣泛可用的dlmalloc,它以無法更改的固定結(jié)構(gòu)為代價(jià)提供快速操作。

一個(gè)名為eheap的新嵌入式堆在這些極端情況之間提供了一個(gè)中間地帶。它為在 RTOS 上運(yùn)行或獨(dú)立運(yùn)行的嵌入式系統(tǒng)提供高性能、適應(yīng)性和安全性。eheap 旨在為特定的嵌入式系統(tǒng)輕松定制。它符合 malloc()、free()、realloc() 和 calloc() 的 ANSI C 標(biāo)準(zhǔn),并為堆控制和安全提供附加功能。

這是關(guān)于 eheap 的三篇文章系列中的第一篇:

? eheap 第 1 部分:配置

? eheap 第 2 部分:增強(qiáng)調(diào)試

? eheap 第 3 部分:自我修復(fù)

eheap 是一種 bin 類型的堆,類似于 dlmalloc。假設(shè)讀者熟悉這種類型的堆結(jié)構(gòu),或者對(duì)這些堆如何操作的細(xì)節(jié)不感興趣。因此,這篇文章和后續(xù)文章將討論 eheap 的獨(dú)特之處,而不是它的工作原理。對(duì)于那些想要更詳細(xì)信息的人,請(qǐng)參閱eheap 與 dlmalloc。

嵌入式系統(tǒng)特性

eheap 設(shè)計(jì)用于以下方面:

? 范圍廣泛的 RAM 大小,從非常小到大。

? 預(yù)計(jì)永遠(yuǎn)運(yùn)行。

? 需要高性能和確定性操作。

? 高優(yōu)先級(jí)任務(wù)必須能夠搶占并快速運(yùn)行。

? 小代碼量通常是必要的。

? 每個(gè)嵌入式系統(tǒng)的堆要求范圍相對(duì)較窄。

? 嵌入式系統(tǒng)有大量空閑時(shí)間。

? 嵌入式系統(tǒng)對(duì)自我修復(fù)的需求不斷增長。

bin 配置

與其他 bin 類型的堆一樣,eheap 有一個(gè)用于小塊的小型 bin 數(shù)組 (SBA) 和一個(gè)用于大塊的上部 bin 數(shù)組 (UBA)。SBA 就像一組塊池,但速度不快。與 dlmalloc 不同,UBA 中的 bin 大小是連續(xù) 2 字節(jié)的冪(256、512 等),eheap 允許選擇 bin 大小以適合應(yīng)用程序。eheap bin 大小由一個(gè)恒定的bin 大小數(shù)組確定,由程序員指定。對(duì)于小 bin,bin 大小是 bin 的塊大小。[1] 對(duì)于大 bin,bin 大小是 bin 中的最小塊大小。一個(gè) bin 的最大塊大小是下一個(gè) bin 的大小 – 8.[2]

為了安全起見,bin 大小數(shù)組可以位于 ROM 中,也可以位于本地 RAM 中以獲得更高的性能。堆初始化函數(shù)使用它來創(chuàng)建 eheap 所需的 bin 和所有相關(guān)變量。可以通過更改 bin 大小數(shù)組中的值、重新編譯和重新啟動(dòng)應(yīng)用程序來快速重新配置堆。這種快速重新配置支持一種啟發(fā)式方法來調(diào)整 eheap 以獲得特定系統(tǒng)的最佳性能。

小型系統(tǒng)示例

小型系統(tǒng)可能有一個(gè) bin 大小的數(shù)組,如圖 1 所示。

pYYBAGKyhAGAc-AEAABZzyaIZak584.png

[圖 1]

對(duì)于這個(gè)系統(tǒng),SBA 由 bin 0、1 和 2 組成,分別保存大小為 24、32 和 40 的塊;bin3 包含從 48 到 120 的 10 個(gè)尺寸;bin4 是一個(gè)只包含大小為 128 的小 bin;bin 5 包含從 136 到 248 的 14 個(gè)尺寸;和 bin6 ,頂部 bin,包含從 264 開始的所有大小。-1 標(biāo)記大小數(shù)組的結(jié)尾。在這個(gè)特定的嵌入式系統(tǒng)中,對(duì)小塊的需求是有限的,對(duì)中等塊有一些需求,而對(duì) 264 字節(jié)以上的大塊的需求很少。請(qǐng)注意,為 128 字節(jié)的塊添加了一個(gè)小 bin,這些塊在此系統(tǒng)中經(jīng)常使用。

上垃圾箱搜索

eheap 和 dlmalloc 在 SBA 方面是相似的。兩者都針對(duì)非常快速的訪問進(jìn)行了優(yōu)化,這是面向?qū)ο蟪绦蛲ǔP枰摹V饕獏^(qū)別在于 UBA,其中 dlmalloc 在 free() 操作期間構(gòu)建樹以指導(dǎo) malloc() 操作期間的最佳分配。樹節(jié)點(diǎn)鏈接巧妙地存儲(chǔ)在塊本身中。

對(duì)于 eheap,每個(gè) bin 都有一個(gè)適合該 bin 的空閑塊列表。在 free() 操作期間,如果塊大于 bin 的第一個(gè)塊,則將其放在 bin 空閑列表的末尾;否則,將其放在 bin 空閑列表的開頭。在空閑時(shí)間,大的 bin 空閑列表按增加的塊大小進(jìn)行排序。在 malloc() 操作期間,會(huì)在大的 bin 空閑列表中搜索第一個(gè)足夠大的塊,這也是最合適的。

eheap 最適合具有偏好塊大小并且不使用廣泛的塊大小的系統(tǒng)。如上例所示,可以在 UBA 中放入一個(gè)小 bin 以提供常用尺寸。實(shí)現(xiàn)此結(jié)果的另一種方法是使大的 bin 大小等于經(jīng)常使用的塊大小。那么最適合的將始終是 bin 中的第一個(gè)塊,然后是更大的尺寸。

在某種程度上,大型垃圾箱就像已排序的迷你串行堆一樣運(yùn)行。過多的搜索時(shí)間可能會(huì)受到箱大小與系統(tǒng)需求的明智選擇以及對(duì)合并的明智使用的限制,如下所述。堆設(shè)計(jì)的一個(gè)原則是處理更大的塊需要更長的時(shí)間,因此更長的 malloc() 時(shí)間不會(huì)降低平均性能。當(dāng)然, malloc() 不能花費(fèi)太長時(shí)間以致更高優(yōu)先級(jí)的任務(wù)錯(cuò)過它們的截止日期。

圖 2 顯示了一個(gè) bin 堆示例。

pYYBAGKyhAiAE8Q1AAAX3WGbKqo284.png

【圖2】

在這種情況下,沒有SBA也沒有UBA,只有top bin。此堆接近串行類型堆,但仍比它具有優(yōu)勢。

圖 3 顯示了一個(gè)沒有 SBA 堆的示例。

pYYBAGKyhA-ACI42AAA2dJGeeds495.png

[圖 3]

用 C 編寫的嵌入式系統(tǒng)可能對(duì)小塊幾乎沒有用處,或者,塊池可能更適合特定系統(tǒng)中的小塊。在這種情況下,bin 0 以 24 開頭,因?yàn)楸仨毟采w 24 字節(jié)及以上的所有大小,但 bin 0 可能僅用于 64 字節(jié)及更大的塊。 [3]

圖 4 顯示了一個(gè)沒有 UBA 堆的示例。

pYYBAGKyhBWAJZukAABbZhFogQI272.png

[圖 4]

在這個(gè)堆中,SBA 覆蓋大小為 24 到 64 的塊,所有其他塊進(jìn)入 bin 6,覆蓋 72 個(gè)字節(jié)及以上。

幾乎無限的堆配置是可能的。目前,為了獲得最佳性能,eheap 限制為 32 個(gè) bin。如果更多的 bin 被證明對(duì)某些嵌入式系統(tǒng)有益,則可以增加此限制。

Donor chunk

eheap 有一個(gè)可選的donor chunk (dc),它類似于dlmalloc 的指定犧牲塊(dvc),但操作方式不同并且服務(wù)于不同的目的:

? 快速小塊分配的初始源。

? 將小塊分離到下堆,將大塊分離到上堆。

? 基于緩存的系統(tǒng)的小塊本地化。

如果啟用,則 dc 的空間將由程序員在頂部塊 (tc) 下方分配。通常,它只是總初始可用空間的一小部分,它是 dc 和 tc 的組合。如果用于分配小塊的選定 SBA 箱為空,則從 dc 中分割該塊,而不是從下一個(gè)較大的占用箱中取出它。這不僅更快,而且還避免了減少更大的垃圾箱。由于 dc 最初是堆的較低部分,因此小塊將來自較低的堆。這改善了小塊分配的本地化,并且還傾向于按塊大小隔離堆,以幫助減少使用中的小塊,以免阻塞大塊的合并。

在堆使用一段時(shí)間后,小塊分配將主要來自 SBA 箱,很少來自 dc。此時(shí)可以關(guān)閉使用 dc 并將剩余的內(nèi)容釋放到垃圾箱中。或者,可以繼續(xù)使用 dc。當(dāng)下面和相鄰的已釋放塊合并到其中時(shí),它會(huì)增長,并且隨著從中分配塊,它會(huì)縮小。這將提高空 SBA 箱的性能。

塊合并和泄漏箱

dlmalloc 和 eheap 之間的一個(gè)重要區(qū)別是 dlmalloc 總是合并相鄰的空閑塊,而 eheap 允許延遲合并。eheap 合并由其cmerge 模式控制,應(yīng)用程序可以打開或關(guān)閉該模式。在堆初始化之后它是關(guān)閉的。

延遲合并的原因是塊合并會(huì)產(chǎn)生泄漏的 bin。例如,假設(shè)一個(gè) 24 字節(jié)的塊被釋放到 bin 0,而物理上相鄰的 48 字節(jié)的空閑塊駐留在 bin 3。如果啟用合并,這些塊將被合并成一個(gè) 72 字節(jié)的塊,該塊將被放入bin 6。如果應(yīng)用程序需要 24 和 48 字節(jié)的塊而不是 72 字節(jié)的塊,這不利于獲得最佳性能。此外,在 free() 操作期間,將 48 字節(jié)塊出列并合并它需要額外的時(shí)間。如果后續(xù) malloc() 獲取 72 字節(jié)塊,將其拆分為 24 和 48 字節(jié)塊以獲取其中任何一個(gè),然后將剩余部分重新排隊(duì),則這是浪費(fèi)時(shí)間。

與可能使用多種塊大小的一般處理不同,嵌入式系統(tǒng)傾向于使用有限的塊大小。因此,泄漏箱對(duì)于嵌入式系統(tǒng)來說不是最佳的。

cmerge可以直接控制也可以自動(dòng)控制。如果自動(dòng)模式amerge為 ON,則當(dāng)可用空間低于下限時(shí), cmerge 將打開,當(dāng)可用空間高于上限時(shí),它將關(guān)閉。限制由配置常數(shù)決定。或者,可以使用空閑塊的數(shù)量、平均空閑塊大小或 bin 中的總空間,這取決于在特定系統(tǒng)中最有效的方法。

概括

eheap 是一種新的嵌入式堆,可以通過調(diào)整 bin 大小數(shù)組,決定是否使用 dc 以及它應(yīng)該多大,以及決定是否使用延遲合并以及如果使用,如何控制它。這些選項(xiàng)允許將eheap調(diào)整到特定系統(tǒng),以實(shí)現(xiàn)最佳系統(tǒng)性能,而不會(huì)出現(xiàn)碎片導(dǎo)致分配失敗。eheap 可免費(fèi)用于非商業(yè)用途。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20458

    瀏覽量

    334328
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    866

    瀏覽量

    123048
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式驅(qū)動(dòng)開發(fā),需要掌握哪些技能?

    有經(jīng)驗(yàn)的老司機(jī)都知道,做嵌入式驅(qū)動(dòng)開發(fā)需要掌握一系列的技能,包含編程、硬件、操作系統(tǒng)、調(diào)試等多個(gè)方面。 1、硬件知識(shí)熟悉原理圖:能看懂原理圖以及各種元器件的含義,以及PCB布局等。 了解
    發(fā)表于 01-20 16:46

    什么是嵌入式應(yīng)用開發(fā)?

    概述 所謂的嵌入式應(yīng)用開發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應(yīng)用開發(fā)?是指在嵌入式操作系統(tǒng)下進(jìn)行開發(fā),包括系統(tǒng)化設(shè)計(jì)指導(dǎo)下的硬件和軟件綜合研發(fā)。
    發(fā)表于 01-12 16:13

    淺淺問一下,嵌入式端是用protobuf?

    ——嵌入式那點(diǎn)內(nèi)存,動(dòng)不動(dòng)就幾 KB 幾十 KB 的 RAM,你 protobuf 解出來那一動(dòng)態(tài)分配、嵌套消息,稍不留神棧就溢出了,也 fragmentati
    的頭像 發(fā)表于 12-17 10:16 ?207次閱讀
    淺淺問一下,<b class='flag-5'>嵌入式</b>端是用protobuf?

    系統(tǒng)嵌入式的學(xué)習(xí)路線

    嵌入式技術(shù)是各種電子產(chǎn)品的核心技術(shù),也是工業(yè)4.0、遠(yuǎn)程醫(yī)療、3D打印等新興產(chǎn)業(yè)的核心技術(shù),具有廣闊的發(fā)展前景。很多計(jì)算機(jī)、電子信息類專業(yè)的學(xué)生都想把嵌入式開發(fā)作為自己的職業(yè)目標(biāo),但是因?yàn)?b class='flag-5'>嵌入式涉及
    發(fā)表于 12-16 07:49

    嵌入式和FPGA的區(qū)別

    ,芯片內(nèi)部的門電路連接在出廠時(shí)就已固定,無法更改,它們的功能是通過軟件編程也就是嵌入式軟件來實(shí)現(xiàn)的。 FPGA(現(xiàn)場可編程門陣列) 則是一種可編程邏輯器件,其硬件結(jié)構(gòu)可以通過編程來配置,實(shí)現(xiàn)各種
    發(fā)表于 11-19 06:55

    嵌入式系統(tǒng)的定義和應(yīng)用領(lǐng)域

    在一起,共同構(gòu)成了一個(gè)高效、穩(wěn)定的工作系統(tǒng)。 其實(shí),嵌入式系統(tǒng)的概念與個(gè)人PC有著相似的底層邏輯。單片機(jī),作為單個(gè)芯片上的計(jì)算機(jī)系統(tǒng),其定義明確且獨(dú)特。盡管不同的單片機(jī)在配置、性能、廠家以及指令集
    發(fā)表于 11-17 06:49

    嵌入式需要掌握哪些核心技能?

    )。 企業(yè)需求:招聘崗位中,C語言是100%必備技能,C++和匯編語言的需求隨項(xiàng)目復(fù)雜度提升。 2)嵌入式硬件架構(gòu) 主流平臺(tái):ARM Cortex-M/A系列、RISC-V內(nèi)核,需掌握寄存器配置、時(shí)鐘
    發(fā)表于 10-21 16:25

    恩智浦配置工具助力嵌入式系統(tǒng)設(shè)計(jì)

    設(shè)計(jì)嵌入式系統(tǒng)需要硬件和軟件之間的無縫協(xié)調(diào)。恩智浦配置工具是一款全面且用戶友好的解決方案,旨在幫助開發(fā)人員簡化系統(tǒng)設(shè)置流程,加快開發(fā)進(jìn)程并減少潛在錯(cuò)誤。
    的頭像 發(fā)表于 09-22 16:37 ?1926次閱讀

    嵌入式達(dá)到什么水平才能就業(yè)?

    :包括GPIO、定時(shí)器、中斷、ADC 等外設(shè)的配置與調(diào)試,能實(shí)現(xiàn)如溫濕度采集、電機(jī)控制等功能掌握嵌入式 Linux 驅(qū)動(dòng)開發(fā)基礎(chǔ):能編寫簡單字符設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)設(shè)備的初始化、讀寫操作,會(huì)用內(nèi)核調(diào)試
    發(fā)表于 09-15 10:20

    嵌入式 STM32 零基礎(chǔ)入門:「降維打擊學(xué)習(xí)法」適配零基礎(chǔ),高效進(jìn)階全棧工程師

    “黑盒子”,芯片內(nèi)部的工作原理,看不見,摸不著,全靠死記硬背,抽象難理解!其次,嵌入式知識(shí)體系龐雜,只懂軟件或只懂硬件,缺乏全流程系統(tǒng)認(rèn)知,知識(shí)碎片化!理論學(xué)一
    的頭像 發(fā)表于 08-25 15:24 ?767次閱讀
    <b class='flag-5'>嵌入式</b> STM32 零基礎(chǔ)入門:「降維打擊<b class='flag-5'>式</b>學(xué)習(xí)法」適配零基礎(chǔ),高效進(jìn)階全棧工程師

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    Linux嵌入式與單片機(jī)嵌入式在多個(gè)方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運(yùn)行在嵌入式設(shè)備上的一種
    發(fā)表于 06-20 09:46

    嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開發(fā)成為熱門技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開發(fā)入門指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29

    飛凌嵌入式2025嵌入式及邊緣AI技術(shù)論壇圓滿結(jié)束

    飛凌嵌入式「2025嵌入式及邊緣AI技術(shù)論壇」在深圳深鐵皇冠假日酒店盛大舉行,此次活動(dòng)邀請(qǐng)到了200余位嵌入式技術(shù)領(lǐng)域的技術(shù)專家、企業(yè)代表和工程師用戶,共享嵌入式及邊緣AI技術(shù)的盛宴!
    的頭像 發(fā)表于 04-28 13:57 ?4150次閱讀
    飛凌<b class='flag-5'>嵌入式</b>2025<b class='flag-5'>嵌入式</b>及邊緣AI技術(shù)論壇圓滿結(jié)束

    嵌入式適合自學(xué)嗎?

    嵌入式適合自學(xué)嗎?其實(shí)并不建議大家自學(xué)嵌入式,主要有以下原因。 一)學(xué)習(xí)難度大 1)知識(shí)體系復(fù)雜:嵌入式系統(tǒng)是一個(gè)復(fù)雜的領(lǐng)域,涉及到計(jì)算機(jī)、電子、通信等多學(xué)科知識(shí),需要學(xué)習(xí)者具備扎實(shí)的軟硬件
    發(fā)表于 04-27 09:54

    飛凌嵌入式「2025嵌入式及邊緣AI技術(shù)論壇」議程公布

    4月22日,飛凌嵌入式“2025嵌入式及邊緣AI技術(shù)論壇”將在深圳舉行,論壇以“新生態(tài),智未來”為主題,旨在匯聚行業(yè)智慧,探討嵌入式技術(shù)與邊緣AI的深度融合與創(chuàng)新應(yīng)用。
    的頭像 發(fā)表于 04-02 15:12 ?1375次閱讀
    飛凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及邊緣AI技術(shù)論壇」議程公布