你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
D罩杯恋人 提问时间:2016-10-11 22:33 /


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

IAR编译器下面设置

IAR编译器下面设置
(1)

2.以下是我IAR  icf文件的设置:但是设置没有效果
/*###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:[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不熟悉一申请就会进入硬错误中断。
QQ截图20161011221813.jpg (2)


想要大家给予帮助的问题:就是在使用IAR的情况下,怎么设置IAR使使用片外内存向使用片内内存一样?可以使用mallo函数进行动态内存管理?官方虽然有一个例程但是他的例程只能使用片外内存,不能同时使用片内内存。










收藏 3 评论7 发布时间:2016-10-11 22:33

举报

7个回答
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
顶一下

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版