用户手册
CC78K0S
C 编译程序 版本 1.30 或更高
语言
目标设备
78K/0S 系列
文档编号: U14872CA1V0UM00 (第一版)
发布日期:2007 年 8 月 N CP(K)
2001 ©
日本印刷
[ 备忘录]
用户手册 U14872CA1V0UM 2
Windows 和 Windows NT 是微软公司在美国和 /或其他国家的注册商标或商标。
PC/AT 是国际商用机器公司的商标。
i386 是英特尔公司的商标。
UNIX 是在美国和其他国家的注册商标,并通过 X/Open 有限公司独家许可。
SPARCstation是 SPARC 国际公司的商标。
SunOS 和 Solaris 是 Sun 微系统公司的商标。
HP9000 series 700和 HP-UX 是惠普公司的商标。
用户手册 U14872CA1V0UM 3
z 本文档所刊登的内容有效期截至 2007 年 8 月。将来可能未经预先通知而更改。在实际进行生产设计
时,请参阅各产品最新的数据表或数据手册等相关资料以获取本公司产品的最新规格。
z 并非所有的产品和 /或型号都向每个国家供应。请向本公司销售代表查询产品供应及其他信息。
z 未经本公司事先书面许可,禁止复制或转载本文件中的内容。否则因本文档所登载内容引发的错误,
本公司概不负责。
z 本公司对于因使用本文件中列明的本公司产品而引起的,对第三者的专利、版权以及其它知识产权的
侵权行为概不负责。本文件登载的内容不应视为本公司对本公司或其他人所有的专利、版权以及其它
知识产权作出任何明示或默示的许可及授权。
z 本文件中的电路、软件以及相关信息仅用以说明半导体产品的运作和应用实例。用户如在设备设计中
应用本文件中的电路、软件以及相关信息,应自行负责。对于用户或其他人因使用了上述电路、软件
以及相关信息而引起的任何损失,本公司概不负责。
z 虽然本公司致力于提高半导体产品的质量及可靠性,但用户应同意并知晓,我们仍然无法完全消除出
现产品缺陷的可能。为了最大限度地减少因本公司半导体产品故障而引起的对人身、财产造成损害
(包括死亡)的危险,用户务必在其设计中采用必要的安全措施,如冗余度、防火和防故障等安全设
计。
z 本公司产品质量分为:
“标准等级 ”、 “专业等级 ”以及 “特殊等级 ”三种质量等级。
“特殊等级 ”仅适用于为特定用途而根据用户指定的质量保证程序所开发的日电电子产品。另外,各种日
电电子产品的推荐用途取决于其质量等级,详见如下。用户在选用本公司的产品时,请事先确认产品的
质量等级。
“ 标准等级” : 计算机,办公自动化设备,通信设备,测试和测量设备,音频· 视频设备,家电,加工
机械以及产业用机器人。
“ 专业等级” : 运输设备(汽车、火车、船舶等),交通用信号控制设备,防灾装置,防止犯罪装
置,各种安全装置以及医疗设备(不包括专门为维持生命而设计的设备)。
“ 特殊等级: 航空器械,宇航设备,海底中继设备,原子能控制系统,为了维持生命的医疗设备、
用于维持生命的装置或系统等。
除在本公司半导体产品的数据表或数据手册等资料中另有特别规定以外,本公司半导体产品的质量等级
均为“ 标准等级” 。如果用户希望在本公司设计意图以外使用本公司半导体产品,务必事先与本公司销售
代表联系以确认本公司是否同意为该项应用提供支持。
(注)
(1) 本声明中的“本公司”是指日本电气电子株式会社(NEC Electronics Corporation)及其控股公司。
(2 ) 本声明中的“ 本公司产品” 是指所有由日本电气电子株式会社所开发或制造,或为日本电气电子株式会社
(定义如上)开发或制造的产品。
用户手册 U14872CA1V0UM 4
区域信息
本文档中的某些信息可能因国家不同而有所差异。用户在使用任何一种 NEC 产品之前,请与当地的 NEC 办事处联
系,以获取权威的代理商和发行商信息。请验证以下内容:
z 设备的可用性
z 定货信息
z 产品发布进度表
z 相关技术资料的可用性
z 开发环境要求(例如:要求第三方工具和组件,主计算机,电源插头, AC 供电电源等)
z 网络要求
此外,对于商标、注册商标、出口限制条款和其他法律规定,不同的国家也有不同的要求。
详细信息请联系:
(中国区)
网址:
http://www.cn.necel.com/
http://www.necel.com/
[北京 ]
日电电子(中国)有限公司
中国北京市海淀区知春路 27 号
量子芯座 7,8,9,15 层
电话:(+86)10-8235-1155
传真:(+86)10-8235-7679
[ 深圳]
日电电子(中国)有限公司深圳分公司
深圳市福田区益田路卓越时代广场大厦 39 楼
3901 ,3902 ,3909 室
电话:(+86)755-8282-9800
传真:(+86)755-8282-9899
[ 上海]
日电电子(中国)有限公司上海分公司
中国上海市浦东新区银城中路 200 号
中银大厦 2409-2412 和 2509-2510 室
电话:(+86)21-5888-5400
传真:(+86)21-5888-5230
上海恩益禧电子国际贸易有限公司
中国上海市浦东新区银城中路 200 号
中银大厦 2511-2512
电话:(+86)21-5888-5400
传真:(+86)21-5888-5230
室
[ 香港]
香港日电电子有限公司
香港九龙旺角太子道西 193 号新世纪广场
第 2 座 16 楼 1601-1613 室
电话: (+852)2886-9318
传真: (+852)2886-9022
2886-9044
用户手册 U14872CA1V0UM 5
引言
CC78K0S C 编译器(下文称为该 C 编译器)是根据美国信息系统( C 编程语言)国家标准草案(1988 年 12 月 7
日)中的第二章 环境和第三章 语言编写的。因此,使用本 C 编译器可以对符合 ANSI 标准的 C 语言源程序进行编译,
可以开发 78K/0S 系列应用产品。
《CC78K0S C 编译器语言篇》(本手册)是为了让那些使用本 C 编译器进行软件开发的用户能够正确了解本 C 编
译器的基本函数及语言规范而编写的。
本手册不介绍如何操作本 C 编译器。因此,在您掌握了本手册的内容后,请阅读《CC78K0S C 编译器操作篇
(U14871E) 》
关于 78K/0S 系列的体系结构,敬请参阅 78K/0S 系列各个产品的用户手册。
用户手册 U14872CA1V0UM 6
[ 目标设备]
可以使用本 C 编译器开发 78K/0S 系列微控制器的软件。
请注意,开发时需要一个与目标设备对应的设备文件。
[ 读者对象]
尽管本手册适用于那些已经阅读过微控制器用户手册且具有软件开发经验的读者,但是 C 编译器或 C 语言方面的知识
对于本手册的读者来说不是必须的。本手册中的内容假设读者熟悉软件术语。
[ 组织结构]
本手册由以下 13 章及附录组成。
第 1 章 概述
概括介绍该 C 编译器的一般功能、性能指标及特色。
第 2 章 C 语言的结构
介绍 C 源程序模块文件的构成要素。
第 3 章 数据类型与存储类的声明
介绍 C 中使用的数据类型及存储类,以及如何声明数据对象或函数的类型及存储类。
第 4 章 类型转换
介绍本 C 编译器自动执行的数据类型转换。
第 5 章 运算符与表达式。
介绍 C 中使用的运算符和表达式,以及运算符的优先级。
第 6 章 C 语言的控制结构
介绍 C 的程序控制结构及在 C 中执行的语句。
章 结构体与共用体
第 7
关于结构体与共用体的概念,以及如何引用结构体与共用体成员。
第 8 章 外部定义
介绍外部定义的类型,以及如何使用外部定义。
第 9 章 预处理指令
详细介绍预处理指令的类型,以及如何使用预处理指令。
第 10 章 库函数
详细介绍 C 库函数的类型,以及如何使用各个库函数。
第 11 章 扩展函数
介绍该 C 编译器的扩展函数,以便用户最大限度地发挥目标设备的功能。
第 12 章 汇编程序与 C 程序之间的引用和兼容性
介绍将 C 源程序与用汇编源程序连接的方法。
第 13 章 编译器的高效使用
概括介绍如何更有效地使用本 C 编译器。
附录 A~E
包含 saddr 区域标签列表、段名列表、运行时刻库列表、库堆栈占用列表及快速参考索引。
用户手册 U14872CA1V0UM 7
[ 手册使用方法]
• 对于不熟悉 C 编译器或 C 语言的读者:
从第 1 章开始阅读,因为本手册涵盖了从 C 的程序控制结构到本 C 编译器的扩展函数内容。 在第 1 章中,使用一
个 C 源程序示例来介绍本手册中的引用部分。
• 对于熟悉 C 编译器或 C 语言的读者:
本 C 编译器的语言规范符合 ANSI 标准 C。 因此,您可以从第 11 章开始,该章介绍了本 C 编译器特有的扩展函
数。 在阅读第 11 章时,如有必要,还可以参考随 78K/0S 系列中的目标设备附带的用户手册。
[相关文档 ]
文档名称 文档编号
CC78K0S C 编译器使用用户手册
U14871E
[ 参考文献]
美国信息系统(C 编程语言)国家标准草案(1988 年 12 月 7 日)
[ 术语]
RTOS = 78K/0 系列实时操作系统 RX78K0
[约定 ]
本手册中使用了以下符号及缩写。
符号 含义
⋅⋅⋅ 相同格式的数据的连续(重复)
“ ” 括在双引号中的字符必须原样输入。
‘ ’ 括在单引号中的字符必须原样输入。
本部分程序描述被省略
…
/ 定界符
\ 反斜线
[ ] 方括号中的参数可以被省略。
用户手册 U14872CA1V0UM 8
目录
第 1 章 概述 ...................................................................................................................21
1.1 C语言与汇编语言 .........................................................................................................21
1.2 使用 C编译器的程序开发过程 .......................................................................................23
1.3 C源程序的基本结构 ...................................................................................................... 25
1.3.1 程序格式 ................................................................................................................ 25
1.4 程序开发前的提示 ........................................................................................................28
1.5 该 C编译器的特色 .........................................................................................................30
(1) callt /_ _callt 函数 .................................................................................................. 30
(2) 寄存器变量 ............................................................................................................ 30
(3) saddr区域的使用 .................................................................................................. 30
(4) sfr 区域 ................................................................................................................. 30
(5) noauto 函数 .......................................................................................................... 31
(6) norec /_ _leaf 函数 ................................................................................................ 31
(7) 位型变量与 boolean /_ _boolean 型变量 .............................................................. 31
(8) ASM语句 ............................................................................................................... 31
(9) 中断函数 ................................................................................................................ 31
(10) 中断函数修饰符 ..................................................................................................... 31
(11) 中断函数 ................................................................................................................ 31
(12) CPU控制指令 ........................................................................................................ 31
(13) 绝对地址访问函数 ................................................................................................. 31
(14) 位域声明 ................................................................................................................ 31
(15) 更改编译器输出区名称的函数 ................................................................................ 32
(16) 二进制常量描述函数 .............................................................................................. 32
(17) 模块名更改函数 ..................................................................................................... 32
(18) 循环移位函数 ......................................................................................................... 32
(19) 乘法函数 ................................................................................................................ 32
(20) 除法函数 ................................................................................................................ 32
(21) BCD操作函数 ........................................................................................................ 32
(22) 数据插入函数 ......................................................................................................... 32
(23) 静态模式 ................................................................................................................ 32
(24) 类型更改 ................................................................................................................ 32
(25) Pascal 函数(_ _pascal ) .................................................................................... 32
(26) 函数调用接口的自动 pascal函数化 ......................................................................... 32
(27) 参数 /返回值的 int 扩展限制方法 ............................................................................ 33
(28) 数组偏移量计算简化方法 ....................................................................................... 33
(29) 寄存器直接引用函数 .............................................................................................. 33
(30) 内存操作函数 ......................................................................................................... 33
(31) 绝对地址分配规范 ................................................................................................. 33
(32) 静态模式展开规范 ................................................................................................. 33
(33) 临时变量 ................................................................................................................ 33
用户手册 U14872CA1V0UM 9
(34) 支持序言 /尾声的库 .................................................................................................33
第 2 章 C语言的结构 ..................................................................................................... 34
2.1 字符集 ...........................................................................................................................35
(1) 字符集 ....................................................................................................................35
(2) 转义字符序列 .........................................................................................................36
(3) 三字符序列 .............................................................................................................36
2.2 关键字 ...........................................................................................................................37
(1) ANSI-C关键字 ........................................................................................................37
(2) 为 CC78K0S增加的关键字 ......................................................................................37
2.3 标识符 ...........................................................................................................................38
2.3.1 标识符的作用域范围 ...............................................................................................39
(1) 函数作用域 .............................................................................................................39
(2) 文件作用域 .............................................................................................................39
(3) 块作用域 ................................................................................................................40
(4) 函数原型作用域 ......................................................................................................40
2.3.2 标识符的连接 .........................................................................................................40
(1) 外部连接 ................................................................................................................40
(2) 内部连接 ................................................................................................................40
(3) 无连接 ....................................................................................................................40
2.3.3 标识符名字空间 ......................................................................................................41
2.3.4 对象的存储时间 ......................................................................................................41
(1) 静态存储时间 .........................................................................................................41
(2) 自动存储时间 .........................................................................................................41
2.3.5 数据类型 ................................................................................................................41
(1) 基本类型 ................................................................................................................42
(2) 字符类型 ................................................................................................................46
(3) 不完全类型 .............................................................................................................46
(4) 派生类型 ................................................................................................................46
(5) 标量类型 ................................................................................................................47
2.3.6 相容类型兼容类型和复合类型 ................................................................................48
(1) 兼容类型相容举型 ..................................................................................................48
(2) 复合类型 ................................................................................................................48
2.4 常量 ...............................................................................................................................49
2.4.1 浮点型常量 .............................................................................................................49
2.4.2 整型常量 ................................................................................................................49
(1) 十进制常量 .............................................................................................................49
(2) 八进制常量 .............................................................................................................50
(3) 十六进制常量 .........................................................................................................50
2.4.3 枚举常量 ................................................................................................................50
2.4.4 字符常量 ................................................................................................................51
2.5 字符串文字 ....................................................................................................................51
2.6 运算符 ...........................................................................................................................51
用户手册 U14872CA1V0UM 10
2.7 定界符 ..........................................................................................................................52
2.8 头文件名 .......................................................................................................................52
2.9 注释 ..............................................................................................................................52
第 3 章 数据类型与存储类的声明 ...................................................................................53
3.1 存储类说明符 ................................................................................................................54
(1) typedef .................................................................................................................. 54
(2) extern .................................................................................................................... 54
(3) static...................................................................................................................... 54
(4) auto ....................................................................................................................... 54
(5) register.................................................................................................................. 54
3.2 类型说明符 ...................................................................................................................55
3.2.1 结构体说明符与联合体共用体说明符 ..................................................................... 57
(1) 结构体说明符 ......................................................................................................... 57
(2) 共用体说明符 ......................................................................................................... 57
(3) 位段位域 ................................................................................................................ 58
3.2.2 枚举说明符 ............................................................................................................ 59
3.2.3 标记 ....................................................................................................................... 60
3.3 类型修饰符 ...................................................................................................................61
3.4 说明符 ..........................................................................................................................62
3.4.1 指针说明符 ............................................................................................................ 62
3.4.2 数组声明符说明符 ......................................................................................................... 63
3.4.3 函数声明符说明符(包括原型声明) ..................................................................... 63
3.5 类型名 ..........................................................................................................................64
3.6 typedef 声明 ................................................................................................................65
3.7 初始化 ..........................................................................................................................67
(1) 具有静态存储时间存储生存期的对象的初始化 ....................................................... 67
(2) 具有自动存储时间存储生存期的对象的初始化 ....................................................... 67
(3) 字符数组的初始化 ................................................................................................. 67
(4) 聚合或共用体型对象的初始化 ................................................................................ 68
第 4 章 类型转换 ............................................................................................................70
4.1 算术运算数 ...................................................................................................................72
(1) 字符与整数(一般整型提升) ................................................................................ 72
(2) 带符号有符号整数与无符号整数 ............................................................................ 72
(3) 通常常见算术类型转换 .......................................................................................... 73
4.2 其他运算数 ...................................................................................................................74
(1) 左值与函数定位符 ................................................................................................. 74
(2) void ....................................................................................................................... 74
(3) 指针 ....................................................................................................................... 74
第 5 章 运算符与表达式。 ..............................................................................................75
5.1 基本表达式 ...................................................................................................................78
5.2 后缀运算符 ...................................................................................................................78
用户手册 U14872CA1V0UM 11
(1) 下标运算符 .............................................................................................................79
(2) 函数调用 ................................................................................................................80
(3) 结构体与共用体成员 ...............................................................................................81
(4) 后缀自增 /自减运算符 ..............................................................................................83
5.3 单目运算符 ....................................................................................................................84
(1) 前缀自增 /自减运算符 ..............................................................................................85
(2) 地址和间接运算符 ..................................................................................................86
(3) 单目算术运算符( + – ~ !) ....................................................................................87
(4) sizeof 运算符 ..........................................................................................................88
5.4 类型转换运算符 .............................................................................................................89
5.5 算术运算符 ....................................................................................................................90
(1) 乘性乘法运算符 ......................................................................................................91
(2) 加性加法运算符 ......................................................................................................92
5.6 按逐位移位运算符 .........................................................................................................93
5.7 关系运算符 ....................................................................................................................95
(1) 关系运算符 .............................................................................................................96
(2) 等性运算符等式运算符 ...........................................................................................98
5.8 按位逻辑运算符 .............................................................................................................99
(1) 按位与运算符 .......................................................................................................100
(2) 按位异或运算符 ....................................................................................................101
(3) 按位或运算符 .......................................................................................................102
5.9 逻辑运算符 ..................................................................................................................103
(1) 逻辑与运算符 .......................................................................................................104
(2) 逻辑或运算符 .......................................................................................................105
5.10 条件运算符 ..................................................................................................................106
5.11 赋值运算符 ..................................................................................................................107
(1) 简单赋值运算符 ....................................................................................................108
(2) 复合赋值运算符 ....................................................................................................109
5.12 逗号运算符 ..................................................................................................................110
5.13 常量表达式 ..................................................................................................................111
(1) 一般整型常量表达式 .............................................................................................111
(2) 算术常量表达式 ....................................................................................................111
(3) 地址常量表达式 ....................................................................................................111
第 6 章 C语言的控制结构 ............................................................................................. 112
(1) 顺序处理 ..............................................................................................................112
(2) 条件控制(选择)处理 .........................................................................................112
(3) 循环(迭代)处理 ................................................................................................112
(4) 分支处理 ..............................................................................................................112
6.1 带标号带标签的语句 ...................................................................................................114
(1) case标号 case标签 ...............................................................................................115
(2) default标号 default标签 .........................................................................................117
6.2 复合语句(块) ...........................................................................................................118
6.3 表达式语句和空语句 ...................................................................................................118
用户手册 U14872CA1V0UM 12
6.4 选择语句.....................................................................................................................119
(1) if 和 if ... else 语句 ............................................................................................... 120
(2) switch语句 ........................................................................................................... 121
6.5 迭代语句 .....................................................................................................................122
(1) while语句 ............................................................................................................. 123
(2) do语句 ................................................................................................................. 124
(3) for语句 ................................................................................................................. 125
6.6 分支语句 .....................................................................................................................126
(1) goto语句 .............................................................................................................. 127
(2) continue语句 ....................................................................................................... 128
(3) break语句 ............................................................................................................ 129
(4) return语句 ............................................................................................................ 130
第 7 章 结构体和共用体 ...............................................................................................131
7.1 结构体 ........................................................................................................................132
(1) 结构体和结构体变量的声明 ................................................................................. 132
(2) 结构体声明列表 ................................................................................................... 132
(3) 数组 和指针 ......................................................................................................... 133
(4) 如何引用结构体成员 ............................................................................................ 133
7.2 共用体 ........................................................................................................................134
(1) 共用体和共用体变量的声明 ................................................................................. 134
(2) 共用体结构体声明列表 ........................................................................................ 134
(3) 共用体数组和指针 ............................................................................................... 135
(4) 如何引用共用体成员 ............................................................................................ 135
第 8 章 外部定义 ..........................................................................................................137
8.1 函数定义 .....................................................................................................................138
8.2 外部对象定义 ..............................................................................................................140
第 9 章 预处理指令(编译程序编译器指令) ...............................................................141
9.1 条件包含 .....................................................................................................................142
(1) #if指令 ................................................................................................................. 143
(2) #elif指令 .............................................................................................................. 144
(3) #ifdef指令 ............................................................................................................ 145
(4) #ifndef指令 .......................................................................................................... 146
(5) #else指令 ............................................................................................................ 147
(6) #endif指令 ........................................................................................................... 148
9.2 源文件包含 .................................................................................................................149
(1) #include < > 指令 ............................................................................................... 150
(2) #include “ ”指令 .................................................................................................. 151
(3) #include预处理记号字符串指令 ........................................................................... 152
9.3 宏替换 ........................................................................................................................153
(1) 实际参数替换 ....................................................................................................... 153
(2) # 操作符 .............................................................................................................. 153
用户手册 U14872CA1V0UM 13
(3) ## 操作符 .............................................................................................................153
(4) 重扫描和再替换 ....................................................................................................154
(5) 宏定义的作用域 ....................................................................................................154
(6) #define指令 ..........................................................................................................155
(7) #define ( )指令 ....................................................................................................156
(8) #undef指令 ...........................................................................................................157
9.4 行控制 .........................................................................................................................158
(1) 更改行号 ..............................................................................................................158
(2) 更改行号和文件名 ................................................................................................158
(3) 用预处理程序记号字符串进行更改 .......................................................................158
9.5 #error预处理指令 ........................................................................................................159
9.6 #pragma指令 ..............................................................................................................160
9.7 空指令 .........................................................................................................................160
9.8 预定义的宏名 ..............................................................................................................161
第 10 章 库函数 ............................................................................................................ 163
10.1 函数之间的接口 ...........................................................................................................164
10.1.1 参数 ......................................................................................................................164
10.1.2 返回值 ..................................................................................................................165
10.1.3 保存个别单独库( Individual Libraries)所用的寄存器 .........................................165
(1) 未指定 -ZR选项 .....................................................................................................166
(2) 已指定 -ZR选项 .....................................................................................................167
10.2 头文件 .........................................................................................................................171
(1) ctype.h.................................................................................................................172
(2) setjmp.h...............................................................................................................173
(3) stdarg.h (仅正常模式) ......................................................................................174
(4) stdio.h..................................................................................................................174
(5) stdlib.h .................................................................................................................175
(6) string.h.................................................................................................................177
(7) error.h..................................................................................................................178
(8) errno.h .................................................................................................................178
(9) limits.h..................................................................................................................178
(10) stddef.h ................................................................................................................180
(11) math.h (仅正常模式) ........................................................................................181
(12) float.h...................................................................................................................183
(13) assert.h (仅正常模式) ......................................................................................185
10.3 可重入性( re-entrantability)(仅适用于正常模式) ...............................................185
(1) 不能重入不可重入的函数 .....................................................................................185
(2) 下列函数所使用的区域在启动例程中得到被特意保留保证的区域 .........................185
(3) 处理浮点数的函数 ................................................................................................185
10.4 标准库函数 ..................................................................................................................186
10.5 更新启动例程及库函数的批处理文件 ..........................................................................296
10.5.1 使用批处理文件....................................................................................................297
用户手册 U14872CA1V0UM 14
第 11 章 扩展功能 .........................................................................................................300
11.1 宏名称 ........................................................................................................................301
11.2 关键字 ........................................................................................................................302
(1 ) 函数..................................................................................................................... 302
(2 ) 变量..................................................................................................................... 303
11.3 存储器 ........................................................................................................................304
(1 ) 存储模式.............................................................................................................. 304
(2 ) 寄存器组.............................................................................................................. 304
(3 ) 存储空间.............................................................................................................. 304
11.4 #pragma指令 .............................................................................................................306
11.5 如何使用扩展功能 ......................................................................................................308
(1) callt 函数 ............................................................................................................. 309
(2) 寄存器变量 .......................................................................................................... 312
(3) 如何使用 saddr区 saddr区域 ................................................................................. 316
(4) 如何使用 sfr区 sfr区域 ........................................................................................... 323
(5) noauto函数 .......................................................................................................... 326
(6) norec 函数 ........................................................................................................... 330
(7) bit型变量 .............................................................................................................. 335
(8) ASM 语句 ........................................................................................................... 339
(9) 中断函数 .............................................................................................................. 342
(10) 中断函数修饰词( _ _ interrupt) ......................................................................... 349
(11) 中断函数 .............................................................................................................. 351
(12) CPU控制指令 ...................................................................................................... 354
(13) 绝对地址访问函数 ............................................................................................... 356
(14) 位字段位域声明 .................................................................................................. 360
(15) 改变编译器输出区域块区段名称 ......................................................................... 368
(16) 二进制常量 ......................................................................................................... 379
(17) 模块名称改变函数 .............................................................................................. 381
(18) 循环移位函数 ...................................................................................................... 382
(19) 乘法函数 ............................................................................................................. 385
(20) 除法函数 ............................................................................................................. 387
(21) BCD 运算函数 .................................................................................................... 390
(22) 数据插入函数 ...................................................................................................... 394
(23) 静态模式 ............................................................................................................. 396
(24) 类型修改类型调整 .............................................................................................. 400
(25) Pascal 函数 ........................................................................................................ 402
(26) 函数调用接口的自动 pascal功能化 ....................................................................... 405
(27) 参数 /返回值的 int展开限制方法 ............................................................................ 406
(28) 数组偏移量计算简化方法 .................................................................................... 409
(29) 寄存器直接引用函数 ............................................................................................ 411
(30) 内存运算函数 ...................................................................................................... 415
(31) 绝对地址分配规范 .............................................................................................. 418
用户手册 U14872CA1V0UM 15
(32) 静态模式展开规范 ...............................................................................................422
(33) 临时变量 .............................................................................................................432
(34) 支持开端 /结尾序言 /结尾的库 ................................................................................435
11.6 C源代码的修改 ............................................................................................................444
11.7 函数调用接口 ..............................................................................................................445
11.7.1 返回值 ..................................................................................................................446
11.7.2 常用函数普通函数调用接口 ..................................................................................447
(1 ) 传输参数 ..............................................................................................................447
(2 ) 存储参数存储的位置和顺序..................................................................................448
(3 ) 存储自变量自动变量的位置和顺序 .......................................................................449
11.7.3 noauto 函数调用接口(仅在正常模式可用)........................................................454
(1 ) 传输递参数...........................................................................................................454
(2 ) 存储参数的位置和顺序.........................................................................................454
(3 ) 存储自变量自动变量的位置和顺序 .......................................................................455
11.7.4 norec 函数调用接口(正常模式).........................................................................457
(1 ) 传输参数 ..............................................................................................................457
(2 ) 存储参数的位置和顺序.........................................................................................457
(3 ) 存储自变量自动变量的位置和顺序 .......................................................................458
11.7.5 静态模式函数调用接口 .........................................................................................460
(1 ) 传输参数 ..............................................................................................................460
(2 ) 存储参数的位置和顺序.........................................................................................460
(3 ) 存储自变量自动变量的位置和顺序 .......................................................................461
11.7.6 Pascal 函数调用接口 ...........................................................................................465
第 12 章 汇编程序的引用.............................................................................................469
12.1 访问参数/自动变量 ......................................................................................................470
12.1.1 普通模块普通模式 ................................................................................................470
12.1.2 静态模块静态模式 ................................................................................................473
12.2 返回值的存储 ..............................................................................................................475
12.3 在 C语言程序中调用汇编语言程序 ...............................................................................476
12.4 由汇编语言程序调用 C语言程序 ...................................................................................480
(1 ) 由汇编语言程序调用C 语言函数............................................................................480
(2 ) 引用在C 语言函数中引用的参数............................................................................481
12.5 引用其它语言定义的变量 ............................................................................................482
(1 ) 引用C 语言定义的变量 ..........................................................................................482
(2 ) 由C 语言程序引用汇编语言定义的变量 .................................................................483
12.6 注意事项 .....................................................................................................................484
(1 ) ‘_’ ( (下划线))....................................................................................................484
(2 ) 参数在堆栈中的位置.............................................................................................484
第 13 章 编译器的有效应用 ......................................................................................... 485
13.1 有效编码 .....................................................................................................................485
(1 ) 使用外部变量 .......................................................................................................486
用户手册 U14872CA1V0UM 16
(2 ) 1 位型数据........................................................................................................... 486
(3 ) 函数的定义 .......................................................................................................... 486
(4 ) 最优化选项 .......................................................................................................... 487
(5 ) 使用外部扩展描述 ............................................................................................... 487
附录A 用于saddr 区域的标号标签列表 .........................................................................489
A.1 普通模块正常模式 ......................................................................................................489
A.2 静态模块模式 ..............................................................................................................491
附录 B 段名列表 ............................................................................................................492
<1> CSEG 再定位重定位段属性 ................................................................................. 492
<2> DSEG 再定位重定位属性 .................................................................................... 492
B.1 段名列表 .....................................................................................................................493
B.2 段定位 ........................................................................................................................ 493
B.3 C 源程序示例 ..............................................................................................................494
B.4 输出汇编模块示例 ...................................................................................................... 495
附录C 运行时库运行时刻库列表 ...................................................................................499
附录D 堆栈耗用空间列表..............................................................................................505
附录E 索引 ...................................................................................................................514
用户手册 U14872CA1V0UM 17
插图列表
插图编号 插图标题 ....................................................................................................................页码
图 1-1 编译流程 .....................................................................................................................................................22
图 1-2 使用该C 编译器进行程序开发的过程 ............................................................................................................24
图 4-1 通常算术类型转换.......................................................................................................................................73
图 6-1 选择语句的控制流程 .................................................................................................................................119
图 6-2 迭代语句的控制流程 .................................................................................................................................122
图 6-3 分支语句的控制流程 .................................................................................................................................126
图 10-1 函数被调用时的栈区(未指定-ZR ) .......................................................................................................167
图 10-2 格式命令的语法 ......................................................................................................................................198
图 10-3 输入格式命令的语法 ...............................................................................................................................202
图 11-1. 通过位字段位域声明的位分配(示例 1 ) ..............................................................................................362
图 11-2. 通过位字段位域声明进行位分配(示例 2 )...........................................................................................363
图 11-3. 通过位字段位域声明分配位(示例 3 ) ..................................................................................................365
图 12-1. 调用后的堆栈区 .....................................................................................................................................476
图 12-2. 返回后的堆栈区 .....................................................................................................................................479
图 12-3. 参数入栈................................................................................................................................................480
图 12-4. 传递参数至C 语言程序 ..........................................................................................................................481
图 12-5. 参数在堆栈中的位置..............................................................................................................................484
用户手册 U14872CA1V0UM 18
表格列表
表格编号 表格标题.....................................................................................................................页码
表 1-1 该C 编译器的性能指标最大值(1/2 ) .........................................................................................................28
表 1-1 使用该C 编译器的最低性能指标(2/2 ) .......................................................................................................29
表 2-1 转义字符序列列表 ......................................................................................................................................36
表 2-2 三字符序列列表 ..........................................................................................................................................36
表 2-3 基本数据类型列表 ......................................................................................................................................44
表 2-4 指数关系.....................................................................................................................................................45
表 2-5 运算异常列表..............................................................................................................................................46
表 4-1 类型转换列表..............................................................................................................................................71
表 4-2 从带符号有符号整型向无符号整型之间的转换............................................................................................72
表 5-1 运算符计算优先级 ......................................................................................................................................77
表 5-2 除号/ 求余运算结果符号 ..............................................................................................................................90
表 5-3 移位运算.....................................................................................................................................................93
表 5-4 按位与运算符 ...........................................................................................................................................100
表 5-5 按位异或运算符........................................................................................................................................101
表 5-6 按位或运算符 ...........................................................................................................................................102
表 5-7 逻辑与运算符 ...........................................................................................................................................104
表 5-8 逻辑或运算符 ...........................................................................................................................................105
表 10-1 第一参数传递列表(正常模式) .............................................................................................................164
表 10-2 参数传递列表(静态模式) ....................................................................................................................165
表 10-3 返回值存储列表 ......................................................................................................................................165
表 10-4 ctype.h 的内容 .........................................................................................................................................172
表 10-5 setjmp.h 的内容 .......................................................................................................................................173
表 10-6 stdarg.h 的内容 .......................................................................................................................................174
表 10-7 stdio.h 的内容 ..........................................................................................................................................174
表 10-8 stdlib.h 的内容 .........................................................................................................................................175
表 10-9 string.h 的内容.........................................................................................................................................177
表 10-10 math.h 的内容 (1/2) ...............................................................................................................................181
表 10-10 math.h 的内容 (2/2) ...............................................................................................................................182
表 10-11 assert.h 的内容 ......................................................................................................................................185
表 10-12 更新库函数的批处理文件 ......................................................................................................................296
表 11-1. 添加的关键字列表 ..................................................................................................................................302
表 11-2. 存储空间的利用 ......................................................................................................................................305
表 11-3. #pragma 指令列表 ...................................................................................................................................307
表 11-4. 指定-QL 选项时可以使用的callt 属性函数的数量 ....................................................................................310
表 11-5. callt 函数用途用法的限制........................................................................................................................310
表 11-6. 使用寄存器变量使用方法的限制 .............................................................................................................313
表 11-7. 使用sreg 变量使用方法的限制 ................................................................................................................317
表 11-8. 通过-RD 选项分配到saddr 区saddr 区域的变量 .......................................................................................319
表 11-9. 通过-RS 选项分配到saddr 区saddr 区域的变量........................................................................................320
表 11-10. 通过-RK 选项分配到saddr 区saddr 区域的变量......................................................................................321
表 11-11. 仅使用常数 0 或 1 的运算符号操作符(通过Bit 型变量)......................................................................336
表 11-12. 当使用中断函数时保存/ 恢复区..............................................................................................................343
表 11-13. 类型修改类型调整的详细信息(从int 和short 型改为char 型) ..............................................................400
表 11-14. 类型修改类型调整的详细内容(从long 型改为int 型) ...........................................................................401
表 11-15. 保存所针对的中断函数 存储目标 .........................................................................................................422
用户手册 U14872CA1V0UM 19
表 11-16. 存储返回值的位置 ................................................................................................................................446
表 11-17. 其中第一个参数传输入的位置(函数调用端方) .................................................................................447
表 11-18. 静态模式下传输参数的区 .....................................................................................................................460
表 12-1. 参数传递 ((函数调用方))....................................................................................................................470
表 12-2. 参数/自动变量的存储 ((被调用函数内)) .............................................................................................471
表 12-3. 参数传递 ((函数调用方))....................................................................................................................473
表 12-4. 参数/自动变量存储 ((被调用函数内)).................................................................................................473
表 12-5. 返回值存储单元存储位置.......................................................................................................................475
表 C-1. 运行时库运行时刻库列表 (1/6)................................................................................................................499
表 C-1. 运行时库运行时刻库列表 (2/6)................................................................................................................500
表 C-1. 运行时库运行时刻库列表 (3/6)................................................................................................................501
表 C-1. 运行时库运行时刻库列表 (4/6)................................................................................................................502
表 C-1. 运行时库运行时刻库列表 (5/6)................................................................................................................503
表 C-1. 运行时库运行时刻库列表 (6/6)................................................................................................................504
表 D-1. 标准库堆栈耗用列表 (1/4) .......................................................................................................................505
表 D-1. 标准库堆栈耗用空间列表 (2/4)................................................................................................................506
表 D-1. 标准库堆栈耗用空间列表 (3/4)................................................................................................................507
表 D-1. 标准库堆栈耗用空间列表 (4/4)................................................................................................................508
表 D-2. 运行时库运行时刻库堆栈耗用空间列表(1/5)............................................................................................509
表 D-2. 运行时库运行时刻库堆栈耗用空间列表(2/5)............................................................................................510
表 D-2. 运行时库运行时刻库堆栈耗用空间列表(3/5)............................................................................................511
表 D-2. 运行时库运行时刻库堆栈耗用空间列表(4/5)............................................................................................512
表 D-2. 运行时库运行时刻库堆栈耗用空间列表(5/5)............................................................................................513
用户手册 U14872CA1V0UM 20
第 1 章 概述
CC78K0S 系列 C 编译器是一款语言处理程序,不论编写的 C 语言源程序符合 78K/0S 系列规范或是符合 ANSI-C 规
范,CC78K0S 系列 C 编译器都会将 C 语言转换为机器语言。使用 CC78K0S 系列 C 编译器还将获得适用于 78K/0S 系
列单片机的目标文件或汇编源文件。
1.1 C 语言与汇编语言
为了让微控制器按照用户的安排来完成工作,程序和数据是必不可少的。程序和数据必须由人(程序员)来编写,并
存储在微控制器的存储器区。微处理器能够处理的程序和数据,只不过是被称为机器语言的二进制数组合而已。
汇编语言是一种符号语言,其特征是符号(助记符)语句与机器语言指令一一对应。正是由于这种一一对应,汇编语
言才能够为计算机提供详细的指令(例如,为了提升 I/O 处理速度)。但是,这意味着程序员必须对计算机的每一步操
作都给出具体指令。正是由于这种原因,程序的逻辑结构比较复杂,一般都比较晦涩难懂,而且程序员在编写代码时也
容易出错。
所以,人们开发了高级语言来代替这种汇编语言。C 语言是高级语言的其中一种,它使得程序员在编程时无需考虑计
算机的体系结构。
与汇编语言程序相比,可以认为 C 语言编写开发的程序逻辑结构更加易于理解。
C 语言具有丰富的调用函数,可用来开发程序。换句话说,程序员可以使用这些函数来编写程序。
C 语言的特点是便于人们理解。但是, C 语言编写的程序无法被微处理器直接理解。所以,要使计算机理解 C 语言
程序,需要另外一个软件程序将 C 语言语句翻译成对应的机器语言指令。把 C 语言翻译成机器语言的程序被称为 C 编
译器。
C 编译器的输入是 C 源程序模块,并产生目标模块或汇编语言源程序模块作为输出文件。因此,如果程序员希望能
够指定计算机的程序执行具体过程,可以对 C 源程序生成的汇编语言源程序进行修改。C 编译器的转换流程如图 1-1 所
示。
用户手册 U14872CA1V0UM 21
第 1 章 概述
图 1-1 编译流程
用户手册 U14872CA1V0UM 22
第 1 章 概述
1.2 使用 C 编译器的程序开发过程
使用 C 编译器进行产品(程序)开发,需要连接器来组织编译器生成的目标模块文件,需要库管理程序来创建库文
件,需要调试器来查找并纠正每个 C 源程序中的 bug (错误或失误)。
和该 C 编译器有关的软件如下。
• 编辑器 .........................................用于创建源程序模块文件
• RA78K0S 汇编程序包
汇编器 .........................................用于将汇编语言转换为机器语言
连接器 .........................................用于连接目标模块文件
以确定为重定位代码段分配的地址
目标转换器 ..................................用于转换生成十六进制格式的目标模块文件
库管理程序 ..................................用于创建库文件
• 调试器(用于 78K/0S) ..............用于调试 C 源程序模块文件
使用 C 编译器进行程序开发的步骤如下。
<1> 将程序划分成若干个功能块。
<2> 创建每个功能块对应的 C 源程序模块。
<3> 对每个 C 源程序模块进行转换。
<4> 将常用的模块注册到库中。
<5> 连接相应的目标模块文件
<6> 对每个模块进行调试。
<7> 将目标模块转换成十六进制格式的目标文件。
如上所述,该 C 编译器对 C 源程序模块进行翻译(编译),生成目标模块文件或汇编语言源程序模块文件。对生成
的汇编语言源程序模块文件进行手工优化,并将其嵌入到 C 源程序中,可以产生效率更高的目标模块。这种处理方法对
于必须执行高速处理,或模块必须非常紧凑的情况很有用。
用户手册 U14872CA1V0UM 23
第 1 章 概述
图 1-2 使用该 C 编译器进行程序开发的过程
C ⑤ᑣ
㒧ᵘ࣪∛㓪
⑤ᑣ
༈᭛ӊ
∛㓪⑤ᑣ
∛㓪߫㸼
߫㸼䕀ᤶ఼
㒧ᵘ࣪∛㓪఼
∛㓪఼
䖲఼
ഫ䕀ᤶ఼
C 㓪䆥఼
∛㓪ᑣ
MX78K0S
Ⳃഫ᭛ӊ ᑧ᭛ӊ
ᑧㅵ⧚ᑣ
ᑧ᭛ӊ
㺙䕑ഫ᭛ӊ
㋏㒳
ᢳ఼
䲚៤࣪⹀ӊ䇗䆩఼
㒱ᇍ∛㓪
߫㸼
Hex Ḑᓣ
Ⳃ
PROM 㓪఼
用户手册 U14872CA1V0UM 24
RS-232C
IN CIRCUIT EMULATOR
POWER
ϧ⫼ᑊ㸠ষ
㒓ӓⳳ఼
第 1 章 概述
1.3 C 源程序的基本结构
1.3.1 程序格式
C 程序是函数的集合。这些函数必须创建,因为每一个都有独立的特殊用途或者特征动作。所有 C 语言程序都必须
有一个 main 函数,main 函数是 C 语言中的入口主程序,并且是程序开始执行时被调用的第一个函数。
每个函数由两部分组成,一部分是函数头部用于定义函数名称和参数,另一部分是函数体包括声明和语句。C 程序的
格式如下所示。
变量/ 常量的定义
main (参数)
{
语句 1;
语句 2;
函数 1 (参数 );
函数 2 (参数 );
}
函数 1 (参数 )
{
语句 1;
语句 2;
}
函数 2 (变量 )
{
语句 1;
语句 2;
}
定义每个数据、变量和宏指令
main 函数的首部
main 函数体
函数 1
函数 2
用户手册 U14872CA1V0UM 25
第 1 章 概述
一个实际的 C 源程序示例。
#define TRUE 1
#define FALSE 0
#define xxx xxx .............................预处理程序指令(定义宏) <6>
#define SIZE 200
void printf(char *,int);
xxx xxxx (xxx, xxx) ...........................................函数原型声明符 <7>
void putchar(char);
char mark[SIZE+1];
main()
char xxx .....................类型声明符 <1> 外部定义 <5>
xx [xx].............................................................................操作符 <2>
{
int i,prime,k,count;
int xxx .....................................................................类型声明符 <1>
count=0;
xx = xx............................................................................ 操作符 <2>
for(i=0;i<=SIZE;i++)
for (xx;xx;xx) xxx ; ...................................................... 控制结构 <3>
mark[i]=TRUE;
for(i=0;i<=SIZE;i++){
if(mark[i]){
prime=i+i+3;
printf("%6d",prime);
xxx = xxx + xxx + xxx .................................................. 操作符 <2>
xxx (xxx) ; .................................................................... 操作符 <2>
count++;
if((count%8)==0) putchar('\n');
if (xxx) xxx ; ................................... 控制结构 <3>
for(k=i+prime;k<=SIZE;k+=prime)
mark[k]=FALSE;
}
}
printf("\n%d primes found.",count);
xxx (xxx) ;........................................... 操作符 <2>
}
void printf(char *s,int i)
{
int j;
char *ss;
j=i;
ss=s;
}
void putchar(char c)
{
char d;
d=c;
}
用户手册 U14872CA1V0UM 26
第 1 章 概述
<1> 类型与存储类的声明
标识符的数据类型与存储类表明声明了对应的数据目标。具体细节敬请参阅第 3 章 类型与存储类的声明 。
<2> 操作符与表达式
它们是指示编译器运算的语句,比如算术运算、逻辑运算或赋值运算。具体细节敬请参阅第 5 章 运算符与表达
式 。
<3> 控制结构
这是语句用来规定程序流程。 C 语言有多个指令用于控制结构,如条件控制、迭代和分支跳转。具体细节敬请
参阅 第 6 章 C 语言的控制结构 。
<4> 结构体或共用体
声明一个结构体或共用体。结构体是包括多个不同类型子目标或成员的数据目标。当两个或多个变量共用相同
的内存时,可以定义为一个共用体。具体细节敬请参阅 第 7 章 结构体与共用体 。
<5> 外部定义
声明一个函数或外部目标。当 C 语言源程序被划分为多个独立的特殊用途或特征动作时,函数就是一个元素,
C 源程序就是这些函数的集合。 具体细节敬请参阅第 8 章 外部定义 。
<6> 预处理指令
这是编译器专有的的指令。当源程序中出现对应参数时,#define 指令通知编译器将与第一个操作数相同的参
数替换为第二个操作数。具体细节敬请参阅 第 9 章 预处理指令(编译器指令) 。
<7> 函数原型声明
声明一个函数的返回值和参数类型。
用户手册 U14872CA1V0UM 27
第 1 章 概述
1.4 程序开发前的提示
在进行程序开发工作之前,请牢记在以下表 1-1 中总结的要点(限制值或最大保证值)。
表 1-1 该 C 编译器的性能指标最大值(1/2 )
编号 项目
复合语句、循环语句或条件控制语句的嵌套层数 45 层
1
条件转移的嵌套层数 255 层
2
在一个声明语句中,算术类型、结构体类型、仅用于共用体类型或不完
3
全类型的指针、数组和函数(或这些项的任意组合)声明符 的数量
每个表达式中的括号嵌套层数 32 层
4
用作宏名称的字符数量 256 字符
5
用作内部或外部符号名称的字符数量 249 字符
6
每个源程序模块文件的符号数量
7
一个块中具有块作用域的符号的数量(块的嵌套层数)
8
每个源程序模块文件的宏的数量
9
每个函数定义或函数调用中的参数数量 39 个参数
10
每个宏定义或宏调用中的参数数量 31 个参数
11
每个源代码逻辑行的字符数量 2048 字符
12
连接后一个字符串内的字符数量 509 字符
13
一个数据目标的大小 65535 字节
14
# include 指令的嵌套层数 8 层
15
每个 switch 语句中 case 标签数量 257 个标签
16
每个转换单元的源代码行数 大约 30000 行
17
无需创建临时文件就能完成翻译的源代码行数 大约 300 行
18
函数调用的嵌套层数 40 层
19
每个函数中的标签数量 33 个标签
20
注 1. 当符号可以使用现有的内存空间进行处理而不需要使用任何临时文件时,以上的各项数值为最大值。当由于
内存空间不足而使用临时文件时,必须根据文件大小对该值进行更改。
2. 该值包括 C 编译器保留的宏定义。
限制值/ 最大保证值
12
1024 个符号
255 个符号
10000 个宏
注
注
注
1
1
2
用户手册 U14872CA1V0UM 28
第 1 章 概述
表 1-1 使用该 C 编译器的最低性能指标(2/2 )
编号 项目
每个目标模块的代码、数据及栈段的总大小 65535 字节
21
每个结构体或共用体的成员数量 256 个成员
22
每个枚举类型中 enum 常量的数量 255 个常量
23
一个结构体或共用体中包含结构体或共用体的嵌套层数 15 层
24
初始化时元素的嵌套层数 15 层
25
每个源程序模块文件中定义的函数数量
26
一个完整的声明符中,括号内的声明符嵌套层数
27
宏的嵌套层数
28
-I 选项指定包含文件的路径数量
29
限制值 /最低保证值
1,000
591
200
64
用户手册 U14872CA1V0UM 29