打印
[M051]

M0516指定RAM地址和禁止变量初始化

[复制链接]
5863|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
giant0913|  楼主 | 2011-10-19 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 缥缈九哥 于 2012-9-14 12:17 编辑

请教 M0516将变量指定到SRAM地址0x20000000和禁止变量初始化 该如何设置。
比如SRAM[5]={0}

char SRAM[5] __at(0x2000000)={0};

我这样指定地址,编译器提示expected a ";"


还有禁止变量初始化的关键字是什么? 大侠们帮帮忙,急死了!!

相关帖子

沙发
hotpower| | 2011-10-19 11:32 | 只看该作者
指定地址好办,在群里共享里我有例程,
我也喜欢不初始化,但在M0还没试验过。

使用特权

评论回复
板凳
giant0913|  楼主 | 2011-10-19 11:36 | 只看该作者
本帖最后由 giant0913 于 2011-10-19 14:36 编辑

额,论坛里没吗?在公司上不聊QQ。。。
那您知道禁止初始化的关键字吗?KEIL的。。。。找了好久没找到。。

2# hotpower

使用特权

评论回复
地板
hotpower| | 2011-10-21 07:05 | 只看该作者
qq群里共享,因为文件包太巨大。

使用特权

评论回复
5
缥缈九哥| | 2011-10-21 08:41 | 只看该作者
const unsigned char DATAF[4092] __attribute__((at(0x0001f000))) ={1,2,3,4,5} ;
const unsigned char LDROM[4092] __attribute__((at(0x00100000))) ={1,2,3,4,5,6,7,8,9,10} ;
const unsigned int  CONFIG0    __attribute__((at(0x00300000))) = 0xF8BFFF7C;
const unsigned int  CONFIG1    __attribute__((at(0x00300000))) = 0x00005000; 在FLASH空间我是那么定义的,但是在SRAM空间,我觉得去掉const 及给确定地址就好了。至于防止初始化,要看看启动代码,不做相应的清零就好了吧。启动代码我好像没有找到清零部分。有研究过的,请指点。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
giant0913 + 1
6
hotpower| | 2011-10-21 10:21 | 只看该作者
以前的ARM7有选项不初始化

使用特权

评论回复
7
giant0913|  楼主 | 2011-10-24 09:38 | 只看该作者
本帖最后由 giant0913 于 2011-10-24 11:40 编辑

我在编译器linker选项里将R/W地址改写为0x20000004这样子
我在定义uint32_t y __at (0x20000000);这样我的数据定义在SRAM0x20000000位置,复位后也不会被初始化掉。但是不在linker里修改SRAM地址,编译出现.\output\SAMPLE_KEY_INT.axf: Error: L6985E: Unable to automatically place AT section sample_key_int.o(.ARM.__AT_0x20000000) with required base address 0x20000000. Please manually place in the scatter file using the --no_autoat option.      不知道这是什么意思。但是定义uint32_t y __at (0x20000100);又没问题了:Q
补充一下SRAM大小为4K,起始地址0x20000000
5# 缥缈九哥

使用特权

评论回复
8
weshiluwei6| | 2011-10-24 09:51 | 只看该作者
:victory:学习

使用特权

评论回复
9
giant0913|  楼主 | 2011-10-24 09:51 | 只看该作者
恩好的,我晚上进去看看~~~ 4# hotpower

使用特权

评论回复
10
屏凡| | 2011-10-26 21:21 | 只看该作者
楼主的问题解决了吗??
我也遇到这问题了
在网上看到这
输入段属性使用OVERLAY,而不是NOINIT.

1. 指定单个变量不初始化:
    int print_time __attribute__ ((section ("ER_RSV")));
2. 指定文件内所以变量不被初始化:
    #pragma arm section code ="ER_RSV", rwdata = "ER_RSV"
       int abc;
       int systick;
       int sys_var1;
    #pragma arm section code, rwdata
3. Scatter 文件
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00020000 { ; load region size_region
       ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
               *.o (RESET, +First)
              *(InRoot$$Sections)
             .ANY (+RO)
       }

      RW_IRAM1 0x20000000 0x00004000 { ; RW data
            .ANY (+RW +ZI)
      }

     OVERLAY_RAM1 0x20004000 OVERLAY {
            *.o (ER_RSV) ;所有模块的指定段为"ER_RSV"的变量放这里
     }

}

但不知道怎么搞???

使用特权

评论回复
11
giant0913|  楼主 | 2011-10-27 13:44 | 只看该作者
这几天做别的去了,没时间整,你的看不太明白啊 。。。 10# 屏凡

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

14

帖子

1

粉丝