📄 mac_rx_pool.c
字号:
/*******************************************************************************************************
* *
* ********** *
* ************ *
* *** *** *
* *** +++ *** *
* *** + + *** *
* *** + CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY *
* *** + + *** RX Packet Pool *
* *** +++ *** *
* *** *** *
* ************ *
* ********** *
* *
*******************************************************************************************************
* CONFIDENTIAL *
* The use of this file is restricted by the signed MAC software license agreement. *
* *
* Copyright Chipcon AS, 2005 *
*******************************************************************************************************
* This module contains the RX packet pool, which manages a table of MAC_RX_PACKET structures to be *
* used with the RX engine. *
*******************************************************************************************************/
#include <mac_headers.h>
//-------------------------------------------------------------------------------------------------------
// The RX packet pool
__no_init MAC_RX_PACKET pMrxPacketPool[MAC_OPT_RX_POOL_SIZE] @ "PM0_XDATA";
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// void mrxpInit(void)
//
// DESCRIPTION:
// Initializes the RX packet pool by clearing the "occupied" bits.
//-------------------------------------------------------------------------------------------------------
ROOT void mrxpInit(void) {
memset(pMrxPacketPool, 0x00, sizeof(MAC_RX_PACKET) * MAC_OPT_RX_POOL_SIZE);
} // mrxpInit
//-------------------------------------------------------------------------------------------------------
// mrxpReservePacket(MAC_RX_PACKET **macRxPacket)
//
// DESCRIPTION:
// Reserves a packet from the RX packet pool.
//
//-------------------------------------------------------------------------------------------------------
ROOT MAC_RX_PACKET * mrxpReservePacket(void) {
MAC_RX_PACKET *pPacket;
UINT8 n;
for (n = 0; n < MAC_OPT_RX_POOL_SIZE; n++) {
pPacket = &pMrxPacketPool[n];
DISABLE_GLOBAL_INT();
if (!(pPacket->flags & MRXP_FLAG_PACKET_OCCUPIED_BM)) {
pPacket->flags |= MRXP_FLAG_PACKET_OCCUPIED_BM;
ENABLE_GLOBAL_INT();
return pPacket;
}
ENABLE_GLOBAL_INT();
}
return NULL;
} // mrxpReservePacket
//-------------------------------------------------------------------------------------------------------
// void mrxpReleasePacket(MAC_RX_PACKET* pPacket)
//
// DESCRIPTION:
// Releases a packet back to the RX packet pool.
//
// ARGUMENTS:
// MAC_RX_PACKET* pPacket
// A pointer to the packet to be released. This parameter can be NULL.
//-------------------------------------------------------------------------------------------------------
ROOT void mrxpReleasePacket(MAC_RX_PACKET *pPacket) {
if (pPacket) pPacket->flags = 0x00;
} // mrxpReleasePacket
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -