OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4251|回复: 4

关于SDRAM指定地址空间分配使用的问题

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-6-10
在线时间
8 小时
发表于 2021-11-1 11:14:27 | 显示全部楼层 |阅读模式
1金钱
1.首先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__ = 0x08020000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__    = 0x08020000;
define symbol __ICFEDIT_region_ROM_end__      = 0x081FFFFF;
define symbol __ICFEDIT_region_RAM_start__    = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__      = 0x2004FFFF;
define symbol __ICFEDIT_region_CCMRAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_CCMRAM_end__   = 0x1000FFFF;
define symbol __region_SDRAM_RAM_start__      = 0xC0000000;
define symbol __region_SDRAM_RAM_end__        = 0xCFFFFFFF;
/*define symbol __region_NORFLASH_RAM_start__ = 0x90000000;*/
/*define symbol __region_NORFLASH_RAM_end__   = 0x9FFFFFFF;*/
/*-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__];
define region CCMRAM_region   = mem:[from __ICFEDIT_region_CCMRAM_start__   to __ICFEDIT_region_CCMRAM_end__];
define region SDRAM_region    = mem:[from __region_SDRAM_RAM_start__        to __region_SDRAM_RAM_end__];
/*define region NORFLASH_region = mem:[from __region_NORFLASH_RAM_start__     to __region_NORFLASH_RAM_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 in ROM_region        { readonly };
place in RAM_region        { readwrite,
                             block CSTACK, block HEAP };
place in SDRAM_region      { readwrite data section SDRAM };
/*place in NORFLASH_region { readwrite data section NORFLASH };*/

2.模拟情况如下:
2.1 首先有3个文件,a.c、 b.c和b.h文件
2.2 测试:
测试1:a.c内容如下:
#include <b.h>
main()
{
  for(int a=0;a<12;a++)
          buf[a] = 0;
}

b.c内容如下:
#include <b.h>
#pragma location=0xC0000000
__no_init int buf[12];

b.h内容如下:
#include <stdio.h>
#include <stdlib.h>
extern int buf[12];

测试结果:Error[Li005]: no definition for "buf" [referenced from D:\IarTest\Debug\Obj\main.o]

测试2:将测试1的b.c内容修改为
#include <b.h>
#pragma location=0xC0000000
int buf[12];

测试结果:通过

测试3:将测试1的b.c修改为
#include <b.h>
#pragma location=0xC0000000
__no_init int buf[12];
void test(void)
{
  for(int a=0;a<12;a++)
          buf[a] = 0;
}

测试结果:通过

问题:是什么原因导致测试1的编译不通过。具体内在原因是什么?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-11-1 14:56:38 | 显示全部楼层
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-11-1 14:57:38 | 显示全部楼层
你这个是哪个芯片的程序
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-6-10
在线时间
8 小时
 楼主| 发表于 2021-11-2 10:41:44 | 显示全部楼层
lpwithv 发表于 2021-11-1 14:57
你这个是哪个芯片的程序

STM32F479
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-11-2 14:05:02 | 显示全部楼层
帮顶  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 14:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表