硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4072|回复: 8
收起左侧

[ThreadX全家桶] 发一个 移植 threadx os 系统里面的内存管理 malloc ,大家伙看看有没有什么更好的建议 ?

[复制链接]

615

主题

3073

回帖

4938

积分

至尊会员

积分
4938
发表于 2020-11-5 16:04:14 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2021-8-20 15:45 编辑

发一个 移植 threadx os 系统里面的内存管理,大家伙看看有没有什么更好的建议 ?


malloc_tx_byte_b.h (2.74 KB, 下载次数: 78)

malloc_tx_byte_b.c (29.84 KB, 下载次数: 95)



int main(void)
{
        uint8_t  *_sdram_addr1=0;
        uint8_t  *_sdram_addr2=0;
        uint8_t  *_sdram_addr3=0;
        
        uint8_t  *_sram1_addr1=0;
        uint8_t  *_sram1_addr2=0;
        uint8_t  *_sram1_addr3=0;
        
        uint8_t  *_dtcm_addr1=0;
        uint8_t  *_dtcm_addr2=0;
        uint8_t  *_dtcm_addr3=0;


  ... ...

        bsp_MemoryInit();


        {
                _sdram_addr1 = (uint8_t  *)mymalloc(SDRAMEX, 1024*1024*3);
                _sdram_addr2 = (uint8_t  *)mymalloc(SDRAMEX, 1024*1024*4);

                My_Printf("_sdram_addr1 = 0x%X \r\n", &_sdram_addr1);
                My_Printf("_sdram_addr2 = 0x%X \r\n", &_sdram_addr2);
                myfree(SDRAMEX,_sdram_addr2) ;
               
                _sdram_addr3 = (uint8_t  *)mymalloc(SDRAMEX, 1024*5);
                My_Printf("_sdram_addr3 = 0x%X \r\n", &_sdram_addr3);
                myfree(SDRAMEX,_sdram_addr1) ;
                myfree(SDRAMEX,_sdram_addr3) ;
        }
        
        {
                _sram1_addr1 = (uint8_t  *)mymalloc(SRAM1, 1024*3);
                _sram1_addr2 = (uint8_t  *)mymalloc(SRAM1, 1024*32);

                My_Printf("_sram1_addr1 = 0x%X \r\n", &_sram1_addr1);
                My_Printf("_sram1_addr2 = 0x%X \r\n", &_sram1_addr2);
                myfree(SRAM1,_sram1_addr2) ;
               
                _sram1_addr3 = (uint8_t  *)mymalloc(SRAM1, 1024*5);
                My_Printf("_sram1_addr3 = 0x%X \r\n", &_sram1_addr3);
                myfree(SRAM1,_sram1_addr1) ;
                myfree(SRAM1,_sram1_addr3) ;
        }

        {
                _dtcm_addr1 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*3);
                _dtcm_addr2 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*32);

                My_Printf("_dtcm_addr1 = 0x%X \r\n", &_dtcm_addr1);
                My_Printf("_dtcm_addr2 = 0x%X \r\n", &_dtcm_addr2);
                myfree(DTCMSRAM,_dtcm_addr2) ;
               
                _dtcm_addr3 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*5);
                My_Printf("_dtcm_addr3 = 0x%X \r\n", &_dtcm_addr3);
                myfree(DTCMSRAM,_dtcm_addr1) ;
                myfree(DTCMSRAM,_dtcm_addr3) ;
        }


for(;;) {}
}

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-5 16:45:34 | 显示全部楼层
资源使用情况整理了没
回复

使用道具 举报

615

主题

3073

回帖

4938

积分

至尊会员

积分
4938
 楼主| 发表于 2020-11-6 09:18:16 | 显示全部楼层
本帖最后由 hpdell 于 2020-11-6 10:15 编辑
eric2013 发表于 2020-11-5 16:45
资源使用情况整理了没

