Cx51 编译器
对传统和扩展的 8051 微处理器的
优化的 C 编译器和库参考
翻译者
网名:jxlxh
E-mail: jx_lxh@163.com
本翻译作品可免费下载传阅,但未经允许不得用于商业用途。
原文件:
C51.pdf
www.c51bbs.com
网站协助发布
用户手册 09.2001
Keil Software – Cx51 编译器用户手册
—
ፉᑗኔ
ፉᑗኔ
由于本人的英语水平有限 所以在使用 KEIL C51 的过程中 老要去看那英文的手册
总感到不是那么方便 老要用词霸查来查去的 烦的很 因此在看到 C51BBS 上的倡议
后
就动了把它翻译出来的念头 我想这对自己和别人都会带来些好处
利用工作之余的时间 经过几个月的努力 终于把它翻译完了 但由于水平所限 文
中肯定有很多不是十分恰当的地方
起误解
使我能够作出改正 对于大家的建议我会很高兴的接受
我最大的愿望是希望我的翻译不会误导大家 且能对大家有所帮助
不明之处可以参考英文原文
所以在这里 我请大家能指出其中的错误和不当之处 请大家 EMAIL 告诉我
或许没有用大家比较熟悉的惯用语 或许可能引
感谢 C51BBS 版主龙啸九天的帮助
欢迎大家与我交流 我的 e-mail
jx_lxh@163.com
Keil Software – Cx51 编译器用户手册--内容
Keil Software 声明
本文档所述信息不属于我公司的承诺范围 其内容的变化也不会另行通知 本文档所
述软件的出售必须经过授权或签订特别协议
在协议约定以外的任何媒体上复制本软件将触犯法律 购买者可以备份为目的而做一份拷
贝
在未经书面许可之前 本手册的任何一部分都不允许为了购买者个人使用以外的目的
而以任何形式和任何手段(电子的
机械的)进行复制或传播
本文档所述软件的使用必须遵循协议约定
2
版权 1988-2001 所有者
Keil C51™ Keil CX51™,和 uVision TM
Microsoft®和 Windows™是 Microsoft Corporation 的商标或注册商标
IBM® PC®
Intel® MCS®51 MCS®251 ASM-51®
和 PS/2®是 International Business Machines Corporation 的注册商标
Keil Elektronik GmbH 和 Keil Software 公司
是 Keil Elektronik GmbH 的商标
和 PL/M-51®是 Intel 的注册商标
我们尽全力去做来保证这本手册的正确 从而保证我们个人 公司和在此提及的商标
的形象
Keil Software – Cx51 编译器用户手册--内容
前言
3
本手册讲述对 8051 的目标环境 如何使用
译器包可以用在所有的 8051 系列处理器上
册假定你熟悉 WINDOWS 操作系统
知道如何编程 8051 处理器 并会用 C 语言编程
可以在 WINDOWS 32 位命令行中执行 本手
优化 C 编译器编译 C 程序
Cx51
Cx51
编
注意
本手册用条件窗口来指明32位
ME
WINDOWS NT WINDOWS 2000或WINDWOS XP
如果你对 C 编程有问题 或者你想知道 C 语言编程的更多信息 可参考 16 页的 关于 C
语言的书
手册中讨论的许多例子和描述是从 WINDOWS 命令提示符下调用的 这对在一个集成环境
如µVision2 中运行 Cx51 的情况是不适用的
编程环境
WINDOWS
版本是
WINDOWS95 WINDOWS98 WINDOWS
本手册中的例子是通用的 可以应用到所有
Keil Software – Cx51 编译器用户手册--内容
手册组织
本用户手册分成下面的章节和附录
第一章 介绍 概述 Cx51 编译器
第二章 用 Cx51 编译 解释怎样用 Cx51 交叉编译器编译一个源文件 本章叙
述控制文件处理
第三章 语言扩展 叙述支持 8051 系统结构必须的 C 语言扩展 本章提供一
个在 ANSI C 说明中没有的命令
第四章 预处理器 叙述 Cx51 编译器预处理器的组成和包含的例子
第五章 派生的 8051 叙述 Cx51 编译器支持的 8051 派生系列 本章还包括能
帮助提高目标程序性能的技巧
第六章 高级编程技术 对有经验的开发人员的重要信息 本章包括定制文件
描述
8051 编程语言如何接口
优化器详细资料 和段名约定 本章还讨论了 Cx51 编译器产生的程序和别的
编译和输出的命令行提示
函数 和控制的详细列表
4
第七章 错误信息 列出了在使用 Cx51 编译器时可能遇到的致命错误 语法
错误和警告
第八章 库参考 提高一个扩展的 Cx51 库参考 分类列出了库例程和相关的
包含文件
附录中包含不同编译器版本间的差异 作品编号 和别的有些信息
本章最后有一个按字母顺序的参考 包括每个库例程的例子代码
Keil Software – Cx51 编译器用户手册--内容
文档约定
本文档有下列约定
例子 说明
README.TXT
Language Elements
Courier
Variables
重复的成分… 例子中使用的省略号
省略代码
.
.
.
可选项
[
opt1|opt2
{
Keys
]
}
粗体大写用在可执行程序名 数据文件名 源文件名 环境变量
和输入WINDOWS命令行的命令上 表示你必须手工输入的文本
不一定要大写
例
CLS DIR BL51.EXE
C 语言的构成包括关键词
例
if != long
isdigit main >>
这种字体的文本代表显示在屏幕上或打印出的信息 这字体也用在
讨论或描述命令行中
斜体字必须提供的信息 例如 在语法字符串中的 projectfile 表示需
要提供实际的工程文件名
垂直省略号用在源代码例子中 表示省略一段程序
例子
void main(void ) {
.
.
.
while(1);
命令行中的可选参数和选择项用方括号表示
例
C51 TEST.C PRINT [(filename)]
大括号中的文本 用竖线分隔 代表一组选项 必须从中选一项
大括号中包含了所有选项
竖线分隔选项
Sans serif 字体的文本代表键盘的键
操作符和库函数用粗体
表示重复的成分
…
例如 按 Enter 继续
5
Keil Software – Cx51 编译器用户手册--内容
6
Keil Software – Cx51 编译器用户手册--内容
Contents
Chapter 1. Introduction....................................................................................15
Support for all 8051 Variants......................................................................................15
Books About the C Language ..................................................................................... 16
Chapter 2. Compiling with the Cx51 Compiler .............................................17
Environment Variables ............................................................................................... 17
Running Cx51 from the Command Prompt................................................................. 18
ERRORLEVEL..................................................................................................... 19
Cx51 Output Files ................................................................................................. 19
Control Directives....................................................................................................... 20
Directive Categories.............................................................................................. 20
Reference.................................................................................................................... 23
AREGS / NOAREGS............................................................................................ 24
ASM / ENDASM.................................................................................................. 26
BROWSE.............................................................................................................. 28
CODE.................................................................................................................... 29
COMPACT ........................................................................................................... 30
COND / NOCOND ............................................................................................... 31
DEBUG................................................................................................................. 33
DEFINE ................................................................................................................ 34
DISABLE.............................................................................................................. 35
EJECT................................................................................................................... 37
FLOATFUZZY..................................................................................................... 38
INCDIR................................................................................................................. 39
INTERVAL........................................................................................................... 40
INTPROMOTE / NOINTPROMOTE .................................................................. 41
INTVECTOR / NOINTVECTOR ........................................................................ 44
LARGE ................................................................................................................. 46
LISTINCLUDE..................................................................................................... 47
MAXARGS........................................................................................................... 48
MOD517 / NOMOD517 ....................................................................................... 49
MODA2 / NOMODA2 .........................................................................................51
MODAB2 / NOMODAB2 .................................................................................... 52
MODDA2 / NOMODDA2.................................................................................... 53
MODDP2 / NOMODDP2..................................................................................... 54
MODP2 / NOMODP2........................................................................................... 55
NOAMAKE .......................................................................................................... 56
NOEXTEND......................................................................................................... 57
OBJECT / NOOBJECT ........................................................................................ 58
OBJECTADVANCE ............................................................................................ 59
OBJECTEXTEND................................................................................................ 60
ONEREGBANK ................................................................................................... 61
OMF2.................................................................................................................... 62
OPTIMIZE............................................................................................................ 63
7
Keil Software – Cx51 编译器用户手册--内容
ORDER .................................................................................................................65
PAGELENGTH ....................................................................................................66
PAGEWIDTH ....................................................................................................... 67
PREPRINT............................................................................................................68
PRINT / NOPRINT...............................................................................................69
REGFILE ..............................................................................................................70
REGISTERBANK ................................................................................................71
REGPARMS / NOREGPARMS ........................................................................... 72
RET_PSTK, RET_XSTK ....................................................................................74
ROM......................................................................................................................76
SAVE / RESTORE................................................................................................77
SMALL .................................................................................................................78
SRC .......................................................................................................................79
STRING ................................................................................................................80
SYMBOLS............................................................................................................81
USERCLASS ........................................................................................................82
VARBANKING.................................................................................................... 84
WARNINGLEVEL...............................................................................................85
XCROM ................................................................................................................86
8
Chapter 3. Language Extensions .....................................................................89
Keywords .................................................................................................................... 89
Memory Areas.............................................................................................................90
Program Memory .................................................................................................. 90
Internal Data Memory ...........................................................................................91
External Data Memory................................................................................................ 92
Far Memory........................................................................................................... 93
Special Function Register Memory .......................................................................93
Memory Models.......................................................................................................... 94
Small Model .......................................................................................................... 94
Compact Model.....................................................................................................95
Large Model.......................................................................................................... 95
Memory Types............................................................................................................ 95
Explicitly Declared Memory Types.......................................................................96
Implicit Memory Types......................................................................................... 97
Data Types ..................................................................................................................97
Bit Types..................................................................................................................... 98
Bit-addressable Objects...............................................................................................99
Special Function Registers........................................................................................ 101
sfr ........................................................................................................................101
sfr16 ....................................................................................................................102
sbit.......................................................................................................................102
Absolute Variable Location ...................................................................................... 104
Pointers .....................................................................................................................106
Generic Pointers .................................................................................................. 106
Memory-specific Pointers....................................................................................109
Pointer Conversions ............................................................................................ 111
Abstract Pointers .................................................................................................114
Keil Software – Cx51 编译器用户手册--内容
Function Declarations............................................................................................... 118
Function Parameters and the Stack ..................................................................... 119
Passing Parameters in Registers.......................................................................... 120
Function Return Values....................................................................................... 120
Specifying the Memory Model for a Function .................................................... 121
Specifying the Register Bank for a Function....................................................... 122
Register Bank Access.......................................................................................... 124
Interrupt Functions.............................................................................................. 125
Reentrant Functions ............................................................................................ 129
Alien Function (PL/M-51 Interface) ...................................................................132
Real-time Function Tasks.................................................................................... 133
Chapter 4. Preprocessor ................................................................................. 135
Directives.................................................................................................................. 135
Stringize Operator..................................................................................................... 136
Token-pasting operator............................................................................................. 137
Predefined Macro Constants..................................................................................... 138
Chapter 5. 8051 Derivatives ...........................................................................139
Analog Devices MicroConverter B2 Series.............................................................. 140
Atmel 89x8252 and Variants .................................................................................... 141
Dallas 80C320, 420, 520, and 530............................................................................ 142
Dallas 80C390, 80C400, 5240, and Variants............................................................143
Arithmetic Accelerator........................................................................................ 144
Infineon C517, C509, 80C537, and Variants............................................................ 145
Data Pointers....................................................................................................... 145
High-speed Arithmetic ........................................................................................ 146
Library Routines..................................................................................................146
Philips 8xC750, 8xC751, and 8xC752...................................................................... 147
Philips 80C51MX Architecture ................................................................................ 148
Philips and Atmel WM Dual DPTR .........................................................................148
9
Chapter 6. Advanced Programming Techniques.........................................149
Customization Files .................................................................................................. 150
STARTUP.A51................................................................................................... 151
INIT.A51............................................................................................................. 153
XBANKING.A51 ...............................................................................................154
Basic I/O Functions............................................................................................. 156
Memory Allocation Functions............................................................................. 156
Optimizer.................................................................................................................. 157
General Optimizations ........................................................................................157
8051-Specific Optimizations............................................................................... 158
Options for Code Generation .............................................................................. 158
Segment Naming Conventions.................................................................................. 159
Data Objects........................................................................................................ 160
Program Objects.................................................................................................. 161
Interfacing C Programs to Assembler....................................................................... 163
Function Parameters............................................................................................ 163
Keil Software – Cx51 编译器用户手册--内容
Parameter Passing in Registers............................................................................ 164
Parameter Passing in Fixed Memory Locations ..................................................165
Function Return Values....................................................................................... 165
Using the SRC Directive ..................................................................................... 166
Register Usage.....................................................................................................168
Overlaying Segments...........................................................................................168
Example Routines................................................................................................168
Small Model Example.........................................................................................169
Compact Model Example.................................................................................... 171
Large Model Example.........................................................................................173
Interfacing C Programs to PL/M-51..........................................................................175
Data Storage Formats................................................................................................ 176
Bit Variables........................................................................................................176
Signed and Unsigned Characters, Pointers to data, idata, and pdata ..................177
Signed and Unsigned Integers, Enumerations, Pointers to xdata and
code .....................................................................................................................177
Signed and Unsigned Long Integers.................................................................... 177
Generic and Far Pointers ..................................................................................... 178
Floating-point Numbers.......................................................................................179
Floating-point Errors...........................................................................................182
Accessing Absolute Memory Locations....................................................................184
Absolute Memory Access Macros....................................................................... 184
Linker Location Controls ....................................................................................185
The _at_ Keyword...............................................................................................186
Debugging.................................................................................................................187
10
Chapter 7. Error Messages ............................................................................189
Fatal Errors ...............................................................................................................189
Actions ................................................................................................................ 190
Errors...................................................................................................................191
Syntax and Semantic Errors ......................................................................................193
Warnings...................................................................................................................205
Chapter 8. Library Reference........................................................................209
Intrinsic Routines...................................................................................................... 209
Library Files.............................................................................................................. 210
Standard Types..........................................................................................................211
jmp_buf ...............................................................................................................211
va_list .................................................................................................................. 211
Absolute Memory Access Macros.............................................................................212
CBYTE................................................................................................................212
CWORD..............................................................................................................212
DBYTE ...............................................................................................................213
DWORD..............................................................................................................213
FARRAY, FCARRAY .......................................................................................214
FVAR, FCVAR,..................................................................................................215
PBYTE ................................................................................................................ 216
PWORD ..............................................................................................................216
Keil Software – Cx51 编译器用户手册--内容
XBYTE ............................................................................................................... 217
XWORD .............................................................................................................217
Routines by Category................................................................................................ 218
Buffer Manipulation............................................................................................ 218
Character Conversion and Classification ............................................................ 219
Data Conversion.................................................................................................. 220
Math Routines..................................................................................................... 221
Memory Allocation Routines .............................................................................. 223
Stream Input and Output Routines ...................................................................... 224
String Manipulation Routines ............................................................................. 226
Variable-length Argument List Routines............................................................. 227
Miscellaneous Routines.......................................................................................227
Include Files.............................................................................................................. 228
8051 Special Function Register Include Files..................................................... 228
80C517.H............................................................................................................ 228
ABSACC.H......................................................................................................... 229
ASSERT.H.......................................................................................................... 229
CTYPE.H............................................................................................................ 229
INTRINS.H......................................................................................................... 229
MATH.H............................................................................................................. 230
SETJMP.H .......................................................................................................... 230
STDARG.H......................................................................................................... 230
STDDEF.H ......................................................................................................... 230
STDIO.H............................................................................................................. 231
STDLIB.H........................................................................................................... 231
STRING.H .......................................................................................................... 231
Reference.................................................................................................................. 232
abs ....................................................................................................................... 233
acos / acos517 ..................................................................................................... 234
asin / asin517....................................................................................................... 235
assert ................................................................................................................... 236
atan / atan517 ...................................................................................................... 237
atan2.................................................................................................................... 238
atof / atof517....................................................................................................... 239
atoi ...................................................................................................................... 240
atol ...................................................................................................................... 241
cabs ..................................................................................................................... 242
calloc................................................................................................................... 243
ceil....................................................................................................................... 244
_chkfloat_ ...........................................................................................................245
cos / cos517......................................................................................................... 246
cosh ..................................................................................................................... 247
_crol_ .................................................................................................................. 248
_cror_.................................................................................................................. 249
exp / exp517........................................................................................................ 250
fabs...................................................................................................................... 251
floor..................................................................................................................... 252
11
Keil Software – Cx51 编译器用户手册--内容
fmod .................................................................................................................... 253
free ......................................................................................................................254
getchar................................................................................................................. 255
_getkey ................................................................................................................ 256
gets ...................................................................................................................... 257
init_mempool.......................................................................................................258
_irol_ ...................................................................................................................259
_iror_...................................................................................................................260
isalnum ................................................................................................................ 261
isalpha .................................................................................................................262
iscntrl................................................................................................................... 263
isdigit................................................................................................................... 264
isgraph.................................................................................................................265
islower.................................................................................................................266
isprint...................................................................................................................267
ispunct .................................................................................................................268
isspace .................................................................................................................269
isupper.................................................................................................................270
isxdigit................................................................................................................. 271
labs ...................................................................................................................... 272
log / log517 .........................................................................................................273
log10 / log10517 .................................................................................................274
longjmp ...............................................................................................................275
_lrol_ ...................................................................................................................277
_lror_...................................................................................................................278
malloc..................................................................................................................279
memccpy .............................................................................................................280
memchr................................................................................................................281
memcmp ..............................................................................................................282
memcpy...............................................................................................................283
memmove ............................................................................................................284
memset ................................................................................................................ 285
modf .................................................................................................................... 286
_nop_................................................................................................................... 287
offsetof ................................................................................................................ 288
pow...................................................................................................................... 289
printf / printf517..................................................................................................290
putchar................................................................................................................. 296
puts ...................................................................................................................... 297
rand......................................................................................................................298
realloc..................................................................................................................299
scanf .................................................................................................................... 300
setjmp .................................................................................................................. 304
sin / sin517 .......................................................................................................... 305
sinh ...................................................................................................................... 306
sprintf / sprintf517............................................................................................... 307
sqrt / sqrt517........................................................................................................309
12
Keil Software – Cx51 编译器用户手册--内容
srand.................................................................................................................... 310
sscanf / sscanf517................................................................................................ 311
strcat.................................................................................................................... 313
strchr ................................................................................................................... 314
strcmp.................................................................................................................. 315
strcpy................................................................................................................... 316
strcspn ................................................................................................................. 317
strlen.................................................................................................................... 318
strncat.................................................................................................................. 319
strncmp................................................................................................................ 320
strncpy................................................................................................................. 321
strpbrk ................................................................................................................. 322
strpos................................................................................................................... 323
strrchr.................................................................................................................. 324
strrpbrk................................................................................................................ 325
strrpos.................................................................................................................. 326
strspn................................................................................................................... 327
strstr .................................................................................................................... 328
strtod / strtod517 ............................................................................................... 329
strtol .................................................................................................................... 331
strtoul .................................................................................................................. 333
tan / tan517.......................................................................................................... 335
tanh...................................................................................................................... 336
_testbit_............................................................................................................... 337
toascii.................................................................................................................. 338
toint ..................................................................................................................... 339
tolower ................................................................................................................ 340
_tolower .............................................................................................................. 341
toupper ................................................................................................................ 342
_toupper .............................................................................................................. 343
ungetchar............................................................................................................. 344
va_arg.................................................................................................................. 345
va_end................................................................................................................. 347
va_start................................................................................................................ 348
vprintf.................................................................................................................. 349
vsprintf................................................................................................................ 351
13
Appendix A. Differences from ANSI C.........................................................353
Compiler-related Differences.................................................................................... 353
Library-related Differences....................................................................................... 353
Appendix B. Version Differences...................................................................357
Version 6.0 Differences............................................................................................ 357
Version 5 Differences............................................................................................... 358
Version 4 Differences............................................................................................... 359
Version 3.4 Differences............................................................................................ 361
Version 3.2 Differences............................................................................................ 362
Version 3.0 Differences............................................................................................ 363
Keil Software – Cx51 编译器用户手册--内容
Version 2 Differences ............................................................................................... 364
Appendix C. Writing Optimum Code ...........................................................367
Memory Model ......................................................................................................... 367
Variable Location......................................................................................................369
Variable Size.............................................................................................................369
Unsigned Types.........................................................................................................370
Local Variables .........................................................................................................370
Other Sources............................................................................................................ 370
Appendix D. Compiler Limits........................................................................371
Appendix E. Byte Ordering............................................................................373
Appendix F. Hints, Tips, and Techniques.....................................................375
Recursive Code Reference Error............................................................................... 375
Problems Using the printf Routines ..........................................................................376
Uncalled Functions....................................................................................................377
Using Monitor-51......................................................................................................377
Trouble with the bdata Memory Type....................................................................... 378
Function Pointers ...................................................................................................... 379
14
Glossary.............................................................................................................383
Index..................................................................................................................391
Keil Software – Cx51 编译器用户手册—第一章 介绍
ጙᐺ
15
C 语言是一个通用的编程语言
C 不是一种大语言
各种软件任务提供方便和有效的编程
优化的 Cx51 C 编译器完整的实现了 ANSI 的 C 语言标准 对 8051 来说
个通用的 C 编译器
有 C 编程的弹性和高效的代码和汇编语言的速度
C 语言不能执行的操作
的一部分提供
既然 Cx51 是一个交叉编译器
一个嵌套的目标处理器的特性
不是为任何特殊应用领域而设计 它一般来说限制较少 可以为
它首先的目标是生成针对 8051 的最快和最紧凑的代码
如输入和输出 需要操作系统的支持 这些操作作为标准库
因为这些函数和语言本身无关 所以 C 特别适合对多平台提供代码
它提供高效的代码 结构化的编程 和丰富的操作符
许多应用用 C 比其他语言编程更方便和有效
C 语言的某些方面和标准库就有了改变或增强
更多的细节参考 89 页的 第三章.语言扩展
Cx51 不是一
Cx51 具
以适应
支持所有的 8051 变种
8051 系列是增长最快的微处理器构架之一
新扩展的 8051 芯片 如 PHILIPS 8051MX 有几 M 字节的代码和数据空间 可被用到
大的应用中
为了支持这些不同的 8051 芯片
输出文件格式
的 PHILIPS 8051MX 结构
OMF2
允许支持最多 16MB 代码和数据空间
KEIL 提供了几种开发工具
从不同的芯片厂家提供了 400 多种芯片
如下表所列 一个新的
CX51 编译器适用于新
Keil Software – Cx51 编译器用户手册—第一章 介绍
开发工具 支持的微处理器 说明
C51编译器
A51宏汇编
BL51连接器
C51编译器 有OMF2输出
AX51宏汇编
LX51连接器
CX51编译器
AX51宏汇编
LX51连接器
16
对传统的8051开发工具 包括支持32 x64KB
的代码库
对传统的8051和扩展的8051芯片 如DALLAS
390 的开发工具 包括支持代码库 和最
多16MB代码和XDATA存储区
对PHILIPS 8051MX的开发工具 支持最多16MB
代码和XDATA存储区
编译器在不同的包中提供
Cx51
上表是完整的 8051 开发工具参考
注意
Cx51 指两种编译器 C51 编译器和 CX51 编译器
C 语言的书
有许多书介绍 C 语言 有更多的书详细介绍用 C 完成的任务 下面的列表不是一个完
整的列表
The C Programming Language, Second Edition
Kernighan & Ritchie
Prentice-Hall, Inc.
ISBN 0-13-110370-9
C: A Reference Manual, Second Edition
Harbison & Steel
Prentice-Hall Software Series
ISBN 0-13-109810-1
列表只是作为参考
C and the 8051: Programming and Multitasking
Schultz
P T R Prentice-Hall, Inc.
ISBN 0-13-753815-4
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
17
ᐺ
本章说明怎样编译C源文件 讨论编译器的控制命令 这些命令可以
命令
控制包含在
指定优化级别和存储模式
注意
一般来说你应在
户手册
Cx51编译器产生列表文件
Getting Started with µVision2 and C51”.
Cx51
OBJ
文件中的信息的数量
µVision2 IDE
中使用
ܠፉܠፉ
Cx51
关于使用
µVision2 IDE
环境变量
的更多信息 参考用
如果在µVision2 IDE 中运行 Cx51 编译器 计算机不需要另外的设置 如果想要在命令
行中运行 Cx51 编译器和工具
变量 路径 环境变量说明
PATH \C51\BIN
TMP
C51INC \C51\INC
C51LIB \C51\LIB
对WINSOWS NT
System – Advanced – Environment Variables 中输入
对 WINDOWS 95
中
PATH=C \KEIL\C51\BIN;%PATH%
SET TMP=D:\
WINDOWS 2000和WINDOWS XP
WINDOWS 98 和 WINDOWS ME
必须手工创建下面的环境变量
C51和CX51可执行程序的路径
编译器产生的临时文件的路径 如果指定的路径不存
在 编译器会生成错误并停止编译
Cx51头文件的路径
Cx51库文件的路径
这些环境变量在Control Panel –
这些设置放在 AUTOEXEC.BAT
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
SET C51INC=C:\KEIL\C51\INC
SET C51LIB=C:\KEIL\C51\LIB
从命令行运行 Cx51
调用 C51 或 CX51 编译器 在命令行输入 C51 或 CX51 在命令行中 必须包含要编
译的 C 源文件
C51 sourcefile [directives…]
CX51 sourcefile [directives…]
或
C51 @commandfile
CX51 @commandfile
这里
和必需的编译控制命令
Cx51 命令行的格式
18
sourcefile 要编译的源文件名
directives 用来控制编译器功能的命令
commandfile 包含源文件名和命令的命令输入文件
了WINDOWS命令行的限制时
下面的命令行例子调用
PREPRINT
C51
使用commandfile
指定源文件 SAMPLE.C 用控制 DEBUG
参考20页的 控制命令
当Cx51调用行较复杂 超过
C51 SAMPLE.C DEBUG CODE PREPRINT
Cx51 编译器在成功编译后显示下面的信息
C51 COMPILER V6.10
C51 COMPILATION COMPLETE. 0 WARNING S 0 ERROR S
CODE 和
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
错误级别
19
在编译后 错误和警告的数目输出在屏幕上
编译的状态
错误级别 意义
可以在批处理文件中访问 ERRORLEVEL 变量 关于 ERRORLEVEL 或批处理文件
可以参考
值如下表所列
0
1
2
3
WINDOWS
没有错误或警告
只有警告
错误和可能的警告
致命错误
命令索引或在线帮助
Cx51 编译器设置 ERRORLEVEL 指示
Cx51输出文件
Cx51 编译器在编译时产生许多输出文件
的扩展名不同
文件扩展 说明
Filename.LST
Filename.OBJ
Filename.I
Filename.SRC
下面的表列出了文件并有简短的说明
列表文件 包含格式化的源文件和编译中检测到的错误 列
表文件可以选择包含所用的符号和生成汇编代码 更多的信
息 参考PRINT命令
包含可重定位目标代码的OBJ模块
连接到一个绝对的OBJ模块
包含由预处理器扩展的源文件 所有的宏都 扩展了 所有的
注释都删除了 可参考PREPRINT命令
C源代码产生的汇编源文件
令
缺省的 输出文件和源文件同名 但 文件
OBJ模块用Lx51连接器
可以用A51汇编 可参考SRC命
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
控制命令
20
Cx51 编译器提供许多控制命令控制编译
组成
C51 testfile.c SYMBOLS CODE DEBUG
#pragma SYMBOLS CODE DEBUG
在说明的例子中
的源文件
在命令行中在文件名后指定 或在源文件中用#pragma 命令 例如
SYMBOLS CODE
除了指定的 命令由一个或多个字母或数字
和
DEBUG
都是控制命令
testfile.C
是要编译
注意
对命令行和
#pragma
语法是相同的 在
#pragma
可指定多个选项
典型的 每个控制命令只在源文件的开头指定一次 如果一个命令指定多次 编译器
产生一个致命错误
退出编译 可以指定多次的命令在下面部分注明
命令种类
控制命令可以分成三类 源文件控制 目标控制 和列表控制
源文件控制定义命令行的宏
目标控制影响产生的目标模块
化级别或在OBJ文件中包含调试信息
列表控制管理列表文件
上
定义要编译的文件名
*.OBJ
*.LST
的各种样式 特别是格式和指定的内容
的形式和内容 这些命令指定优
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
下表按字母顺序列出了控制命令 有下划线的字母表示命令的缩写
命令 类 说明
AREGS
Object
使能或不使能绝对寄存器
NOAREGS
ASM ENDASM
BROWSE
†
CODE †
COMPACT
†
COND
NOCOND
†
DEBUG †
DEFINE
DISABLE
EJECT
FLOATFUZZY
Source
Object
Listing
Object
Listing
Object
Source
Object
Listing
Object
标志内嵌汇编块的开始和结束
产生浏览器信息
加一个汇编列表到列表文件
设置COMPACT存储模式
包含或执行预处理器跳过的源程序行
在OBJ文件中包含调试信息
在Cx51调用行定义预处理器名
在一个函数内不允许中断
在列表文件中插入一个格式输入字符
在浮点比较中指定位数
INCDIR † Source 指定头文件的附加路径名
INTERVAL
†
INTPROMOTE
Object
Object
对SIECO芯片指定中断矢量间隔
使能或不使能ANSI整数同时提升
NOINTPROMOTE
†
INTVECTOR
Object
指定中断矢量的基地址或不使能矢量
NOINTVECTOR †
LARGE †
LISTINCLUDE
MAXAREGS
†
MOD517
NOMOD517
MODA2
NOMODA2
MODAB2
NOMODAB2
MODDA
NOMODDA
MODDP2
NOMODDP2
MODP2
NOMODP2
NOAMAKE †
NOEXTEND
OBJECT
NOOBJECT
OBJECTEXTEND
†
ONEREGBANK
†
†
Object
Listing
Object
Object
Object
Object
Object
Object
Object
Object
Source
Object
Object
Object
选择LARGE存储模式
在列表文件中显示头文件
指定可变参数列表的大小
使能或不使能代码支持80C517和派生的额外的硬
件特征
使能或不使能ATMEL 82x8252和变种的双DPTR寄
存器
使能或不使能模拟设备ADuC B2系列支持双DPTR
寄存器
使能或不使能DALLAS 80C390
支持算法加速器
使能或不使能DALLAS 的320
变种支持双DPTR寄存器
使能或不使能PHILIPS和ATMELWM 派生的支持
双DPTR寄存器
不记录µVision2更新信息
Cx51不扩展到ANSI C
指定一个OBJ文件或禁止OBJ文件
在OBJ文件中包含变量类型信息
假定在中断中只用寄存器组0
ARn
地址
80C400
520 530 550和
21
和5240
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
命令 类 说明
OMF2
†
OPTIMIZE
ORDER
†
PAGELENGTH
PAGEWIDTH
PREPRINT
†
†
PRINT
NOPRINT
REGFILE
†
†
REGISTERBANK
REGPARMS
Object
Object
Object
Listing
†
Listing
Listing
Listing
Object
Object
Object
产生OMF2输出文件格式
指定编译器的优化级别
按源文件中变量的出现顺序分配
指定页的行数
指定页的列数
产生一个预处理器列表文件 扩展所有宏
指定一个列表文件名或不使能列表文件
对全局寄存器优化指定一个寄存器定义文件
为绝对寄存器访问选择寄存器组
使能或不使能寄存器参数传递
NOREGPARMS
RET_PSTK
RET_XSTK
ROM
†
†
†
SAVE
RESTORE
SMALL
†
SRC
†
STRING
SYMBOLS
USERCLASS
†
†
†
VARBANKING
WARNINGLEVEL
†
XCROM
†
Object
Object
Object
用重入堆栈保存返回地址
AJMP/ACALL指令产生控制
保存和恢复AREGS
令设置
Object
Object
Object
Listing
Object
Object
†
Listing
Object
选择SMALL存储模式 缺省
产生一个汇编源文件 不产生OBJ模块
定位固定字符串到XDATA或远端存储区
模块中所有符号的列表文件
对可变的变量位置重命名存储区类
使能FAR存储类型变量
选择警告检测级别
对CONST XDATA变量假定ROM空间
22
REGPARMS和OPTIMIZE命
这些命令在命令行或源文件开头的#pragma 中只指定一次 在一个源文件中不
†
能使用多次
控制命令和参数 除了用 DEFINE 命令的参数 是大小写无关的
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
参考
本章的余下部分按字母顺序描述 Cx51 编译器控制命令 他们分成如下部分
缩写 可以替代命令的缩写
参数 命令可选和要求的参数
缺省 命令的缺省设置
23
µVision2控制
说明 详细的说明命令和使用
参考 相关命令
例子 命令使用的例子 有时 也列出结果
怎样指定命令
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
AREGS/NOAREGS
缩写 无
24
参数
缺省
µVision2控制
说明
无
AREGS
Options – C51 – Don‘t use absolute register access
AREGS控制使编译器对寄存器R0到R7用绝对寄存器地址
地址提高了代码的效率
绝对地址
可用REGISTERBANK命令定义使用的寄存器组
NOAREGS命令对寄存器R0到R7不使能绝对 寄存器地址
NOAREGS编译的函数可以使用所有的8051寄 存器组
在被别的函数用不同的寄存器组调用的函数中
用AREGS命令可以直接PUSH或POP寄存器
例如
PUSH和POP指令只能用直接或
命令可用
注意
虽然可能在一个程序中定义了几次
AREGS/NOAREGS
选项只
有定义在函数声明为有效
绝对
用
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
例子 下面是一个使用NOAREGS和AREGS的源程序和代码的列表
stmt level source
1 extern char func ();
2 char k;
3
4 #pragma NOAREGS
5 noaregfunc () {
6 1 k = func () + func ();
71 }
8
9 #pragma AREGS
10 aregfunc () {
11 1 k = func () + func ();
12 1 }
25
; FUNCTION noaregfunc (BEGIN)
; SOURCE LINE # 6
0000 120000 E LCALL func
0003 EF MOV A,R7
0004 C0E0 PUSH ACC
0006 120000 E LCALL func
0009 D0E0 POP ACC
000B 2F ADD A,R7
000C F500 R MOV k,A
; SOURCE LINE # 7
000E 22 RET
; FUNCTION noaregfunc (END)
; FUNCTION aregfunc (BEGIN)
; SOURCE LINE # 11
0000 120000 E LCALL func
0003 C007 PUSH AR7
0005 120000 E LCALL func
0008 D0E0 POP ACC
000A 2F ADD A,R7
000B F500 R MOV k,A
; SOURCE LINE # 12
000D 22 RET
; FUNCTION aregfunc (END)
注意保存R7到堆栈 中的不同方法 函数noaregfunc产生的代码
是
MOV A R7
PUSH ACC
同时对 aregfunc 函数的代码是
PUSH AR7
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
ASM/ENDASM
缩写 无
26
参数
缺省
µVision2控制
说明
无
无
本命令不能在命令行指定
ASM命令标志一块源程序的开始
令产生的.SRC文件中
这些源程序可以认为是内嵌的汇编 然而 它只输出到由SRC命
令产生的源文件中
在µVision2应对C源文件中包含ASM/ENDASM段如下设置一个
文件指定选项
右键点击PROJECT窗口 – 文件表中的文件
选择Options for…打开选项 – 属性页
源程序不汇编和输出到OBJ文件中
它可以直接合并到由SRC命
使能Generate Assembler SRC file
使能Assemble SRC file
用这些设置
编译产生一个OBJ文件
ENDASM命令标志一个源程序块的结束
µVision2产生一个汇编源文件
.OBJ
注意
ASM和ENDASM
命令只能在源文件中使用 且作为
令的一部分
.SRC
并用汇编
#pragma
命
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
27
例子
#pragma asm / #pragma endasm
下面是C源文件
.
.
.
stmt level source
1 extern void test ();
2
3 main () {
4 1 test ();
51
6 1 #pragma asm
7 1 JMP $ ; endless loop
8 1 #pragma endasm
91 }
.
.
产生下面的.SRC文件
; ASM.SRC generated from: ASM.C
NAME ASM
?PR?main?ASM SEGMENT CODE
EXTRN CODE (test)
EXTRN CODE (?C_STARTUP)
PUBLIC main
; extern void test ();
;
; main () {
main:
; test ();
;
; #pragma asm
; #pragma endasm
;}
RSEG ?PR?main?ASM
USING 0
; SOURCE LINE # 3
; SOURCE LINE # 4
LCALL test
JMP $ ; endless loop
; SOURCE LINE # 9
RET ; END OF main
END
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
BROWSE
28
缩写
参数
缺省
µVision2控制
说明
例子
BR
无
不创建浏览信息
Options – Output – Browse Information
用BROWSE 编译器产生浏览信息 浏览信 息包括标识符 包
含预处理器符号
信息可以在µVision2内显示 选择View – Source Browser打开
µVision2源浏览器
源浏览器
能
C51 SAMPLE.C BROWSE
#pragma browse
他们的存储空间 类型 定义和参考列表
参考µVision2
用户手册 第四章
µVision2
功
Keil Software – Cx51 编译器用户手册—第二章 用 Cx51 编译器编译
CODE
29
缩写
参数
缺省
µVision2控制
说明
例子
CD
无
不产生汇编代码列表
Options – Listing – C Compiler Listing – Assembly Code
CODE命令附加一个汇编助记符列表到列表文件
代表源程序中的每个函数
缺省的 在列表文件中没有汇编代码
汇编程序代码
C51 SAMPLE.C CD
#pragma code
下面例子显示C源程序和它产生的OBJ结果代码和助记符
编间显示了产生代码的行号
字符R和E代表可重定位和外部的
在汇
stmt level source
1 extern unsigned char a, b;
2 unsigned char c;
3
4 main()
5{
6 1 c = 14 + 15 * ((b / c) + 252);
71 }
.
.
.
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
0000 E500 E MOV A,b
0002 8500F0 R MOV B,c
0005 84 DIV AB
0006 75F00F MOV B,#0FH
0009 A4 MUL AB
000A 24D2 ADD A,#0D2H
000C F500 R MOV c,A
000E 22 RET
; FUNCTION main (END)
; SOURCE LINE # 5
; SOURCE LINE # 6
; SOURCE LINE # 7