Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1270488
  • 博文数量: 482
  • 博客积分: 13297
  • 博客等级: 上将
  • 技术积分: 2890
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-12 16:25
文章分类

全部博文(482)

文章存档

2012年(9)

2011年(407)

2010年(66)

分类: WINDOWS

2011-12-08 09:18:04

Nmake Tool

NMAKE Reference

附件为中文版 NMake参考(整理自MSDN).pdf

Cx51 User's Guide

Ax51 User's Guide

LX51 User's Guide

OH51 User's Guide

 

---------------------------------------------------------
BL51 User's Guide

LX51 Enhanced Linker

 

8051 Instruction Set Manual


---------------------------------------------------------
详见A51手册的附录D:汇编器的差异

A51与BL51:
针对传统8051单片机的开发工具,最大支持32×64KB Code Bank。

AX51与LX51:
针对传统8051单片机以及部分衍生型号的开发工具,最大支持外扩16 MB的xdata或code。AX51汇编器是A51汇编器的超集,两者的主要差异包括:
1.AX51中的数值默认为32位,A51是16位;
2.AX51不包含8051的默认SFR定义;
3.AX51支持更多的特殊符号,例如ECALL等;
4.生成的目标文件不同。AX51生成的目标文件为OMF-251/51MX格式,不受传统OMF-51格式中每个模块不得超过256个外部符号及段的限制。

====================================================================

http://blog.sina.com.cn/s/blog_54e279190100l78t.html

keil中函数变量定位方法(2010-09-14 16:02:58)转载标签: 杂谈 分类: 技术 
函数绝对定位方法:
将链接方式从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  MYFUNC1

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)即可
很显然:后面的是定位地址,如果有多个,就再加逗号继续写。

=====================================================================================
http://blog.sina.com.cn/s/blog_54e279190100l78m.html


在keil c51中加入生成bin方法:
在bin文件夹中拷入HEX2BIN.exe文件,然后在option的user标签下,选择Run User Programs After Build/Rebuild,选中Run #1,填入HEX2BIN.exe  @p.hex @p.bin后,再选中右边的DOS16,确定就OK了。

=====================================================================================

http://blog.csdn.net/devehe/article/details/6907392

阅读(1765) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

Alan05212011-12-10 11:43:48

发现勾上LX51后编译后不生成M51文件了

Alan05212011-12-08 09:21:10

还不是很理解BL51和LX51的区别,但是又一次程序运行有点问题改成LX51就好了。