请问F103zet6扩展512k的外内存怎么向使用内部的内存一样使用?

2019-07-14 16:07发布

1.STM32f103ze,FSMC初始化已经正确,而且单字节读写没有问题。在使用IAR编译器的情况,内存只能设置一个范围,如下图(1)。现在我想使用扩展的512k内存,像使用内部内存一样使用。如定义 变量 int i; 申请内存 int *p=malloc(sizeof int);  这样的动态使用内存。不知道要怎样编辑 *.icf文件才能达到这样效果?(1)

2.以下是我IAR  icf文件的设置:但是设置没有效果
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$configideIcfEditorcortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x08000000 ;
define symbol __ICFEDIT_region_ROM_end__     = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x2000FFFF;

define symbol __ICFEDIT_region_EXRAM_start__   = 0x68000000;
define symbol __ICFEDIT_region_EXRAM_end__     = 0x68080000;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__ = 0x200;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__]|mem:[from __ICFEDIT_region_EXRAM_start__   to __ICFEDIT_region_EXRAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place at address mem:__ICFEDIT_region_EXRAM_start__ { readonly section .bss};


place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };



3.我在IAR定义已指针,地址是外部内存的首地址0x68000000,使用malloc函数维aMemory1申请内存时会进入硬错误中断。使用数组形式,如:aMemory1[5]={1,2,3,4,5}不会,但是读出来的数据都是错的。
#pragma location = 0x68000000
#pragma pack(8)
__no_init uint8_t *aMemory1;
#pragma pack()



4.keil是可以设置片内和片外内存空间的,如下图(2),但是IAR只能设置一个内存空间。所目前问题是不知道IAR要怎么设置才能达到使用内部外部内存时向使用内存一样的效果?比如说使用malloc申请内存。keil编译器是可以这样去申请。但是IAR不熟悉一申请就会进入硬错误中断。
(2)


想要大家给予帮助的问题:就是在使用IAR的情况下,怎么设置IAR使使用片外内存向使用片内内存一样?可以使用mallo函数进行动态内存管理?官方虽然有一个例程但是他的例程只能使用片外内存,不能同时使用片内内存。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。