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

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

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

uC/OS-II內(nèi)存管理方法詳解

冬至子 ? 來(lái)源:硬件工程師技術(shù)干貨 ? 作者:硬件工程師技術(shù)干 ? 2023-09-11 15:32 ? 次閱讀

ucos內(nèi)存管理方法十分小巧,實(shí)時(shí)性好,非常值得借鑒。大致原理如下:

ucos把內(nèi)存初始化成相同大小的內(nèi)存塊,使用單向鏈表的方式連接起來(lái),使用時(shí)從鏈表摘下,釋放時(shí)重新插入鏈表。

當(dāng)然可以存在多條鏈表,根據(jù)用戶需求配置,同一個(gè)鏈表內(nèi)內(nèi)存塊是相同大小的。比如,以100或200字節(jié)為內(nèi)存塊的內(nèi)存鏈表。

每條內(nèi)存鏈表使用一個(gè)結(jié)構(gòu)體(OS_MEM)控制,這個(gè)結(jié)構(gòu)體描述了這一條鏈表中的內(nèi)存屬性,比如內(nèi)存塊大小,剩余內(nèi)存塊的數(shù)量,內(nèi)存塊總數(shù)量等等。

1、

此函數(shù)由系統(tǒng)內(nèi)部調(diào)用,用戶不必理會(huì),主要是一些初始化動(dòng)作,前面說(shuō)了每條鏈表都有一個(gè)結(jié)構(gòu)體OS_MEM控制。

ucos建立了一個(gè)OS_MEM結(jié)構(gòu)體數(shù)組,這個(gè)函數(shù)就是把這個(gè)結(jié)構(gòu)體數(shù)組成員使用單向鏈表連接起來(lái),并且對(duì)結(jié)構(gòu)體進(jìn)行初始化。

ucos使用一個(gè)全局指針指向表頭,方便結(jié)構(gòu)體取用。每一個(gè)結(jié)構(gòu)體都可以控制一個(gè)內(nèi)存鏈表。結(jié)構(gòu)體數(shù)量用戶可以通過(guò)宏定義配置。

2、

此函數(shù)初始化并創(chuàng)建內(nèi)存塊鏈表。主要過(guò)程是從結(jié)構(gòu)體鏈表中取下一個(gè)空閑結(jié)構(gòu)體。根據(jù)參數(shù)提供的內(nèi)存起始地址和內(nèi)存塊大小,把整個(gè)內(nèi)存分為大小一致的內(nèi)存塊,使用單向鏈表連接起來(lái)。

再把內(nèi)存塊鏈表的屬性信息填寫(xiě)到結(jié)構(gòu)體中。此函數(shù)返回一個(gè)結(jié)構(gòu)體指針。找到這個(gè)結(jié)構(gòu)體就找到了這條鏈表。

3、

根據(jù)OS_MEM類型指針找到對(duì)應(yīng)的鏈表結(jié)構(gòu)體,如果空閑的內(nèi)存塊數(shù)量大于0,那么從鏈表中摘下一個(gè)內(nèi)存塊,然后修改OS_MEM結(jié)構(gòu)體信息,返回內(nèi)存首地址。

4、

這個(gè)簡(jiǎn)單,獲得內(nèi)存塊鏈表的名稱。

5、

這個(gè)簡(jiǎn)單,設(shè)置內(nèi)存塊鏈表的名稱。

6、

釋放內(nèi)存,把用完的內(nèi)存塊,插入pmem對(duì)應(yīng)的鏈表中,然后修改pmem結(jié)構(gòu)體信息。

7、

查詢指定的內(nèi)存鏈表中的內(nèi)存使用情況,查詢結(jié)果放在OS_MEM_DATA 結(jié)構(gòu)體中。

優(yōu)點(diǎn):

仔細(xì)閱讀源碼就會(huì)發(fā)現(xiàn),每次取出內(nèi)存塊的時(shí)間是一樣的,速度非???,放入內(nèi)存塊消耗的時(shí)間也是一樣,運(yùn)行時(shí)間可控,實(shí)時(shí)性非常好,代碼量很小。

缺點(diǎn):