我目前移植后大概测试了一下,貌似效果还不错,不过程序里面还有几处可以优化一下,当然不优化也没有什么关系
/*
**************************************************************************************************************
内存申请,释放测试
_sdram_addr1 = 0xC0600008
_sdram_addr2 = 0xC0900034
_sdram_addr3 = 0xC0900034
_sdram_addr4 = 0xC090143C
_sdram_addr1 = 0xC0600008

---------------------------------------------------
_sram1_addr1 = 0x30000008
_sram1_addr2 = 0x30000C10
_sram1_addr3 = 0x30000C10
_sram1_addr4 = 0x30002018
_sram1_addr1 = 0x30000008

---------------------------------------------------
_dtcm_addr1 = 0x20000008
_dtcm_addr2 = 0x20000C10
_dtcm_addr3 = 0x20000C10
_dtcm_addr4 = 0x20002018
_dtcm_addr1 = 0x20000008

---------------------------------------------------
**************************************************************************************************************
*/
void bsp_memory_demo(void)
{
        uint8_t  *_sdram_addr1=0;
        uint8_t  *_sdram_addr2=0;
        uint8_t  *_sdram_addr3=0;
        uint8_t  *_sdram_addr4=0;
        
        uint8_t  *_sram1_addr1=0;
        uint8_t  *_sram1_addr2=0;
        uint8_t  *_sram1_addr3=0;
        uint8_t  *_sram1_addr4=0;
        
        uint8_t  *_dtcm_addr1=0;
        uint8_t  *_dtcm_addr2=0;
        uint8_t  *_dtcm_addr3=0;
        uint8_t  *_dtcm_addr4=0;
        
        {
                _sdram_addr1 = (uint8_t  *)mymalloc(SDRAMEX, 1024*1024*3+35);
                _sdram_addr2 = (uint8_t  *)mymalloc(SDRAMEX, 1024*1024*4+57);

                TX_MemoryDebug("_sdram_addr1 = 0x%X \r\n", _sdram_addr1);
                TX_MemoryDebug("_sdram_addr2 = 0x%X \r\n", _sdram_addr2);
                myfree(SDRAMEX,_sdram_addr2) ;
               
                _sdram_addr3 = (uint8_t  *)mymalloc(SDRAMEX, 1024*5);
                _sdram_addr4 = (uint8_t  *)mymalloc(SDRAMEX, 1024*5);
                TX_MemoryDebug("_sdram_addr3 = 0x%X \r\n", _sdram_addr3);
                TX_MemoryDebug("_sdram_addr4 = 0x%X \r\n", _sdram_addr4);
                myfree(SDRAMEX,_sdram_addr1) ;
                myfree(SDRAMEX,_sdram_addr3) ;
                myfree(SDRAMEX,_sdram_addr4) ;
               
                _sdram_addr1 = (uint8_t  *)mymalloc(SDRAMEX, 1024*1024*3+36);
                TX_MemoryDebug("_sdram_addr1 = 0x%X \r\n", _sdram_addr1);
                TX_MemoryDebug("\r\n---------------------------------------------------\r\n");
        }
        
        {
                _sram1_addr1 = (uint8_t  *)mymalloc(SRAM1, 1024*3);
                _sram1_addr2 = (uint8_t  *)mymalloc(SRAM1, 1024*32+65);

                TX_MemoryDebug("_sram1_addr1 = 0x%X \r\n", _sram1_addr1);
                TX_MemoryDebug("_sram1_addr2 = 0x%X \r\n", _sram1_addr2);
                myfree(SRAM1,_sram1_addr2) ;
               
                _sram1_addr3 = (uint8_t  *)mymalloc(SRAM1, 1024*5);
                _sram1_addr4 = (uint8_t  *)mymalloc(SRAM1, 1024*5);
                TX_MemoryDebug("_sram1_addr3 = 0x%X \r\n", _sram1_addr3);
                TX_MemoryDebug("_sram1_addr4 = 0x%X \r\n", _sram1_addr4);
                myfree(SRAM1,_sram1_addr1) ;
                myfree(SRAM1,_sram1_addr3) ;
                myfree(SRAM1,_sram1_addr4) ;
               
                _sram1_addr1 = (uint8_t  *)mymalloc(SRAM1, 1024*3);
                TX_MemoryDebug("_sram1_addr1 = 0x%X \r\n", _sram1_addr1);
                myfree(SRAM1,_sram1_addr1) ;
                TX_MemoryDebug("\r\n---------------------------------------------------\r\n");
        }

        {
                _dtcm_addr1 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*3);
                _dtcm_addr2 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*32+57);

                TX_MemoryDebug("_dtcm_addr1 = 0x%X \r\n", _dtcm_addr1);
                TX_MemoryDebug("_dtcm_addr2 = 0x%X \r\n", _dtcm_addr2);
                myfree(DTCMSRAM,_dtcm_addr2) ;
               
                _dtcm_addr3 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*5);
                _dtcm_addr4 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*5);
                TX_MemoryDebug("_dtcm_addr3 = 0x%X \r\n", _dtcm_addr3);
                TX_MemoryDebug("_dtcm_addr4 = 0x%X \r\n", _dtcm_addr4);
                myfree(DTCMSRAM,_dtcm_addr1) ;
                myfree(DTCMSRAM,_dtcm_addr3) ;
                myfree(DTCMSRAM,_dtcm_addr4) ;
               
                _dtcm_addr1 = (uint8_t  *)mymalloc(DTCMSRAM, 1024*3);
                TX_MemoryDebug("_dtcm_addr1 = 0x%X \r\n", _dtcm_addr1);
                myfree(DTCMSRAM,_dtcm_addr1) ;
                TX_MemoryDebug("\r\n---------------------------------------------------\r\n");
        }
}






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-6 10:28:46 | 显示全部楼层
hpdell 发表于 2020-11-6 09:18
我目前移植后大概测试了一下,貌似效果还不错,不过程序里面还有几处可以优化一下,当然不优化也没有什么 ...

