回覆列表
  • 1 # 曉峰103075021

    串列埠使用時一般包含兩個緩衝區,即傳送緩衝區和接收緩衝區。傳送資料時,先將資料存在傳送緩衝區,然後透過串列埠傳送;接收資料時,先將接收的資料存在接收緩衝區,然後再進行讀取。

    合理恰當的使用緩衝區,不僅可以使不同裝置間正常通訊,而且還有助於節約記憶體,提高效率。

    二、緩衝區分配管理:

    方法一:

    透過記憶體池實現

    1、資料結構:

    struct _CHN_POOL_MGR

    {

    u8 buffer[BUF_SZ];

    u32 free_bitmap;

    };

    引數含義:struct _CHN_POOL_MGR:記憶體池的資料型別

    buffer:緩衝區,大小為BUF_SZ 192

    free_bitmap:標誌位。

    注意:緩衝區又分為若干塊,每塊大小BLK_SZ

    free_bitmap標誌緩衝區塊中的空閒塊和被使用塊,1表示空閒,0表示被使用

    注:陰影部分表示存放著資料

    free_bitmap初始化為(1 << (sizeof(chn_pool_mgr.buffer) / BLK_SZ)) -1即(1 << (2^10/2^6)) -1,即二進位制數11111...11111b,共16個1,緩衝區塊全部空閒

    alloc_a_slot()函式分配緩衝區塊:檢測free_bitmap值,將空閒的緩衝區塊標號較小的塊分配,返回分配的緩衝區塊的標號

  • 中秋節和大豐收的關聯?
  • 不會自立會對我們成長有什麼危害?