《从C到嵌入式C编程语言 入门、实用、深入》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:梁合庆等编著
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2000
  • ISBN:7810129996
  • 页数:363 页
图书介绍:本书是从80X86C到8位8051C、16位80C51XAC的编程语言,分C语言基础、C51(8051用8位嵌入式C语言)、XAC(80C51XA用16位嵌入式C语言)三部分。

第一部分 C语言基础 1

第一章 词法 1

1.1 标识符 1

1.2 关键字 2

1.3 常量 2

1.3.1 整数常量 2

1.3.2 浮点数常量 3

1.3.3 枚举常量 4

1.3.4 字符常量 4

1.4 字符串 5

1.5 运算符 5

1.5.1 单目运算符 7

1.5.2 双目运算符 8

1.5.3 三目运算符 9

1.5.4 赋值运算符 10

1.5.5 逗号运算符 10

1.5.6 函数参数运算符 11

1.5.7 数组下标运算符 11

1.5.8 结构/联合成员运算符 11

1.5.9 结构/联合指针运算符 11

1.6 分隔符 11

1.6.1 方括号分隔符 12

1.6.2 圆括号分隔符 12

1.6.3 花括号分隔符 12

1.6.4 逗号分隔符 13

1.6.5 分号分隔符 13

1.6.6 冒号分隔符 13

1.6.7 省略号分隔符 13

1.6.8 星号分隔符 14

1.6.9 等号分隔符 14

1.6.10 预处理器伪指令符 14

1.7 空白符(nul) 14

第二章 说明 15

2.1 对象与左值 15

2.1.1 对象 15

2.1.2 左值 16

2.2 变量说明 16

2.3 数组说明 18

2.3.1 一维数组,一维指针数组,一维数组指针 19

2.3.2 多维数组,多维指针数组,多维数组指针,多重指针 20

2.4 结构说明 20

2.4.1 原型法 21

2.4.2 类型别名法 21

2.4.3 关于结构的讨论 22

2.4.4 位段结构 23

2.5 联合说明 23

2.6 函数说明 24

第三章 语句 27

3.1 语句 27

3.2 表达式 27

3.3 表达式语句 27

3.4 复合语句 28

3.5 循环语句 29

3.5.1 for循环语句 29

3.5.2 while循环语句 30

3.5.3 do while循环语句 31

3.6 条件语句 32

3.6.1 一般条件语句 32

3.6.2 嵌套条件语句 33

3.6.3 多选一条件语句 34

3.7 开关语句 36

3.8 间断语句 38

3.9 接续语句 39

3.10 跳转语句 39

3.11 返回语句 40

3.12 空语句 42

第四章 函数及函数库 44

4.1 前言 44

4.2 单文件程序(一)——字符串处理 44

4.3 单文件程序(二)——二维数组 46

4.4 多文件程序——台式计算器逆波兰算法的实现 47

4.5 关于函数参数值的传送问题 51

4.6 主函数 52

4.7 C语言的函数库 54

4.8 头文件 54

4.9 分类库函数 56

4.9.1 归类函数 56

4.9.2 转换函数 56

4.9.3 目录控制函数 57

4.9.4 诊断函数 57

4.9.5 图形函数 57

4.9.6 内部函数 58

4.9.7 输入输出函数 58

4.9.8 各类接口函数(dos,bios,8086) 60

4.9.9 串与内存块操作函数 61

4.9.10 数学函数 62

4.9.11 动态内存管理函数 63

4.9.12 杂项函数 63

4.9.13 进程控制函数 63

4.9.14 窗口文本显示函数 64

4.9.15 日期时间函数 64

4.9.16 变参数表函数 64

4.10 全局变量 65

4.10.1 argc 65

4.10.2 argv 65

4.10.3 ctype 65

4.10.4 daylight 65

4.10.5 directvideo 65

4.10.6 environ 66

4.10.7 error,_doserrno,sys_errlist,sys_nerr 66

4.10.8 fmode 67

4.10.9 heaplen 67

4.10.10 _new_handler 68

4.10.11 _osmajor,_osminor 68

4.10.12 _ovrbuffer 68

4.10.13 _psp 68

4.10.14 _stklen 68

4.10.15 timezone 69

4.10.16 tzname 69

4.10.17 _version 69

4.10.18 _wscroll 69

4.10.19 _8087 69

第五章 预处理器 71

5.1 前言 71

5.2 包含文件伪指令 71

5.3 伪指令宏 72

5.3.1 简单宏 72

5.3.2 参数宏 72

5.3.3 宏释放 73

5.3.4 条件宏定义 73

5.3.5 预定义宏 74

5.3.6 宏体中使用转义符#和合并符## 74

5.4 条件编译伪指令 75

5.5 #pragma伪指令 75

5.6 #line伪指令 75

5.7 #error伪指令 76

第二部分 C51(8051用8位嵌入式C语言) 78

第六章 C51前言 78

第七章 C51说明 79

7.1 C51简单变量说明 79

7.1.1 类型说明符bit 80

7.1.2 预定义特殊功能寄存器说明符sfr和sfr16 80

7.1.3 预定义特殊功能寄存器位说明符sbit 81

7.1.4 在bdata RAM空间定义位变量(借用位类型符sbit) 81

7.2 C51复合变量说明 82

7.3 C51指针变量说明 82

7.3.1 通用指针 83

7.3.2 抽象指针——匿名指针 84

7.3.3 指针可用运算符 85

第八章 C51存储模式 86

8.1 C51三种存储模式 86

8.2 C51内部对数据和函数的组织规范 87

8.2.1 标识符改大写字符和函数换名 87

8.2.2 全局变量存放的段名规定 87

8.2.3 函数的段名 87

8.2.4 函数的参数传送规则 88

8.2.5 重入栈的有关规定 89

8.2.6 函数返回值的规定 89

第九章 C51函数及库函数 90

9.1 函数说明 90

9.2 函数被修饰使用指定的寄存器组 91

9.3 函数被修饰为中断函数 92

9.4 函数被修饰为重入函数 93

9.5 函数被修饰为使用指定的存储模式 94

9.6 C51与PL/M51函数的交叉调用 95

9.7 C与汇编函数的交叉调用 95

9.8 内部函数 100

9.8.1 左移多位函数 100

9.8.2 右移多位函数 101

9.8.3 空操作函数 101

9.8.4 位测试函数 102

9.9 抽象数组(绝对地址存取)——absacc库函数 102

9.10 C51库函数介绍 103

第十章 C51 SFR头文件和配置文件 107

10.1 特殊功能寄存器头文件 107

10.2 C51配置文件 107

10.2.1 STARTUP.A51文件 108

10.2.2 INIT.A51文件 108

10.2.3 PUTCHAR.C文件 109

10.2.4 GETKEY.C文件 109

第十一章 C51预处理器伪指令 110

第十二章 C51编译命令行控制选项和控制伪指令 111

12.1 简介 111

12.2 编译命令行 111

12.2.1 一次性使用编译控制伪指令 112

12.2.2 可多次使用编译控制伪指令 118

第十三章 C51及L51使用方法 122

13.1 C51的使用环境 122

13.2 C51安装 122

13.3 编译方法 123

13.4 C51支持的文件名和设备名 123

13.5 错误号 123

13.6 连接/定位方法 124

13.7 连接控制选项 125

13.7.1 一般的连接控制选项 125

13.7.2 特殊的连接控制选项 126

13.8 定位控制选项 127

13.9 映像列表文件控制选项 129

13.10 连接/定位命令 129

13.11 特殊连接控制选项示例 131

13.12 使用C51和L51的完整示例 134

13.12.1 多模块编程 135

13.12.2 多模块编译 135

13.12.3 多模块连接定位 137

第三部分 XAC(80C51XA用16位嵌入式C语言) 143

第十四章 XAC说明 143

14.1 XAC变量说明 143

14.1.1 XAC一般变量说明 143

14.1.2 绝对变量与SFR 147

14.1.3 位变量与可位寻址SFR 147

14.2 XAC数组说明 148

14.3 XAC结构说明 148

14.4 XAC联合说明 148

14.5 XAC函数说明 148

14.5.1 XAC一般函数说明 149

14.5.2 XAC banked中断函数说明 149

14.5.3 中断向量表(ROM向量表)的添写 150

14.5.4 中断接管与RAM向量表 152

第十五章 XAC编译器内部管理规范和约定 154

15.1 XAC标准程序子段(psect) 154

15.2 XAC有关寄存器的约定 155

15.3 XAC有关参数传送和函数返回的约定 155

15.4 XAC关于函数的签字 156

15.5 XAC有关存储器的约定 156

15.6 XAC的存储模式 156

15.7 XAC关于运行时启动模块的规定 158

15.8 XAC上电子程序 158

15.9 XAC标准启动模块的编程 158

15.9.1 连接器定义符号名 158

15.9.2 bss和rbss清零程序 159

15.9.3 data和rdta复制程序 159

15.10 XAC定制的启动模块 159

15.10.1 手工优化代码 159

15.10.2 定制启动模块的编写 160

15.10.3 关于版权信息 160

第十六章 XAC的混合编程和函数库 161

16.1 C语言与汇编语言混合编程 161

16.1.1 C与汇编函数的交叉调用 161

16.1.2 在线嵌入汇编指令段 162

16.2 XAC运行时间库函数 162

16.2.1 标准输入输出库函数及用户的定制 162

16.2.2 XAC库函数汇总 163

16.2.3 XAC库管理器实用程序 166

第十七章 XAC编译器 168

17.1 编译命令行控制选项 168

17.1.1 -A(指定ROM和RAM定位地址) 169

17.1.2 -AAHEX(指定按美国自动化符号格式生成HEX文件) 169

17.1.3 -AV(指定符号文件用Avocet风格) 170

17.1.4 -BIN(指定生成二进制输出文件) 170

17.1.5 -Bl(指定选用大存储模式) 170

17.1.6 -Bm(指定选用中存储模式) 170

17.1.7 -Bs(指定选用小存储模式) 170

17.1.8 -C(只翻译到目标文件) 171

17.1.9 -CR(生成交叉访问表) 171

17.1.10 -CLIST(生成C列表文件) 171

17.1.11 -D(定义宏) 171

17.1.12 -DOUBLE(起用IEEE64位DOUBLE变量) 172

17.1.13 -E(编译器使用editor格式的错误信息) 172

17.1.14 -E(编译器错误信息重定向到指定文件) 172

17.1.15 -H(生成汇编级符号文件) 172

17.1.16 -I(指定附加的搜索头文件的路径) 173

17.1.17 -L(指定附加的扫描库) 173

17.1.18 -L-(指定传递给LINKER的控制选项) 173

17.1.19 -M(生成映像文件) 173

17.1.20 -MOTOROLA(生成Motorola S-Record格式的HEX文件) 174

17.1.21 -N(指定标识符有效字符长度) 174

17.1.22 -O(启动优化) 174

17.1.23 -O(指定输出文件) 174

17.1.24 -OMF51(指定生成OMF51格式的输出文件) 174

17.1.25 -PROTO(指定生成包括ANSI和K R风格的函数原型文件) 174

17.1.26 -PSECTMAP(程序段映像表) 174

17.1.27 -S(编译生成汇编源文件) 175

17.1.28 -STRICT(严格遵守ANSI标准) 175

17.1.29 -TEK(编译生成Tektronics HEX文件) 175

17.1.30 -U(解除宏定义) 176

17.1.31 -UBROF(指定生成UBROF格式的输出文件) 176

17.1.32 -UNSIGNED(指定unsigned char为char的缺省类型) 176

17.1.33 -V(详示编译命令) 176

17.1.34 -W(设置告警级别) 176

17.1.35 -X(去除局部符号) 176

17.1.36 -Zg(启动全局优化) 176

17.2 编译器输出文件格式 176

17.3 编译器生成的符号文件 177

17.4 CREF生成交叉访问表的实用程序 177

17.4.1 -F路径或文件名 177

17.4.2 -H表头名 178

17.4.3 -L每页行数 178

17.4.4 -O输出文件名 178

17.4.5 -P页宽 178

17.4.6 -S包含拒选符号的文件名 178

17.4.7 -X拒选符号的前导字符序列 178

第十八章 XAC预处理器 178

18.1 XAC预定义宏 179

18.2 #pragma编译控制伪指令 179

第十九章 XAC宏汇编器 179

19.1 序言 181

19.2 XA汇编源文件语句 181

19.2.1 字符集 181

19.2.2 数 181

19.2.3 分隔符 181

19.2.4 特殊字符 181

19.2.5 标识符 182

19.2.6 汇编生成的标识符 182

19.2.7 位置计数器 182

19.2.8 寄存器符号 182

19.2.9 字符串 182

19.2.10 暂时标号 182

19.2.11 表达式 182

19.2.12 汇编语句的格式 183

19.3 XA汇编伪指令 183

19.3.1 伪指令语句格式 183

19.3.2 PUBLIC 183

19.3.3 EXTRN 184

19.3.4 GLOBAL 184

19.3.5 END 184

19.3.6 程序段(PSECT) 184

19.3.7 ORG 185

19.3.8 EQU和SET 185

19.3.9 DB和DW 186

19.3.10 DF 186

19.3.11 DS 186

19.3.12 IF ELSE EKSEIF ENDIF 186

19.3.13 SIGNAT 186

19.3.14 控制选项伪指令行 187

19.4 宏 187

19.4.1 MACRO ENDM 187

19.4.2 LOCAL 188

19.4.3 REPT 188

19.4.4 IRP 189

19.4.5 IRPC 190

19.5 XA汇编命令行 190

19.5.1 XA汇编命令行格式 190

19.5.2 汇编选项 190

第二十章 HLINK连接器 191

20.1 简介 192

20.2 连接与定位(或装载)的基本概念 192

20.3 连接命令 192

20.4 OBJTOHEX实用程序 193

第二十一章 HPDXA 51XA集成开发平台 194

21.1 安装 196

21.1.1 MS_DOS下的安装 196

21.1.2 UNIX操作系统下的安装 196

21.2 快速入门 196

21.2.1 简单程序示例 197

21.2.2 使用HPDXA 197

21.2.3 使用XAC命令行 197

21.2.4 运行程序 197

21.3 HPDXA用户接口 198

21.3.1 监视器模式必性选择 198

21.3.2 菜单命令操作 198

21.4 HPDXA菜单命令快览 199

21.4.1 系统子菜单(<<>>) 202

21.4.2 File子菜单 202

21.4.3 Edit子菜单 202

21.4.4 Option子菜单 202

21.4.5 Compile子菜单 203

21.4.6 Make子菜单 203

21.4.7 Run子菜单 204

21.4.8 Utility子菜单 205

21.4.9 Help子菜单 206

21.5 HPDXA编辑器 207

21.6 编译连接一条龙示例 207

附录 209

附录A C51函数库 209

A.1 数学函数 209

A.1.1 函数名:abs,cabs.fabs.labs 209

A.1.2 函数名:exp,log,log10 210

A.1.3 函数名:sqrt 210

A.1.4 函数名:rand,srand 211

A.1.5 函数名:cos,sin,tan 211

A.1.6 函数名:acos,asin,atan,atan2 212

A.1.7 函数名:cosh,sinh,tanh, 212

A.1.8 函数名:fpsave,fprestore 213

A.1.9 函数名:ceil 214

A.1.10 函数名:floor 214

A.1.11 函数名:modf 214

A.1.12 函数名:pow 215

A.2 标准化I/O函数 215

A.2.1 函数名:_getkey() 216

A.2.2 函数名:getchar 216

A.2.3 函数名:gets 216

A.2.4 函数名:ungetchar 217

A.2.5 函数名:-ungetkey 217

A.2.6 函数名:putchar 218

A.2.7 函数名:printf 218

A.2.8 函数名:sprintf 220

A.2.9 函数名:puts 221

A.2.10 函数名:scanf 221

A.2.11 函数名:sscanf 223

A.3 动态存储函数 223

A.3.1 函数名:calloc 224

A.3.2 函数名:free 224

A.3.3 函数名:int_mempool 225

A.3.4 函数名:malloc 225

A.3.5 函数名:realloc 226

A.4 字符归类函数 226

A.4.1 函数名:isalpha 226

A.4.2 函数名:isalnum 227

A.4.3 函数名:iscntrl 227

A.4.4 函数名:isdigit 228

A.4.5 函数名:isgraph 228

A.4.6 函数名:isprint 229

A.4.7 函数名:ispunct 229

A.4.8 函数名:islower 230

A.4.9 函数名:isupper 230

A.4.10 函数名:isspace 231

A.4.11 函数名:isxdigit 231

A.4.12 函数名:toascii(参数宏) 232

A.4.13 函数名:toint 232

A.4.14 函数名:tolower 232

A.4.15 函数名:tolower(参数宏) 233

A.4.16 函数名:toupper 233

A.4.17 函数名:_toupper(参数宏) 234

A.5 字符串函数 234

A.5.1 函数名:memchr 234

A.5.2 函数名:memcmp 235

A.5.3 函数名:memcpy 236

A.5.4 函数名:memccpy 236

