找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

59

积分

0

好友

3

主题
发表于 2023-9-18 12:38:08 | 查看: 1170| 回复: 3 IP:中国 中国广播电视网络有限公司

在写裸机的时候,可以通过__attribute__向指定的内存段申请内存,现在用操作系统的话,内存交给操作系统管理,但是比如dma外设只能访问到某些范围内的内存,不能随便申请一段,那么在操作系统中该怎么解决这件事呢。

我好像看到过相关api但是自己刚刚找了找没找到。

发表于 2023-9-18 12:42:58 IP:中国 中国广播电视网络有限公司

RT-Thread内存分配可以指定到某块内存,这需要使用memheap内存管理机制。memheap方法适用于系统存在多个内存堆的情况,它可以将多个内存“粘贴”在一起,形成一个大的内存堆,用户使用起来会感到格外便捷。

要使用memheap内存管理机制,您需要先定义一个struct rt_memheap结构体变量,然后调用rt_memheap_init函数来初始化它,指定内存堆的名称、起始地址和大小。例如:

struct rt_memheap my_heap; //定义一个memheap结构体变量
rt_memheap_init(&my_heap, "my_heap", start_addr, size); //初始化memheap

然后,您可以使用rt_memheap_alloc函数来从指定的内存堆中分配一块内存,指定分配的大小和对齐方式。例如:

void *ptr = rt_memheap_alloc(&my_heap, 1024, RT_ALIGN_SIZE); //从my_heap中分配1024字节的内存,按照RT_ALIGN_SIZE对齐

如果您想释放分配的内存,您可以使用rt_memheap_free函数,传入分配的内存指针。例如:

rt_memheap_free(ptr); //释放ptr指向的内存

您可以参考这篇文章来了解更多关于RT-Thread内存管理的内容。

RT-Thread中堆和栈内存的分配_rt_heap_size-CSDN博客

发表于 2023-9-18 12:50:03 IP:中国 中国广播电视网络有限公司

在RT-Thread操作系统中,可以使用rt_malloc()rt_free()函数进行内存分配和释放。默认情况下,RT-Thread会将整个可用的RAM作为一个内存池进行管理。但是如果您希望将特定的内存区域分配给某些任务或外设使用,RT-Thread也提供了相应的功能。

RT-Thread中,可以通过配置文件 rtconfig.h 中的宏定义来设置内存池的起始地址和大小。您可以在这里指定一个特定的内存区域作为内存池,然后通过rt_malloc()从该内存池中分配内存。

此外,RT-Thread还提供了一些与内存相关的API函数,如rt_memheap_init()rt_memheap_alloc()rt_memheap_free(),可以用于创建自定义的内存堆,并从堆中分配和释放内存。这样,您就可以灵活地将某些特定的内存区域分配给任务或外设使用。

发表于 2023-9-18 12:54:07 IP:中国 中国广播电视网络有限公司
dma的缓存,还是自己用静态数组,不要用动态分配
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|国产电子社区 ( 沪ICP备2023018578号-1|

苏公网安备 32011102010465号


)|网站地图

GMT+8, 2024-10-15 07:36 , Processed in 0.059089 second(s), 26 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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