每條鏈表中的內(nèi)存塊都是一樣大小,使用時(shí)會(huì)有些浪費(fèi)。

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

    關(guān)注

    112

    文章

    15885

    瀏覽量

    175372
  • 內(nèi)存管理
    +關(guān)注

    關(guān)注

    0

    文章

    167

    瀏覽量

    14099
  • ucos-ii
    +關(guān)注

    關(guān)注

    1

    文章

    11

    瀏覽量

    3567
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    uC/OS-II簡(jiǎn)介

    知名的CPU 上。嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存
    發(fā)表于 10-08 09:11

    uC/OS-II簡(jiǎn)介

    知名的CPU 上。嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存
    發(fā)表于 10-11 09:26

    uC/OS-II簡(jiǎn)介

    知名的CPU 上。嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存
    發(fā)表于 10-15 11:03

    uC/OS-II簡(jiǎn)介

    知名的CPU 上。嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存
    發(fā)表于 10-20 09:35

    uC/OS-II簡(jiǎn)介

    知名的CPU 上。嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理,內(nèi)存
    發(fā)表于 10-25 09:59

    uC/OS-II簡(jiǎn)介

    知名的CPU 上。嚴(yán)格地說(shuō)uC/OS-II只是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它僅僅包含了任務(wù)調(diào)度,任務(wù)管理,時(shí)間管理內(nèi)存
    發(fā)表于 10-27 09:29

    如何去解決uC/OS-II中優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題?

    uC/OS-II的運(yùn)行機(jī)制是什么?uC/OS-II中的優(yōu)先級(jí)翻轉(zhuǎn)問(wèn)題有哪些?如何去解決uC/OS-II
    發(fā)表于 04-25 07:07

    μC/OS-II內(nèi)核的任務(wù)調(diào)度及內(nèi)存管理,看完你就懂了

    μC/OS-II內(nèi)核的任務(wù)調(diào)度及內(nèi)存管理嵌入式系統(tǒng)的應(yīng)用軟件介紹
    發(fā)表于 04-28 06:19

    uC/OS-II源碼包的下載

    ? STM32F107——uC/OS-II 源碼包的下載一、微內(nèi)核 uC/OS-II 的構(gòu)成實(shí)時(shí)微內(nèi)核 uC/
    發(fā)表于 08-05 08:09

    uC/OS-II移植過(guò)程記錄

    怎么去移植uC/OS-II系統(tǒng)呢?移植uC/OS-II系統(tǒng)的過(guò)程是怎樣的?
    發(fā)表于 11-01 07:38

    為什么想學(xué)uc/OS-II

    請(qǐng)大家先想一下,為什么想學(xué)uc/OS-II?在通過(guò)例程學(xué)習(xí)單片機(jī)的時(shí)候有沒(méi)有這樣的疑問(wèn),為什么例程是一個(gè)個(gè)孤立的呢,能否整合在一起?RTOS就是這樣一個(gè)多線程運(yùn)行的好工具,我選取UCOS來(lái)實(shí)現(xiàn)
    發(fā)表于 02-18 07:16

    不受uc/os-ii管理的中斷和受管理的中斷是否具有相同的響應(yīng)方式?

    不受 uc/os-ii 管理的中斷和受管理的中斷是否具有相同的響應(yīng)方式,即不受管理的中斷在中斷 uc
    發(fā)表于 02-27 15:03

    The uC/OS-II port for Keil C V

    The uC/OS-II port for Keil C V6.20, V6.21 or higher
    發(fā)表于 03-25 14:18 ?57次下載

    基于uc/os-ii 的嵌入式GUI研究與應(yīng)用

    目前,uc/os-ii 在嵌入式系統(tǒng)中得到了廣泛的應(yīng)用,但適用于uc/os-ii 的圖形界面卻很少。本文介紹了一種適用于uc/
    發(fā)表于 08-24 08:17 ?21次下載

    uC/OS-II—郵箱介紹

    uC/OS-II中郵箱是線程(任務(wù))通訊的一種,使用郵箱能夠發(fā)送一個(gè)指針,當(dāng)然也可以發(fā)送指針大小的數(shù)據(jù)。
    的頭像 發(fā)表于 09-11 15:35 ?975次閱讀