A.5.5 函数名:memmove 237

A.5.6 函数名:memset 237

A.5.7 函数名:strcat 238

A.5.8 函数名:strncat 238

A.5.9 函数名:strcmp 239

A.5.10 函数名:strncmp 239

A.5.11 函数名:strcpy 240

A.5.12 函数名:strncpy 240

A.5.13 函数名:strlen 241

A.5.14 函数名:strchr,strpos 241

A.5.15 函数名:strrchr,strrpos 242

A.5.16 函数名:strspn,strcspn,strpbrk,strrpbrk 243

A.6 字符串转换函数 244

A.6.1 函数名:atof 244

A.6.2 函数名:atol 245

A.6.3 函数名:atoi 245

A.7 变参数函数 246

A.7.1 宏名:va_list 246

A.7.2 宏名:va_start(va_list ap,last_argument) 246

A.7.3 宏名:type va_arg(va_list ap,type) 246

A.7.4 宏名:va_end(va_list ap) 246

A.8 全程跳转函数 248

A.8.1 函数名:setjmp 248

A.8.2 函数名:longjmp 248

A.9 内部函数 250

A.9.1 函数名:_crol_,_irol_,_lrol_ 250

A.9.2 函数名:_cror_,_iror_,_lror_ 250

A.9.3 函数名:_nop_ 251

A.9.4 函数名:_testbit_ 251

A.10 抽象数组 252

A.10.1 函数名:CBYTE,BDYTE,PBYTE,XBYTE 252

A.10.2 函数名:CWORD,DWORD,XWORD,PWORD 252

附录B C51编译器使用错误提示 253

B.1 前言 253

B.2 致命错误 253

B.3 语法及语义错误 255

附录C L51连接/定位器使用错误提示 267

C.1 前言 267

C.2 L51警告 267

C.3 L51错误 269

C.4 L51致命错误 272

C.5 例外信息 275

附录D C51的极限值 276

附录E XAC运行时间库函数 277

E.1 ACOS 277

E.2 ASCTIME 277

E.3 ASIN 278

E.4 ASSERT 279

E.5 ATAN 280

E.6 ATOF 280

E.7 ATOI 281

E.8 ATOL 281

E.9 BSEARCH 282

E.10 CALLOC 283

E.11 CEIL 284

E.12 CGETS 284

E.13 COS 285

E.14 COSH,SINH,TANH 286

E.15 CPUTS 286

E.16 CTIME 287

E.17 DI,EI 287

E.18 DIV 288

E.19 EXIT 289

E.20 EXP 289

E.21 FABS 290

E.22 FLOOR 290

E.23 FREE 291

E.24 FREXP 292

E.25 GETC 292

E.26 GETCH,GETCHE,UNGETCH 293

E.27 GETS 293

E.28 GMTIME 294

E.29 ISALNUM,ISALPHA,ISDIGIT,ISLOWER等 295

E.30 KBHIT 296

E.31 LDEXP 296

E.32 LDIV 297

E.33 LOCALTIME 298

E.34 LOG,LOG10 299

E.35 LONGJMP 299

E.36 MALLOC 300

E.37 MEMCHR 301

E.38 MEMCMP 302

E.39 MEMCPY 303

E.40 MEMMOV 303

E.41 MEMSET 304

E.42 PERSIST_CHECK,ERSIST_VALIDATE 304

E.43 POW 305

E.44 PRINTF,VPRINTF 306

E.45 PUTCH 308

E.46 PUTS 308

E.47 QSORT 309

E.48 RAND 310

E.49 REALLOC 310

E.50 SCANF,VSCANF 311

E.51 SET_VECTOR 312

E.52 SETJMP 313

E.53 SIN 314

E.54 SPRINTF,VSPRINTF 315

E.55 SQRT 315

E.56 SRAND 316

E.57 SSCANF,VSSCANF 317

E.58 STRCAT 318

E.59 STRCHR 318

E.60 STRCMP 319

E.61 STRCPY 320

E.62 STRLEN 320

E.63 STRNCAT 321

E.64 STRNCMP 322

E.65 STRNCPY 322

E.66 STRRCHR 323

E.67 TAN 324

E.68 TOLOWER,TOUPPER,TOASCII 324

E.69 VA_STSRT,VA_ARG,VA_END 325

附录F XAC使用错误信息 327

附录G HTDXA菜单命令热键 363