英飞凌
直播中

杨春林

7年用户 938经验值
私信 关注

在tc397 + freertos + lwip + cycloneDDS中分配大内存失败了怎么解决?

你好,我在tc397中使用tc397+freertos+lwip的cyscloneDDS,因为cycloneDDS需要分配较大的内存:
ddsi_rbufpool_new:
rb = ddsrt_malloc (sizeof (struct ddsi_rbuf) + rbp->rbuf_size),
cfg->rbuf_size = UINT32_C (1048576))
因此,我设置了 configTOTAL_HEAP_SIZE:
#定义 configTOTAL_HEAP_SIZE((size_t)(256U * 1024U)),
但出现了一个问题:
TASKING VX-toolset for AURIX Development Studio(非商业):控制程序 v1.1r8 Build 22011964
ltc E112:无法找到 419 部分:
ltc I455:要求:空间 mpe:vtc:linear 中的 202K (0x32818) 字节 RAM 区域
ltc I456:部分类型:范围限制 - 范围 0x70000000-0x7003c000
ltc I456:部分类型:组限制 - 连续
ltc I457: .data.__aborthandler.libcs_fpu (59693) (0x4 字节)
ltc I457: .data.__clocks_per_sec.libcs_fpu (60010) (0x8 字节)
ltc I457: .data._end.libcs_fpu (59048) (0x4 字节)
ltc I457: .data._fmt_nm.libcs_fpu (59529) (0xc 字节)
ltc I457: .data._initial.libcs_fpu (59574) (0x4 字节)
ltc I457: .data._iob.libcs_fpu (59287) (0xc8 字节)
ltc I457: .data._lmon_nm.libcs_fpu (59525) (0x30 字节)
ltc I457: .data._lwday_nm.libcs_fpu (59511) (0x1c 字节)
ltc I457: .data.cdtors.init_status (1926) (0x4 字节)
ltc I457: .data.dds_alloc.dds_allocator_fns (22816) (0xc 字节)
ltc I453: ... (又压制了 409 条 I457 消息)

在编程过程中,如何在这种环境下分配 64k 等大容量内存?

               

回帖(1)

王英

2024-7-5 17:26:59
这里有一些建议来解决这个问题:

1. **检查内存需求**:首先,请确保您了解CycloneDDS所需的内存大小。根据您的描述,它需要至少1MB的内存。请确保您的系统有足够的内存来满足这个需求。

2. **调整configTOTAL_HEAP_SIZE**:您已经尝试将configTOTAL_HEAP_SIZE设置为256KB,但这可能不足以满足CycloneDDS的需求。您可以尝试将这个值增加到更大的值,例如512KB或1MB,以确保有足够的内存分配给CycloneDDS。

3. **优化内存使用**:检查您的代码,看看是否有任何不必要的内存分配或内存泄漏。优化内存使用可以提高系统的整体性能。

4. **使用内存池**:考虑使用内存池来管理内存分配。内存池可以帮助您更有效地管理内存,减少内存碎片,并提高性能。

5. **检查编译器设置**:确保您的编译器设置正确,以便正确地为FreeRTOS、LwIP和CycloneDDS分配内存。检查您的编译器文档,了解如何为这些库配置内存分配。

6. **调试和分析**:使用调试工具来检查内存分配和使用情况。这可以帮助您找到内存分配失败的原因,并找到可能的解决方案。

7. **更新软件版本**:确保您使用的是最新版本的FreeRTOS、LwIP和CycloneDDS。软件更新可能包含修复内存分配问题的错误。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分