通过zigbee的osal层osal_mem_alloc()函数看malloc函数的基本过程

本文通过分析Zigbee协议栈中的osal_mem_alloc函数,探讨了内存分配的基本过程,特别是如何在有限的内存资源中进行有效管理。文章介绍了Zigbee操作系统OSAL层的内存管理结构,包括内存块的头部信息、内存分配策略和内存合并等关键步骤。同时,文章还提到了malloc函数的一般思想,强调了内存分配和释放的逻辑。
摘要由CSDN通过智能技术生成
上课需要利用Z-STACK协议栈做一些小应用,于是昨天晚上在网上找了几篇关于zigbee编程的基础程序架构。
一些zigbee的链接:
<a target=_blank href="http://wenku.baidu.com/link?url=epyK5pIRh6PwwHsX2jEW4FUlLzFzFIITtlSZws-JBT1y7MTLveG2GGU6Sv-C-1fxktQzXd_w7QyZhHr4-Qn_3QUfXUj1cDMOlzXN3taSV0S">zigbee的操作系统的运行</a>
<a target=_blank href="http://blog.chinaunix.net/uid-20788636-id-1841377.html">zigbee的osal层api函数</a>

 
今天下午想了解osal层的一些函数,加上以前了解过malloc的基本实现,于是选取了osal_mem_alloc函数作为例子看了一下,
以下是加详细注释的源代码,我想所有的malloc函数大体思想应该是一样的,希望对malloc感兴趣的又没有例子的同学有所帮助
 
typedef struct {
  unsigned len : 15;    //本块的长度最大是2^16-1个字节,且申请空间的最小粒度是2个字节,因为inuse标志位是1个bit
  unsigned inUse : 1;  //标志位表示本块是否已经被使用
} osalMemHdrHdr_t;

typedef union {
  halDataAlign_t alignDummy; //还没明白什么意思
  uint16 val;    //存储上一个块长度,inuse信息
  osalMemHdrHdr_t hdr;  //块头指针
} osalMemHdr_t;

/* ------------------------------------------------------------------------------------------------
 *                                           Local Variables
 * ------------------------------------------------------------------------------------------------
 */

static __no_init osalMemHdr_t theHeap[MAXMEMHEAP / OSALMEM_HDRSZ];
static __no_init osalMemHdr_t *ff1;  // First free block in the small-block bucket.

static uint8 osalMemStat;            // Discrete status flags: 0x01 = kicked.

static uint16 blkMax;  // Max cnt of all blocks ever seen at once.
static uint16 blkCnt;  // Current cnt of all blocks.
static uint16 blkFree; // Current cnt of fr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值