单片机实现内存管理

本文探讨了如何在单片机环境下进行有效的内存管理,包括内存分配、释放以及优化策略。通过对测试函数的分析和实践,揭示了在资源有限的单片机中实现高效内存管理的关键技术和注意事项。
摘要由CSDN通过智能技术生成
/*
 * 第三版,优化free,只需要判断前驱和后继就行,不需要再遍历整个链表
 */

#include <stdint.h>

#define MEM_USED 1
#define MEM_UNUSED 0
#define MEM_SIZE 1024 * 10
#define HEAD_NODE &memeryPool[0]
#define BLOCK_SIZE sizeof(struct MemBlock)
#define MEM_SIZE_MAX (0x7FFF - BLOCK_SIZE)

char memeryPool[MEM_SIZE] = {
   0};
/* 每个字节都是宝,对单片机来说,内存池应该不大于65k,所以size 取 unsigned short可行 */
#pragma pack(1)
struct MemBlock {
   
    struct MemBlock *next;
    uint16_t size : 15; 
    uint8_t state : 1;
};
#pragma pack()

void LaMemInit(void)
{
   
    for (int i = 0; i < sizeof(memeryPool); i++) {
   
        memeryPool[i] = 0;
    }
    struct MemBlock *head = (struct MemBlock *)HEAD_NODE;
    head->next = head;
    head->state = MEM_UNUSED;
    head->size = MEM_SIZE - BLOCK_SIZE;
}

/* 优先使用链表前面节点的地址 */
void *LaMalloc(uint16_t len)
{
   
    if ((len == 0) || (len > MEM_SIZE_MAX)) {
   
        return NULL;
    
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值