Other Parts Discussed in Thread: SYSCONFIG
Tool/software:
Hello again
I've been struggling with linker errors when trying to build a multicore project , using ENET (ICSS) and IPC across multiple R5 cores and the M4 core.
I've been through the various enet and ipc examples (v10.x MCU+ SDK) and tried to bring together a syscfg for each core but without success. However, I've just discovered that the enet examples use a custom linker.cmd instead of the memory configurator within SysConfig. They contain the following blocks
UNION:
{
.icssfw: palign(128)
.icss_mem: type = NOLOAD {
#if (ENET_SYSCFG_ICSSG0_ENABLED == 1)
#if(ENET_SYSCFG_DUAL_MAC == 1)
#if(ENET_SYSCFG_DUALMAC_PORT1_ENABLED == 1)
*(*gEnetSoc_icssg0HostPoolMem_0)
*(*gEnetSoc_icssg0HostQueueMem_0)
*(*gEnetSoc_icssg0ScratchMem_0)
#if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
*(*gEnetSoc_icssg0HostPreQueueMem_0)
#endif
#else
*(*gEnetSoc_icssg0HostPoolMem_1)
*(*gEnetSoc_icssg0HostQueueMem_1)
*(*gEnetSoc_icssg0ScratchMem_1)
#if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
*(*gEnetSoc_icssg0HostPreQueueMem_1)
#endif
#endif
#endif
#endif
#if (ENET_SYSCFG_ICSSG1_ENABLED == 1)
#if(ENET_SYSCFG_DUAL_MAC == 1)
#if(ENET_SYSCFG_DUALMAC_PORT1_ENABLED == 1)
*(*gEnetSoc_icssg1HostPoolMem_0)
*(*gEnetSoc_icssg1HostQueueMem_0)
*(*gEnetSoc_icssg1ScratchMem_0)
#if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
*(*gEnetSoc_icssg1HostPreQueueMem_0)
#endif
#else
*(*gEnetSoc_icssg1HostPoolMem_1)
*(*gEnetSoc_icssg1HostQueueMem_1)
*(*gEnetSoc_icssg1ScratchMem_1)
#if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
*(*gEnetSoc_icssg1HostPreQueueMem_1)
#endif
#endif
#endif
#endif
#if (ENET_SYSCFG_ICSSG0_ENABLED == 1)
#if(ENET_SYSCFG_DUAL_MAC == 0)
*(*gEnetSoc_icssg0PortPoolMem_0)
*(*gEnetSoc_icssg0PortPoolMem_1)
*(*gEnetSoc_icssg0HostPoolMem_0)
*(*gEnetSoc_icssg0HostPoolMem_1)
*(*gEnetSoc_icssg0HostQueueMem_0)
*(*gEnetSoc_icssg0HostQueueMem_1)
*(*gEnetSoc_icssg0ScratchMem_0)
*(*gEnetSoc_icssg0ScratchMem_1)
#if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
*(*gEnetSoc_icssg0HostPreQueueMem_0)
*(*gEnetSoc_icssg0HostPreQueueMem_1)
#endif
#endif
#endif
#if (ENET_SYSCFG_ICSSG1_ENABLED == 1)
#if(ENET_SYSCFG_DUAL_MAC == 0)
*(*gEnetSoc_icssg1PortPoolMem_0)
*(*gEnetSoc_icssg1PortPoolMem_1)
*(*gEnetSoc_icssg1HostPoolMem_0)
*(*gEnetSoc_icssg1HostPoolMem_1)
*(*gEnetSoc_icssg1HostQueueMem_0)
*(*gEnetSoc_icssg1HostQueueMem_1)
*(*gEnetSoc_icssg1ScratchMem_0)
*(*gEnetSoc_icssg1ScratchMem_1)
#if (ENET_SYSCFG_PREMPTION_ENABLE == 1)
*(*gEnetSoc_icssg1HostPreQueueMem_0)
*(*gEnetSoc_icssg1HostPreQueueMem_1)
#endif
#endif
#endif
}
} > MSRAM
.enet_dma_mem {
*(*ENET_DMA_DESC_MEMPOOL)
*(*ENET_DMA_RING_MEMPOOL)
#if (ENET_SYSCFG_PKT_POOL_ENABLE == 1)
*(*ENET_DMA_PKT_MEMPOOL)
#endif
} (NOLOAD) > MSRAM
Could someone confirm if the custom linker.cmd is the correct / only way of doing this when you use the ENET peripheral and basically SysConfig isn't capable of generating the correct linker.cmd script automatically. This seems to be a major oversight in the functionality of SysConfig. When is this going to be fixed or are we going to continue to have to write our own linker.cmd files ?
Thanks