keil中函数变量定位方法
来源:互联网 发布:政府资助 知乎 编辑:程序博客网 时间:2024/05/02 00:47
将链接方式从LX51改回BL51,然后再BL51 Locate中的Code框中写入:
?PR?_DELAY?DELAY(0x8000)
其中,前面那个_DELAY是指函数名叫做delay,前面为什么要加_还不清楚,而且原来无论是什么这里都是大写;
后面那个DELAY是指文件名叫做delay,也就是说这个函数要到delay.c中去找;
括号里面的当然就是要定位到的地址了。
如果不强制定位,连接器一般都会把程序从0开始安排,有多大安排多大。
ouravr网友总结(比较全):
使用KeilC51软件,可以很方便地将代码或者数据绝对定位到某个地址。
1、代码定位:
方法1:使用伪指令CSEG。比如要将MyFunc1定位到代码区C:0x1000,则新建一个A51文件,添加以下内容:
PUBLIC
CSEG AT 1000H
MYFUNC1:
;其它代码
RET
在其它源文件中,就可以调用MyFunc()函数了。需要注意的是,编译器不检测传递参数的数目,仅检测函数是否有返回值。
方法2:使用BL51 Locate选项。比如在main.c中定义了一个MyFunc2函数,并且要将该函数定位到代码区C:0x2000,则从菜单中选择Project->Options for Target 'Target1',在弹出的对话框中选择BL51 Locate页,在下面的code栏中写上?PR?MYFUNC2?MAIN(0x2000)即可。
如果想定位多个函数,也可以使用*通配符。
2、变量定位:
只有全局变量可以绝对定位,局部变量无法实现绝对定位。
方法1:使用_at_关键字。声明一个全局变量unsigned char data MyBuf1[8] _at_ 0x20;
方法2:使用BL51 Locate选项。比如将main.c中定义的所有data型的全局变量定位到数据区D:0x28开始的空间,则从菜单中
选择Project->Options for Target 'Target1',在弹出的对话框中选择BL51 Locate页,在下面的data栏中写上?DT?MAIN(0x28)即可。
如果是idata,则使用?ID?MAIN(0x28),如果是xdata,则使用?XD?MAIN(0x28),如果是pdata,则使用?PD?MAIN(0x28)
3、堆栈定位:
在STARTUP.A51文件中定义了堆栈区?STACK,其起始地址同样可以在BL51 Locate页中设置,在Stack栏写上?STACK(0x80)
LX51定位方法:
这个方法是在WizNet的ISP教程中发现的。
首先在需要定位的那个文件的首行写上 #pragma userclass(CODE = ISP)
当然=后面的那个名字是自己起的。
然后再options的LX51 Locate中的userclass中写上 CODE_ISP(C:0x8000)即可
很显然:后面的是定位地址,如果有多个,就再加逗号继续写。
- keil中函数变量定位方法
- keil中函数、变量定位方法
- Keil C51中变量和函数的绝对地址定位问题
- Keil C51中变量和函数的绝对地址定位问题
- Keil C51中变量和函数的绝对地址定位问题:
- keil mdk调试过程中查看局部变量的方法
- Keil Arm中使用malloc函数的方法
- Keil 代码 变量等大小查看方法
- Keil C51中变量的使用
- Keil (MDK)中变量定义位置
- keil中关于使用_at_绝对地址定位问题
- 修复keil中光标定位不准的问题(转)
- keil中关于使用_at_绝对地址定位问题
- KEIL C51中调用汇编函数方法提高汇编程序效率(转)
- Keil MDK中 ST/Link 硬件仿真的配置,解决不进入main函数的方法
- 在ollydbg中定位MFC42.dll中的函数方法
- keil C 中调用串口函数 printf
- keil中函数递归调用问题
- vc6.0资源
- c++ STL Map 用法 小于号重载和仿函数定义
- php 函数嵌套
- arcmap_polygon转坐标文件
- PowerDesigner生成sql语句和从SQL语句生成表的反向工程
- keil中函数变量定位方法
- Subsonic queries查询帮助
- Java synchronized详解
- Xcode如何删除最近打开的工程?
- oealce数据库连接
- Linux的环境变量
- cleartool setview 工具会开启一个子shell
- Ext.grid.CheckboxSelectionModel
- SQL语句操作大全(本