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

[复制链接]
1671|11
 楼主| Atom2004 发表于 2016-7-22 09:47 | 显示全部楼层 |阅读模式
本帖最后由 Atom2004 于 2016-7-23 14:02 编辑

我想在Cortex-M的代码中读取芯片FLASH里面的所有代码二进制。

我想自己定一个const的变量,指定到FLASH的某一个地址,但是我不知道代码编译出来会占用多少FLASH空间啊。
请问怎么实现让一个变量放在FLASH的所有内容的后面呢?


谢谢!
 楼主| 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的地方。
yjmwxwx 发表于 2016-7-25 09:55 | 显示全部楼层
你看看BIN文件就知道了,全局变量都放在最后面
 楼主| Atom2004 发表于 2016-7-25 12:06 | 显示全部楼层
yjmwxwx 发表于 2016-7-25 09:55
你看看BIN文件就知道了,全局变量都放在最后面

全局变量不是应该在RAM里面的吗?
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
qqww157 发表于 2016-9-23 18:27 | 显示全部楼层
keil __at__指令
char xdata LED_Data[50] _at_ 0x8000;
llyyff1636 发表于 2016-9-27 13:28 | 显示全部楼层
存储在哪里应该跟什么变量没关系吧,内存里只在某个地址处记录一个数据而已
大道至简 发表于 2016-12-22 13:52 | 显示全部楼层
Atom2004 发表于 2016-7-25 12:06
全局变量不是应该在RAM里面的吗?

const int abc;
这样的变量就放在flash里面
 楼主| Atom2004 发表于 2017-2-8 10:00 | 显示全部楼层
大道至简 发表于 2016-12-22 13:52
const int abc;
这样的变量就放在flash里面

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

粉丝
快速回复 在线客服 返回列表 返回顶部