不错,整理了资源占用情况的函数,效果更好。
回复

使用道具 举报

615

主题

3073

回帖

4938

积分

至尊会员

积分
4938
 楼主| 发表于 2020-11-12 10:19:23 | 显示全部楼层
eric2013 发表于 2020-11-6 10:28
不错,整理了资源占用情况的函数,效果更好。

以后我就使用这套 内存管理程序了唷


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-12 11:17:48 | 显示全部楼层
hpdell 发表于 2020-11-12 10:19
以后我就使用这套 内存管理程序了唷

后面把那个资源占用情况函数也整上,这套方式就更加普及了
回复

使用道具 举报

615

主题

3073

回帖

4938

积分

至尊会员

积分
4938
 楼主| 发表于 2020-11-12 16:06:52 | 显示全部楼层
eric2013 发表于 2020-11-12 11:17
后面把那个资源占用情况函数也整上,这套方式就更加普及了

资源占用情况我大概看了一下,貌似他也只是返回对应控制块的信息而已,所以我就没有搞了,

要想查看对应控制块的信息,可以直接 访问各个控制块的就行了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-13 10:19:36 | 显示全部楼层
hpdell 发表于 2020-11-12 16:06
资源占用情况我大概看了一下,貌似他也只是返回对应控制块的信息而已,所以我就没有搞了,

要想查看对 ...

我看下了,他这个还能返回碎片信息,有点强啊
回复

使用道具 举报

615

主题

3073

回帖

4938

积分

至尊会员

积分
4938
 楼主| 发表于 2020-11-13 10:28:58 | 显示全部楼层
eric2013 发表于 2020-11-13 10:19
我看下了,他这个还能返回碎片信息,有点强啊

貌似是的,

先使用一段时间看看是否稳定啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-9 16:50 , Processed in 0.222348 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表