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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版