串列埠使用時一般包含兩個緩衝區,即傳送緩衝區和接收緩衝區。傳送資料時,先將資料存在傳送緩衝區,然後透過串列埠傳送;接收資料時,先將接收的資料存在接收緩衝區,然後再進行讀取。
合理恰當的使用緩衝區,不僅可以使不同裝置間正常通訊,而且還有助於節約記憶體,提高效率。
二、緩衝區分配管理:
方法一:
透過記憶體池實現
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值,將空閒的緩衝區塊標號較小的塊分配,返回分配的緩衝區塊的標號
串列埠使用時一般包含兩個緩衝區,即傳送緩衝區和接收緩衝區。傳送資料時,先將資料存在傳送緩衝區,然後透過串列埠傳送;接收資料時,先將接收的資料存在接收緩衝區,然後再進行讀取。
合理恰當的使用緩衝區,不僅可以使不同裝置間正常通訊,而且還有助於節約記憶體,提高效率。
二、緩衝區分配管理:
方法一:
透過記憶體池實現
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值,將空閒的緩衝區塊標號較小的塊分配,返回分配的緩衝區塊的標號