初级会员

- 积分
- 51
- 金钱
- 51
- 注册时间
- 2019-7-3
- 在线时间
- 20 小时
|
3金钱
本帖最后由 code90 于 2020-1-14 20:03 编辑
//mem1内存参数设定.mem1完全处于内部SRAM里面.
#define MEM1_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM1_MAX_SIZE 160*1024 //最大管理内存 160K
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表大小
//mem2内存参数设定.mem2的内存池处于外部SDRAM里面
#define MEM2_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM2_MAX_SIZE 28912 *1024 //最大管理内存28912K
#define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //内存表大小
//mem3内存参数设定.mem3处于CCM,用于管理DTCM(特别注意,这部分SRAM,仅CPU可以访问!!)
#define MEM3_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM3_MAX_SIZE 60 *1024 //最大管理内存60K
#define MEM3_ALLOC_TABLE_SIZE MEM3_MAX_SIZE/MEM3_BLOCK_SIZE //内存表大小
//内存池(32字节对齐)
__align(64) u8 mem1base[MEM1_MAX_SIZE]; //内部SRAM内存池
__align(64) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0XC01F4000))); //外部SDRAM内存池,前面2M给LTDC用了(1280*800*2)
__align(64) u8 mem3base[MEM3_MAX_SIZE] __attribute__((at(0X20000000))); //内部DTCM内存池
//内存管理表
u32 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部SRAM内存池MAP
u32 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0XC01F4000+MEM2_MAX_SIZE))); //外部SRAM内存池MAP
u32 mem3mapbase[MEM3_ALLOC_TABLE_SIZE] __attribute__((at(0X20000000+MEM3_MAX_SIZE))); //内部DTCM内存池MAP
//内存管理参数
const u32 memtblsize[SRAMBANK]={MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE,MEM3_ALLOC_TABLE_SIZE}; //内存表大小
const u32 memblksize[SRAMBANK]={MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE,MEM3_BLOCK_SIZE}; //内存分块大小
const u32 memsize[SRAMBANK]={MEM1_MAX_SIZE,MEM2_MAX_SIZE,MEM3_MAX_SIZE}; //内存总大小
上面例程是这样的,为啥内存管理表一定要放到内存池后面?能不能放到内部SRAM中:
u32 mem1mapbase[MEM1_ALLOC_TABLE_SIZE];
u32 mem2mapbase[MEM2_ALLOC_TABLE_SIZE];
u32 mem3mapbase[MEM3_ALLOC_TABLE_SIZE];
这样的话,内存池就可以使用整个外部SDRAM和DTCM了,这样有啥问题么?
这样可以的话,DTCM可以直接分配128k的内存么?
|
最佳答案
查看完整内容[请看2#楼]
当然可以,不过会占用很多SRAM,你愿意牺牲内部SRAM,来换取SDRAM么? sdram性能比内部sram差10倍不止。
|