[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公司自己搞出来的 还是有历史文献参考
回复
使用道具
举报