国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

LwIP 內(nèi)存配置

發(fā)布時(shí)間:2016-9-8 14:02    發(fā)布者:小融一號(hào)


前言
LwIP 在 lwipopts.h 和 opt.h 頭文件中提供了多個(gè)配置選項(xiàng)。用戶可以根據(jù)不同的性能需求和不同應(yīng)用的內(nèi)存限制對(duì)協(xié)議棧用到的內(nèi)存配置進(jìn)行調(diào)節(jié)。Opt.h 頭文件中包括協(xié)議使能和設(shè)置,內(nèi)存設(shè)置,調(diào)試選項(xiàng)等等。而 Lwipopts.h 頭文件中集合了opt.h 中一些常常需要改動(dòng)的部分。一般情況下用戶對(duì) lwipopts.h 頭文件進(jìn)行修改就可以了。不管是對(duì)lwipopts.h 還是opt.h進(jìn)行修改,都必須保證是在已經(jīng)對(duì)你所改動(dòng)的內(nèi)容足夠的了解的情況下進(jìn)行,所做的改動(dòng)是正確的,否則有可能導(dǎo)致協(xié)議棧 不能正常工作,或者效率低下。

LwIP 的內(nèi)存管理機(jī)制
在進(jìn)行內(nèi)存配置之前,我們有必要先了解LwIP 的內(nèi)存管理機(jī)制。
   Lwip 動(dòng)態(tài)內(nèi)存管理
LwIP 中可以使用兩種動(dòng)態(tài)內(nèi)存分配的方法:Heap 和 Pool 的方式。
Heap 的方式,每次都根據(jù)你實(shí)際需要的大小分配一塊內(nèi)存出來(lái)用,用完以后再還回去。
Pool 的方式則是,預(yù)先將內(nèi)存等分成若干份,每次分配時(shí)都拿出其中的一塊或幾塊來(lái)。假設(shè)每等份是 256bytes,而你需要300bytes 的內(nèi)存空間,Pool 的方式就會(huì)給你分配兩個(gè)256bytes 的內(nèi)存塊(一共 512bytes)。雖然有點(diǎn)浪費(fèi),但這種方式分配內(nèi)存速度很快,非常適合在接收數(shù)據(jù)時(shí)使用。

對(duì)于 Heap 的方式,程序默認(rèn)是使用LwIP 提供的mem_malloc/mem_free 進(jìn)行內(nèi)存的分配和釋放。這種方式下,程序需要預(yù)先分配一段內(nèi)存空間用來(lái)做heap 分配,這段預(yù)留的空間大小通過(guò) MEM_SIZE 定義。

你也可以通過(guò) C 標(biāo)準(zhǔn)庫(kù)里的 malloc/free 函數(shù)進(jìn)行內(nèi)存的分配和釋放。需要定義宏 MEM_LIBC_MALLOC。

   Pbuf 類型
      前面說(shuō)的 Heap 和 Pool 都是 LwIP 動(dòng)態(tài)分配內(nèi)存的方式。而 LwIP 采用了 pbuf 的形式管理內(nèi)存中的信息,pbuf 結(jié)構(gòu)既支持動(dòng) 態(tài)內(nèi)存分配保存信息包內(nèi)容,也支持讓信息包數(shù)據(jù)駐留在靜態(tài)存儲(chǔ)區(qū)。pbufs 可以在一個(gè)鏈表中鏈接在一起,被稱作一個(gè)pbuf 鏈,這樣一個(gè)信息包可以跨越幾個(gè)pbufs。

LwIP 有三種類型的pbuf: PBUF_RAM, PBUF_ROM,PBUF_POOL。這三種類型擁有不同的使用目的。

