硬汉嵌入式论坛

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

[RL-RTX] 新版RTX里面动态内存分配比较好用,可以像使用malloc一样使用,且支持多个存储设备

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2016-2-12 13:11:03 | 显示全部楼层 |阅读模式
可以在MDK5.XX的版本里面找到这个rt_Memory.c文件。这个文件可以直接放到MDK4版本中进行使用。
===============================================================

extern U32   rt_init_mem  (void *pool, U32  size);
extern void *rt_alloc_mem (void *pool, U32  size);
extern U32   rt_free_mem  (void *pool, void *mem);
========================================
用户可以直接使用函数rt_init_mem 对SDRAM,SRAM,或者CCM中的RAM空间分别进行初始化,
使用的时候,调用函数rt_alloc_mem进行申请,调用函数rt_free_mem 进行释放。
========================================================
比如我们同时初始化SDRAM,SRAM和CCM进行初始化,使用的时候直接使用即可。
rt_init_mem(SDRAM, 1024*1024);
rt_init_mem(SRAM, 1024*1024);
rt_init_mem(CCM, 1024*1024);

在F429开发板的综合Demo中开始才有这个函数。这个文件用在裸机工程也是没问题的。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2016-2-17 09:12:15 | 显示全部楼层
这几个函数不是线程安全的 没有保护措施  裸机下要注意重入  rtx中还是要用svc模式
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
 楼主| 发表于 2016-2-17 11:06:29 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:这几个函数不是线程安全的 没有保护措施  裸机下要注意重入  rtx中还是要用svc模式 (2016-02-17 09:12) 
谢谢myxiaonia兄提点。
现在我使用这几个函数都是在一个单独的应用或者任务中使用,比如MP3软解,WAV软解,这些都需要动态的申请和释放内存,一旦结束后就将全部动态内存进行收回,防止过多的申请造成大量的小内存块,使得后面的应用无法申请。

内存碎片是最头痛的问题,不过通过嵌套式的调用,嵌套式的释放,这样每次应用结束全部收回,再次使用都是从首地址进行申请,这样动态内存就可以有效控制了。

我打算在uCOS-II,III和FreeRTOS中都用这个函数,这样做一些娱乐性的功能,像视频播放什么的还是很方便的。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2016-2-17 15:53:15 | 显示全部楼层

回 eric2013 的帖子

eric2013:谢谢myxiaonia兄提点。
现在我使用这几个函数都是在一个单独的应用或者任务中使用,比如MP3软解,WAV软解,这些都需要动态的申请和释放内存,一旦结束后就将全部动态内存进行收回,防止过多的申请造成大量的小内存块,使得后面的应用无法申请。

内存碎片是最头痛的问题,不过通 .. (2016-02-17 11:06) 
不敢当啊硬汉兄   我只不过正好花了点时间看过这几个函数

rtx做的东西,估计是为性能考虑,每次都很特别,比如这个堆实现办法,就和其他家的实现很不一样。资源占用没的说,性能和其他家的比我没经验也说不上来,但是安全性检查很少。

所以rtx很多人觉得稳定性不好,初次尝试印象就差,其实要是规范使用并且深入理解还是可以的,就怕胡乱使用,我上次看了下ucos,安全性检查那真是没法比,感觉都像累赘了呵呵。rtx简单直接,基本没有奇怪的命名和宏,就像纯c代码一样,看网上很多人从ucos入门很不理解,个人认为纯粹从代码简洁度说,ucos和freertos无法和rtx相比

硬汉兄  可以比较下和其他rtos上堆内存算法,或者c库堆,看看性能是不是也占优
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2016-2-17 15:58:57 | 显示全部楼层
这个堆释放内存时,释放和合并相邻内存是自然结合的,也就是释放同时就自动合并了,不知道这个算法是keil公司自己搞出来的 还是有历史文献参考
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 01:38 , Processed in 0.171273 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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