打印

如何定位一个变量的绝对地址?

[复制链接]
6706|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
幻阁|  楼主 | 2010-3-17 19:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
mohanwei| | 2010-3-17 20:25 | 只看该作者
试一下定义一个全局变量:
volatile unsigned char code addr=0x01 _at_ 0x01ff;
如果编译通不过就是语法的问题了,可以看一下Keil C51手册如何规定的。
还有一种方法:
volatile unsigned char code addr=0x01;
然后在project->option->BL51 Locate->Code里指定addr的位置

使用特权

评论回复
板凳
efen| | 2010-3-17 21:11 | 只看该作者
学习

使用特权

评论回复
地板
xjycug| | 2010-3-17 21:53 | 只看该作者
前段时间研究过,不过在办公室的机子上。
还记得一点,
你可以新建一个C文件,定义这个地址常量,然后在keil的project菜单中选择“Options for Target”选项,在弹出的窗口中选择“BL51 Locate”,然后在Code栏中填入要写变量的名字及需要放入的地址。我办公室有参考,现在没有,明天看看再告诉你吧。这种方法对于写常量数组,如查找表,字库都很方便。好象是(?CO?[文件名]地址吧)这样的格式。呵呵

使用特权

评论回复
5
hxkc| | 2010-3-17 21:55 | 只看该作者
你要这个干嘛?为什么非得定位到FLASH的某个地址呢?
其实实现你的目的,不一定非得用这种剑走偏峰的路径的.

使用特权

评论回复
6
幻阁|  楼主 | 2010-3-18 10:27 | 只看该作者
谢谢xjycug,最好能有个实例,呵呵

使用特权

评论回复
7
幻阁|  楼主 | 2010-3-18 10:28 | 只看该作者
回复hxkc:之所以要写到固定地址上,是为了以后在线擦写的方便。

使用特权

评论回复
8
mohanwei| | 2010-3-18 15:15 | 只看该作者
晕……
uchar code addr=0x01;

要改的时候:
uint FlashAddr = &addr;//取得addr的地址
……

使用特权

评论回复
9
xjycug| | 2010-3-18 21:02 | 只看该作者
比如,新建一个文件名: mcu_addr.c

在该文件中定义变量
unsigned int code c_Mcu_Addr = 0x1fff;

然后,如我昨天说的方法编译该文件就可以把变量c_Mcu_Addr 指定到flash 0x01ff地址中。

使用特权

评论回复
10
xjycug| | 2010-3-18 21:12 | 只看该作者

使用特权

评论回复
11
xjycug| | 2010-3-18 21:14 | 只看该作者
第一张图就是设置,
第二张图,看watchwindow,可以看见指针变量P的值为0x01ff.应该是你要的结果吧。
由于是设定字库时用的招,估计有些复杂。我想可能有其他大虾还有比较简单的方法来实现的。

使用特权

评论回复
12
幻阁|  楼主 | 2010-3-19 09:36 | 只看该作者
回复xjycgu:太感谢了,要是定义多个变量是不是也是这么弄啊

使用特权

评论回复
13
qingqiu647| | 2010-3-19 11:25 | 只看该作者
二楼的方法可以

使用特权

评论回复
14
andrew.xu| | 2010-3-19 15:31 | 只看该作者
不知道keil51是用啥
arm下是用__at(0x)的,应该一样的吧
别忘了要包含#include <absacc.h>文件

使用特权

评论回复
15
xjycug| | 2010-3-19 15:38 | 只看该作者
2楼的方法可以,只不过我是定义字库,所以就麻烦点。
多个变量应该按2楼的方法吧。我觉得应该是。

使用特权

评论回复
16
mohanwei| | 2010-3-19 16:09 | 只看该作者
如果是程序内部自己访问的,那么8楼的做法才是最合理的,通过取地址指针来获取即可……

除非你是利用外部工具,例如编程器,直接修改FLash内容,才需要指定地址。

使用特权

评论回复
17
csq463276932| | 2011-4-13 15:46 | 只看该作者
学习,顶起。

使用特权

评论回复
18
SHUJIEWS| | 2011-4-13 20:53 | 只看该作者
*(char*)addr=0x01;

使用特权

评论回复
19
chengfei21| | 2011-4-13 20:57 | 只看该作者
uchar *ucp_ptr = (uchar *)0x55;

使用特权

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

本版积分规则

4

主题

25

帖子

0

粉丝