D罩杯恋人 发表于 2016-10-11 22:33:51

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



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

2.以下是我IARicf文件的设置:但是设置没有效果
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_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:;
define region RAM_region   = mem:|mem:;

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={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函数进行动态内存管理?官方虽然有一个例程但是他的例程只能使用片外内存,不能同时使用片内内存。










anywill 发表于 2016-10-12 08:20:24

太高深,先帮你顶上去::)

高二毛 发表于 2016-10-12 10:37:43

研究的很深啊,关注学习。

ynwscfsfi 发表于 2016-10-12 10:51:39

不懂,帮顶

D罩杯恋人 发表于 2016-10-14 13:27:06

看样子这个帖子没人知道,就这样沉了

mark0668 发表于 2016-10-14 15:16:47

太深,不懂

mark0668 发表于 2016-10-14 15:17:03

用内存管理就行了

zero99 发表于 2016-11-15 08:08:40

顶一下
页: [1]
查看完整版本: F103zet6扩展512k的外内存,怎么向使用内部的内存一样使用?