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