·PBUF_RAM 類型的 pbuf 用于應(yīng)用程序發(fā)送的數(shù)據(jù)被動(dòng)態(tài)生成的情況。在這種情況下,pbuf 系統(tǒng)不僅為應(yīng)用數(shù)據(jù)分配內(nèi) 存,還要給為這些數(shù)據(jù)預(yù)置的包頭分配內(nèi)存。包頭大小在編譯時(shí)是可配置的。MEM_SIZE 定義定義了這類 pbuf 的可用空 間大小。
·PBUF_ROM 類型的 pbuf 用于應(yīng)用程序要發(fā)送的數(shù)據(jù)放置在應(yīng)用程序管理的存儲(chǔ)區(qū)的情況。
·PBUF_POOL 主要用于網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)層,因?yàn)榉峙湟粋(gè) pbuf 的操作可以快速完成,所以非常適合用于中斷處理。
內(nèi)存配置選項(xiàng)
1. 接收數(shù)據(jù)緩存的大小
網(wǎng)絡(luò)接口接收到數(shù)據(jù)包,通過(guò)以太網(wǎng)專用DMA 放到專門(mén)的緩沖區(qū)。然后在low_level_input 函數(shù)中,被拷貝到 PBUF_POOL 中,再將指向該 PBUF_POOL 的指針傳遞給LwIP 協(xié)議棧做進(jìn)一步的處理。這里用于拷貝接收到的數(shù)據(jù)的 PBUF_POOL 的大 小由下面這兩個(gè)配置選項(xiàng)決定:PBUF_POOL_SIZE 和 PBUF_POOL_BUFSIZE。
PBUF_POOL_SIZE:定義可用的 PBUF_POOL 的個(gè)數(shù)
PBUF_POOL_BUFSIZE:定義每個(gè) PBUF_POOL 的大小
PBUF_POOL_SIZE * PBUF_POOL_BUFSIZE 的值就是接收數(shù)據(jù)內(nèi)存總的大小用戶需要根據(jù)接收的數(shù)據(jù)包的平均大小來(lái)設(shè)置這兩個(gè)值。PBUF_POOL_BUFSIZE 設(shè)置的太小,可能每個(gè)數(shù)據(jù)包都要多個(gè)pbuf 來(lái)保存;設(shè)置太大,很少的數(shù)據(jù)也會(huì)占用一個(gè)較大的pbuf 造成浪費(fèi)。

2.發(fā)送數(shù)據(jù)緩存的大小
LwIP 通過(guò) Heap 的方式可分配的總內(nèi)存空間大小由MEM_SIZE 定義,如果應(yīng)用程序需要發(fā)送大量數(shù)據(jù),而且這些數(shù)據(jù)需要拷 貝到 LwIP 協(xié)議棧中,那么這個(gè)值盡量設(shè)置大些。

3.連接
LwIP 協(xié)議棧中通過(guò) PCB(Protocol Control Blocks)的方式管理各個(gè)連接。創(chuàng)建新的PCB 時(shí),也是通過(guò)memory pool 的方式進(jìn)行內(nèi)存分配。MEMP_NUM_UDP_PCB:定義可以創(chuàng)建的 UDP 連接個(gè)數(shù) MEMP_NUM_TCP_PCB:定義可以創(chuàng)建的 TCP 連接個(gè)數(shù)
MEMP_NUM_TCP_PCB_LISTEN:可以創(chuàng)建 listening TCP 連接的個(gè)數(shù)
MEMP_NUM_NETCONN:使用 netconn 和socket 編程時(shí),該值的大小會(huì)影響可以同時(shí)創(chuàng)建的連接的個(gè)數(shù)
MEMP_NUM_NETBUF:使用 netconn 和 socket 編程時(shí),該值設(shè)置太小,可能導(dǎo)致接收數(shù)據(jù)時(shí)分配內(nèi)存失敗,從而不能同時(shí)為幾個(gè)連接的數(shù)據(jù)收發(fā)服務(wù)。

4. TCP 選項(xiàng)
TCP_MSS :該值規(guī)定了TCP 數(shù)據(jù)包數(shù)據(jù)部分的最大長(zhǎng)度
TCP_SND_BUF:一個(gè)TCP 連接的發(fā)送緩存空間大小。改變這個(gè)值只影響一個(gè)TCP 連接可用的發(fā)送緩存空間大小。總的發(fā)送緩存空間是不會(huì)變的(由 MEM_SIZE 決定)。如果同時(shí)活動(dòng)的TCP 連接個(gè)數(shù)很多,這個(gè)值不宜設(shè)置的太大。
TCP_SND_QUEUELEN:TCP 發(fā)送隊(duì)列中最多的pbuf 個(gè)數(shù)
TCP_WND:TCP 接收窗口大小

