打印
[ARM入门]

请问有什么办法能让一个变量固定最后一个地址呢?

[复制链接]
1317|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
Atom2004|  楼主 | 2016-7-23 14:03 | 只看该作者
求大神进来帮忙想想吧。

使用特权

评论回复
板凳
大道至简| | 2016-7-24 22:18 | 只看该作者
简单啊,你可以估计一下编译后是多大,比如35k, 那你把这个变量放在40k的地方

使用特权

评论回复
地板
Atom2004|  楼主 | 2016-7-25 09:47 | 只看该作者
大道至简 发表于 2016-7-24 22:18
简单啊,你可以估计一下编译后是多大,比如35k, 那你把这个变量放在40k的地方 ...

我是想他刚刚好在末尾嘛,假设刚好35K,这个变量就放在35K的那个地方,如果是40K,就刚好放在40K的地方。

使用特权

评论回复
5
yjmwxwx| | 2016-7-25 09:55 | 只看该作者
你看看BIN文件就知道了,全局变量都放在最后面

使用特权

评论回复
6
Atom2004|  楼主 | 2016-7-25 12:06 | 只看该作者
yjmwxwx 发表于 2016-7-25 09:55
你看看BIN文件就知道了,全局变量都放在最后面

全局变量不是应该在RAM里面的吗?

使用特权

评论回复
7
JasonWangSE| | 2016-7-25 12:20 | 只看该作者
本帖最后由 JasonWangSE 于 2016-7-25 12:22 编辑

可以参考armlink手册的第6.3和6.4章,6.3 Region-related symbols,6.4 Section-related symbols

使用特权

评论回复
8
qqww157| | 2016-9-23 18:27 | 只看该作者
keil __at__指令
char xdata LED_Data[50] _at_ 0x8000;

使用特权

评论回复
9
llyyff1636| | 2016-9-27 13:28 | 只看该作者
存储在哪里应该跟什么变量没关系吧,内存里只在某个地址处记录一个数据而已

使用特权

评论回复
10
大道至简| | 2016-12-22 13:52 | 只看该作者
Atom2004 发表于 2016-7-25 12:06
全局变量不是应该在RAM里面的吗?

const int abc;
这样的变量就放在flash里面

使用特权

评论回复
11
Atom2004|  楼主 | 2017-2-8 10:00 | 只看该作者
大道至简 发表于 2016-12-22 13:52
const int abc;
这样的变量就放在flash里面

你这个叫制度变量,不是全局变量啊。而且我希望将这个变量放在FLASH的所有内容的最后一个地方。

使用特权

评论回复
12
yjmwxwx| | 2017-2-9 15:47 | 只看该作者
Atom2004 发表于 2017-2-8 10:00
你这个叫制度变量,不是全局变量啊。而且我希望将这个变量放在FLASH的所有内容的最后一个地方。 ...

无聊做个实验


.section .data
    .equ aa,  0x20000000
    .equ bb,  0x20000010
shiyan:
    .int aa, 0x12345678
shiyan2:
    .int bb, 0x12345678
.section .text
tingxia:
    mov r0, r0
    mov r0, r0
    b tingxia

编译后的bin文件


地址                       数据                          是个什么
0x00                       0x1c00                       mov r0, r0
0x02                       0x1c00                       mov r0, r0
0x04                        0xe7fc                        b  0x00
0X06                        0x20000000                 int aa
0x0a                         0x12345678                 胡乱定义的数据
0x0e                           0x20000010               int bb
0x12                           0X12345678               胡乱定义的数据

想个思路,把aa的宏定义从内存改到原来程序后面
比如.equ aa, 0x8010000
只是只能读不能写,要想能写要加擦写函数
原来程序里写aa的都改成函数形式。
比如 aa = 0xff就改成 caxieflash(aa, 0xff)
我没实验哦,不保证成功,应该可以

使用特权

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

本版积分规则

28

主题

85

帖子

0

粉丝