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

查看: 7193|回复: 4

[RL-RTX]

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

[复制链接]

eric2013

eric2013

当前在线

积分115602

1万

主题7万

回帖11万

积分

管理员

积分115602

发消息

电梯直达

楼主

发表于 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中开始才有这个函数。这个文件用在裸机工程也是没问题的。

收藏0

微信公众号:点击此处扫描图片关注

B站视频:https://space.bilibili.com/678329477

淘宝小店:https://anfulai.taobao.com/

【2025新品】H7-TOOL PLUS电池版发布,真正的手持设备,微型数控电源输出电流提升至2A,峰值3A, 防过压防过流防反接

回复

使用道具

举报

myxiaonia

myxiaonia

当前离线

积分597

5

主题582

回帖597

积分

版主

积分597

发消息

沙发

发表于 2016-2-17 09:12:15

|

只看该作者

这几个函数不是线程安全的 没有保护措施 裸机下要注意重入 rtx中还是要用svc模式

回复

使用道具

举报

eric2013

eric2013

当前在线

积分115602

1万

主题7万

回帖11万

积分

管理员

积分115602

发消息

板凳

楼主|

发表于 2016-2-17 11:06:29

|

只看该作者

回 myxiaonia 的帖子

myxiaonia:这几个函数不是线程安全的 没有保护措施  裸机下要注意重入  rtx中还是要用svc模式 (2016-02-17 09:12) 谢谢myxiaonia兄提点。

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

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

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

微信公众号:点击此处扫描图片关注

B站视频:https://space.bilibili.com/678329477

淘宝小店:https://anfulai.taobao.com/

【2025新品】H7-TOOL PLUS电池版发布,真正的手持设备,微型数控电源输出电流提升至2A,峰值3A, 防过压防过流防反接

回复

使用道具

举报

myxiaonia

myxiaonia

当前离线

积分597

5

主题582

回帖597

积分

版主

积分597

发消息

地板

发表于 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库堆,看看性能是不是也占优

回复

使用道具

举报

myxiaonia

myxiaonia

当前离线

积分597

5

主题582

回帖597

积分

版主

积分597

发消息

5#

发表于 2016-2-17 15:58:57

|

只看该作者

这个堆释放内存时,释放和合并相邻内存是自然结合的,也就是释放同时就自动合并了,不知道这个算法是keil公司自己搞出来的 还是有历史文献参考

回复

使用道具

举报

热门