配置正確性檢查
LwIP 中的很多配置并不是孤立的,在 lwipopts.h 和 opt.h 的某些配置選項(xiàng)前面都有說(shuō)明需要滿足的條件。在修改這些參數(shù)時(shí) 需要特別注意。另外 LwIP 還提供了“sanity checks”,在編譯時(shí)(LwIPv1.4.1,之前的版本是在 lwip_sanity_check 函數(shù)中進(jìn) 行檢查)對(duì) lwipopts.h 和opt.h 中的一些關(guān)鍵的配置進(jìn)行檢查,如果發(fā)現(xiàn)錯(cuò)誤就會(huì)通過(guò)error 信息進(jìn)行提示。該功能可以通過(guò)宏LWIP_DISABLE_MEMP_SANITY_CHECKS 關(guān)閉,建議在調(diào)試時(shí)打開(kāi)。

另外一個(gè)可以在配置LwIP 眾多選項(xiàng)時(shí)給你提供幫助的工具就是CubeMX。CubeMX 里的LwIP 配置頁(yè)面對(duì)每個(gè)選項(xiàng)都做了詳細(xì)解釋,包括建議的最大/最小值。見(jiàn)下圖:

重要通知 - 請(qǐng)仔細(xì)閱讀
意法半導(dǎo)體公司及其子公司(“ST”)保留隨時(shí)對(duì)ST 產(chǎn)品和/ 或本文檔進(jìn)行變更、更正、增強(qiáng)、修改和改進(jìn)的權(quán)利,恕不另行通知。買(mǎi)方訂貨之前應(yīng)獲取關(guān)于ST 產(chǎn)品的最新信息。ST 產(chǎn)品的銷售依照訂單確認(rèn)時(shí)的相關(guān)ST 銷售條款。
買(mǎi)方自行負(fù)責(zé)對(duì)ST 產(chǎn)品的選擇和使用, ST 概不承擔(dān)與應(yīng)用協(xié)助或買(mǎi)方產(chǎn)品設(shè)計(jì)相關(guān)的任何責(zé)任。
ST 不對(duì)任何知識(shí)產(chǎn)權(quán)進(jìn)行任何明示或默示的授權(quán)或許可。
轉(zhuǎn)售的ST 產(chǎn)品如有不同于此處提供的信息的規(guī)定,將導(dǎo)致ST 針對(duì)該產(chǎn)品授予的任何保證失效。
ST 和ST 徽標(biāo)是ST 的商標(biāo)。所有其他產(chǎn)品或服務(wù)名稱均為其各自所有者的財(cái)產(chǎn)。
本文檔中的信息取代本文檔所有早期版本中提供的信息。

© 2015 STMicroelectronics - 保留所有權(quán)利


文章來(lái)源:微信公眾號(hào)號(hào)  融創(chuàng)芯城  


本文地址:http://m.qingdxww.cn/thread-173406-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久久久牛牛影视 | 99热在线只有精品 | 国产麻豆一级在线观看 | 亚洲免费大全 | 国产免费久久精品99 | 欧美专区在线 | 日日夜夜免费精品视频 | aaaa级片| 天天在线免费视频 | 禁网站在线观看免费视频 | 久久久久国产一级毛片高清板 | 韩剧网最新的韩国电视剧免费观看 | 黄色w站| 99热这里只有精品首页精品 | 国产成人精品微拍视频 | 麻豆天美果冻星空91制片厂 | 一区二区三区欧美日韩 | 羞羞人成午夜爽爽影院 | 国产区综合另类亚洲欧美 | 狠狠色丁香久久婷婷 | 成人香蕉 | 青青青在线观看视频免费播放 | 欧美国产亚洲一区 | 五月婷婷深深爱 | 亚洲欧美日本在线 | 色噜噜国产精品视频一区二区 | 欧美一区二区三区在线可观看 | 国产精品自产拍视频观看 | 欧美成人午夜在线全部免费 | 在线不卡日本 | 男人天堂网站 | 国产亚洲欧美另类专区 | 欧美一区二区三区在线观看不卡 | 四虎免费大片aⅴ入口 | 国产成人免费在线观看 | 麻豆视频www | 欧美色青| 韩国一级黄色 | 国模肉肉大尺度啪啪人体150p | 国语自产精品视频 | 亚洲区视频在线观看 |