|

楼主 |
发表于 2023-5-14 21:48:31
|
显示全部楼层
图片发不了吗,我把代码贴上:
//内存池(64字节对齐)
u8 mem1base[MEM1_MAX_SIZE]__attribute__((section(".RAM_D1")))__attribute__((align(64))); //内部SRAM内存池
u8 mem2base[MEM2_MAX_SIZE] __attribute__((section(".bss.SD_RAM")))__attribute__((align(64))); //外部SDRAM内存池,前面2M给LTDC用了(1280*800*2)
u8 mem5base[MEM5_MAX_SIZE]__attribute__((align(64))); //内部DTCM内存池
//内存管理表
u32 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]__attribute__((section(".RAM_D1"))); //内部SRAM内存池MAP
u32 mem2mapbase[MEM2_ALLOC_TABLE_SIZE]__attribute__((section(".bss.SD_RAM"))); //外部SDRAM内存池MAP
u32 mem5mapbase[MEM5_ALLOC_TABLE_SIZE] ; //内部DTCM内存池MAP
sct文件内容为:
LR_IROM1 0x08000000 0x00020000 { ; load region size_region
ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
; RW data - 128KB DTCM
RW_IRAM1 0x20000000 0x00020000 {
.ANY (+RW +ZI)
}
; RW data - 512KB AXI SRAM
RW_IRAM2 0x24000000 0x00080000 {
*(.RAM_D1)
}
; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
RW_IRAM3 0x30000000 0x00048000 {
*(.RAM_D2)
}
; RW data - 64KB SRAM4(0x38000000)
RW_IRAM4 0x38000000 0x00010000 {
*(.RAM_D3)
}
RW_IRAM5 0xD0000000 0x02000000 { ; RW data
*(.bss.SD_RAM)
}
}
数组大小:
//mem1内存参数设定.mem1是H7内部的AXI内存.
#define MEM1_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM1_MAX_SIZE 448*1024 //最大管理内存 448K,H7的AXI内存总共512KB
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表大小
//mem2内存参数设定.mem2是外部的SDRAM内存
#define MEM2_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM2_MAX_SIZE 28*1024*1024 //最大管理内存28912K,外扩SDRAM总共64MB,LTDC占了2MB,还剩62MB.
#define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //内存表大小
//mem5内存参数设定.mem5是H7内部的DTCM内存,此部分内存仅CPU和MDMA可以访问!!!!!!
#define MEM5_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM5_MAX_SIZE 60 *1024 //最大管理内存120K,H7的DTCM共128KB
#define MEM5_ALLOC_TABLE_SIZE MEM5_MAX_SIZE/MEM5_BLOCK_SIZE //内存表大小
改成如下可以运行成功:
u8 mem1base[MEM1_MAX_SIZE]__attribute__((section(".RAM_D1")))__attribute__((align(64))); //内部SRAM内存池
u8 mem2base[MEM2_MAX_SIZE] __attribute__((section(".bss.ARM.__at_0xD0000000")))__attribute__((align(64))); //外部SDRAM内存池,前面2M给LTDC用了(1280*800*2)
u8 mem5base[MEM5_MAX_SIZE]__attribute__((align(64))); //内部DTCM内存池
//内存管理表
u32 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]__attribute__((section(".RAM_D1"))); //内部SRAM内存池MAP
u32 mem2mapbase[MEM2_ALLOC_TABLE_SIZE]__attribute__((section(".bss.ARM.__at_0xD2000000"))); //外部SDRAM内存池MAP
|
|