C51资料收集汇总

Nmake Tool
http://msdn.microsoft.com/en-us/library/ms930369.aspx

NMAKE Reference
http://msdn.microsoft.com/en-us/library/dd9y37ha(v=VS.71).aspx
附件为中文版 NMake参考(整理自MSDN).pdf

Cx51 User's Guide
http://www.keil.com/support/man/docs/c51/c51_incdir.htm

Ax51 User's Guide
http://www.keil.com/support/man/docs/a51/a51_errorprint.htm

LX51 User's Guide
http://www.keil.com/support/man/docs/lx51/default.htm

OH51 User's Guide
http://www.keil.com/support/man/docs/oh51/default.htm

 

---------------------------------------------------------
BL51 User's Guide
http://www.keil.com/support/man/docs/bl51/default.htm

LX51 Enhanced Linker
http://www.keil.com/c51/lx51.asp

 

8051 Instruction Set Manual

http://www.keil.com/support/man/docs/is51/is51_overview.htm


---------------------------------------------------------
详见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了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值