标签:option 多个 alt type line 使用 public copyright set
本使用手册版权为盛群半导体股份有限公司所有, 非经盛群半导体股份有限公司书面授权同意, 不得透过任何形
式复制、 储存或传输。
C COMPILER 使用手册
March 27, 2012
| Rev 1.10 | i | March 27, 2012 |
目录
目录
数据类型.................................................................................................... 1
数组........................................................................................................... 1
标识符保留字............................................................................................. 1
运算符 ....................................................................................................... 2
前置处理指令............................................................................................. 3
预处理指令 #pragma................................................................................. 3
const 变量功能 .......................................................................................... 4
预定义的头档............................................................................................. 4
main 函数 .................................................................................................. 4
中断函数.................................................................................................... 5
内建函数.................................................................................................... 5
其它的功能 ................................................................................................ 6
| Rev 1.10 | 1 | March 27, 2012 |
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
| 撰写这份档依据 | |
| HOLTEK C 的版本 | Holtek (R) Cross C Compiler Version V2.04 MRSC |
| HOLTEK Enhance C 的版本 | Holtek (R) Cross C Compiler Version V2.40 E-MRSC (2010/1/20) |
【注】 : 下列表格中的“Y”代表有, “N 表没有。
数据类型
| Data type | Size (bit) HOLTEK C |
Size (bits) HOLTEK Enhance C |
Size(bits) ANSI C |
| bit | 1 | 1 | N |
| char | 8 | 8 | 8 |
| signed char | 8 | 8 | 8 |
| unsigned char | 8 | 8 | 8 |
| short | 8 | 16 | 16 |
| unsigned short | 8 | 16 | 16 |
| int | 8 | 16 | 16 |
| unsigned int | 8 | 16 | 16 |
| long | 16 | 32 | 32 |
| unsigned long | 16 | 32 | 32 |
| float | N | 32 | 32 |
| double | N | 32 | 64 |
| long double | N | N | 128 |
float/double 皆使用 IEEE754 32 位格式
bit 型态不可用于指标 (pointer) 的数据型态, 不可定义为 const。 为局域时, 占用一个 byte(但
只有一个 bit 有效) , 为全域时, 占用一个 bit。
数组
| 维数 | HOLTEK C ( 最大数组长度 ) |
HOLTEK Enhance C ( 最大数组长度 ) |
ANSI C ( 最大数组长度 ) |
| 一维数组 | 256 | 跟空间有关① | 不限制 |
| 二维数组 | N | 跟空间有关① | 不限制 |
| 三或三以上的多维数组 | N | N | 不限制 |
| 指针数组 | N | 跟空间有关① | 不限制 |
| 函数数组 | N | 功能限制 | 不限制 |
| 字符串数组 | 不支持 | 不支持 | 不限制 |
【注】 : ①若長度大於 1 page, 則有功能限制, 功能限制是指使用時編譯通過, 但可能會有 bug, 使用
時要小心。
标识符保留字
| 保留字 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| auto | ● | ● | ● |
| break | ● | ● | ● |
| bit | ● | ● | |
| case | ● | ● | ● |
| char | ● | ● | ● |
| const | ● | ● | ● |
| constant | ● | ||
| continue | ● | ● | ● |
| default | ● | ● | ● |
Rev 1.10 2 March 27, 2012
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
| 保留字 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| do | ● | ● | ● |
| double | ● | ● | |
| else | ● | ● | ● |
| enum | ● | ● | ● |
| extern | ● | ● | ● |
| float | ● | ● | |
| for | ● | ● | ● |
| goto | ● | ● | ● |
| if | ● | ● | ● |
| int | ● | ● | ● |
| long | ● | ● | ● |
| register | ● | ● | |
| return | ● | ● | ● |
| short | ● | ● | ● |
| signed | ● | ● | ● |
| sizeof | ● | ● | ● |
| static | ● | ● | ● |
| struct | ● | ● | ● |
| switch | ● | ● | ● |
| typedef | ● | ● | ● |
| union | ● | ● | ● |
| unsigned | ● | ● | ● |
| void | ● | ● | ● |
| volatile | ● | ● | ● |
| while | ● | ● | ● |
运算符
| 运算符 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| 算术运算符 (+,-,*,/,%) | ● | ● | ● |
| 关系运算符 (>,<,==,>=,<=,!=) | ● | ● | ● |
| 逻辑运算符 (!,&&,||) | ● | ● | ● |
| 位运算符 (<<,>>,~,|,^,&) | ● | ● | ● |
| 赋值运算符 (=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=) |
● | ● | ● |
| 条件运算符(? :) | ● | ● | ● |
| 逗号运算符(,) | ● | ● | ● |
| 指针运算符(* 和 &) | ● | ● | ● |
| 求字节数运算符(sizeof) | ● | ● | ● |
| 强制类型转换运算符 (( 类型 )) | ● | ● | ● |
| 分量运算符(. ->) | ● | ● | ● |
| 下标运算符([ ]) | ● | ● | ● |
| 函数调用运算符(( )) | ● | ● | ● |
| 自增运算符(++) | ● | ● | ● |
| 自减运算符(--) | ● | ● | ● |
| 负号运算符(-) | ● | ● | ● |
| 正号运算符(+) | ● | ● | ● |
| 指定 RAM 变量地址运算符(@) | ● | ● |
Rev 1.10 3 March 27, 2012
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
前置处理指令
| 前置处理指令 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| #asm | Y | Y | N |
| #define | Y | Y | Y |
| #elif | Y | Y | Y |
| #else | Y | Y | Y |
| #endif | Y | Y | Y |
| #error ① | Y | Y | N |
| #if | Y | Y | Y |
| #ifdef | Y | Y | Y |
| #ifndef | Y | Y | Y |
| #include | Y | Y | Y |
| #pragma | Y | Y | N |
| #undef | Y | Y | Y |
【注】 : ①产出错误信息: #error Size too big
预处理指令 #pragma
格式:
#pragma keyword [option]
某些 keyword 会有 options。
| Keyword | HOLTEK C | HOLTEK Enhance C | ANSI C |
| bp_free | ● | ||
| bp_nofree | ● | ||
| function | ● | ||
| nobp | ● | ||
| nolocal | ● | ||
| nomp0 | ● | ||
| nomp1 | ● | ||
| rambank0 norambank |
● | ● | |
| rombank0 norombank |
● | ||
| rombank | ● | ||
| vector | ● | ● | |
| novectornest | ● | ||
| inline |
Rev 1.10 4 March 27, 2012
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
const 变量功能
| const 变量功能 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| 适用的数据类型 | 除 bit | 除 bit | any |
| 属性 | private | private | public/private/internal |
| 直接被其它文件使用 | N | N | Y( 引用时, 在 const 前加修饰词 extern) |
| 必须宣告为全局型 | Y | N | N |
| 宣告时要设定初始值 | Y | Y | Y |
| 数组常量要指定数组的大小 | Y | Y | Y |
| 取址操作数① | N | N | Y |
【注】 : ①比如, 不能写:
const char a = 5;
void main()
{
char *b = &a;
}
但可以写:
const char a[1] = {5};
void main()
{
char *b = &a;
}
对于 enhanced c, 若要将 int 或 unsigned int 变量设定为常量时, 建议使用 constant 而不是 const,
这样会使程序更高效。
预定义的头档
| 预定义的头档 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| HTxxxxxx.h | Y | Y | N |
| assert.h | N | N | Y |
| ctype.h | N | N | Y |
| errno.h | N | N | Y |
| float.h | N | N | Y |
| limits.h | N | N | Y |
| locale.h | N | N | Y |
| math.h | N | N | Y |
| setjmp.h | N | N | Y |
| signal.h | N | N | Y |
| stdarg.h | N | N | Y |
| stddef.h | N | N | Y |
| stdio.h | N | N | Y |
| stdlib.h | N | N | Y |
| string.h | N | N | Y |
| time.h | N | N | Y |
main 函数
| main 函数的规定 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| 个数(个) | 1 | 1 | 1 |
| 返回数据类型 | void | void | int |
| 参数(个) | 无 | 无 | 2(一个指针数组) |
Rev 1.10 5 March 27, 2012
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
中断函数
| 中断函数的规定 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| 设定中断向量值 | Y | Y | 没有中断函数 |
| 个数(个) | 可多个 | 可多个 | |
| 返回数据类型 | void | void | |
| 参数 | 无 | 无 | |
| 重复进入中断 | N | Y ① | |
| 在程序中调用中断 | N | N | |
| 中断调用汇编函数 | Y | Y | |
| 中断调用 C 函数 | N | Y ② |
【注】 : ①虽然不同的中断事件可以重迭发生, 但是同一个中断事件不可以重迭产生, 必须等候前一个
发生被处理完成后, 才能认可下一个中断事件。 针对不具有中断可重迭(nested) 发生的微控
制器, 则在中断服务函式内不可开启中断功能。
②必须将被调用的函数定义成 #pragma nolocal。 否则会造成 ram 空间重用, 一般不推荐使用。
内建函数
| 函数 | HOLTEK C ( 参数类型 ) | HOLTEK Enhance C (参数类型) | ANSI C |
| _clrwdt() | Y | Y | N |
| _clrwdt1() | Y | Y | N |
| _clrwdt2() | Y | Y | N |
| _halt() | Y | Y | N |
| _nop() | Y | Y | N |
| _rr(int8 *) | Y(int *) | Y(char *) | N |
| _rrc(int8 *) | Y(int *) | Y(char *) | N |
| _lrr(int16 *) | Y(long *) | Y(int *) | N |
| _lrrc(int16 *) | Y (long*) | Y(int *) | N |
| _rl(int8 *) | Y(int *) | Y(char *) | N |
| _rlc(int8 *) | Y(int *) | Y(char *) | N |
| _lrl(int16 *) | Y(long *) | Y(int *) | N |
| _lrlc(int16 *) | Y(long *) | Y(int *) | N |
| _swap(int8 *) | Y(int *) | Y(char *) | N |
| _delay(unsigned long tick) | Y(tick<=65535) | Y(tick<= 263690) | N |
Rev 1.10 6 March 27, 2012
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
其它的功能
| 功能 | HOLTEK C | HOLTEK Enhance C | ANSI C |
| 内嵌式汇编语言 | Y | Y | N |
| 静态变量 | 不支持静态变量和静态函数 | 不支持静态变量和静态函数 | 支持局部的静态变量 |
| 常量 | 支持二进制常量 | 支持二进制常量 | 不支持二进制常量 |
| 结构体和共享体 | bit field 置放于 8 位的单位 内 , 不会横跨两个 8 位的单 位, 且不能定义超过 9 位的 bit field |
bit field 会置放于 8 位的单位内 , 不 会横跨两个 8 位的单位, 且不能定 义超过 9 位的 bit field |
最大可定义 32 位的 bit field |
| 函数 | 不支持递归函数 | 不支持递归函数 | 支持递归函数 |
| 指针 | 不能用于常量与位变量, 不 支持函数指针 |
不能用于常量与位变量, 若指向函 数, 则必须是全域的, 且所指函数不 能带有参数 |
不能用于常量(没有位变 量) |
| 初始值 | 全局变量宣告时不可以同时 设定初始值, 但是 const 常 量在宣告时一定要设定初始 值 |
全局变量宣告时不可以同时设定初 始值, 但是 const 常量在宣告时一定 要设定初始值 |
全局变量、 局部变量在宣 告时可以设定初始值, const 常量在宣告时一定 要设定初始值 |
| 堆栈 | 层数有限① | 层数有限① | 层数不受限制 |
【注】: ①每个 MCU 的层数有限, HOLTEK C/Enhance C 程序中断调用函数时, 要考虑占用的堆栈层数,
一些运算符或函数在调用时所占用的堆栈层数如下:
| 运算符 / 函数 | 堆栈层数 | 运算符 / 函数 | 堆栈层数 |
| main() | 0 | _rl(int */ char *); | 0 |
| _clrwdt() | 0 | _rlc(int *); | 0 |
| _clrwdt1() | 0 | _lrl(long */ int *); | 0 |
| _clrwdt2() | 0 | _lrlc(long *); | 0 |
| _halt() | 0 | _delay(unsigned long) | 1 |
| _nop() | 0 | * | 1 |
| _rr(int */ char *); | 0 | / | 1 |
| _rrc(int *); | 0 | % | 1 |
| _lrr(long */ int *); | 0 | Constant array | 1 |
| _lrrc(long *); | 0 | 整型与浮点型转换 | 1 |
Rev 1.10 7 March 27, 2012
Holtek C、 Holtek Enhance C 和 ANSI C 的比较
盛群半导体股份有限公司 ( 总公司 )
新竹市科学工业园区研新二路 3 号
电话 : 886-3-563-1999
传真 : 886-3-563-1189
网站 : www.holtek.com
盛群半导体股份有限公司 ( 台北业务处 )
台北市南港区园区街 3 之 2 号 4 楼之 2
电话 : 886-2-2655-7070
传真 : 886-2-2655-7373
传真 : 886-2-2655-7383 (International sales hotline)
盛扬半导体有限公司 ( 深圳业务处 )
深圳市深南山区高新中二道 5 号生产力大楼 A 单元 5 楼 518057
电话 : 86-755-8616-9908
传真 : 86-755-8616-9722
Holmate Semiconductor, Inc. ( 北美业务处 )
46712 Fremont Blvd., Fremont, CA 94538
电话 : 1-510-252-9880
传真 : 1-510-252-9885
网站 : www.holmate.com
Copyright? 2012 by HOLTEK SEMICONDUCTOR INC.
使用指南中所出现的信息在出版当时相信是正确的, 然而盛群对于说明书的使用不负任何责任。 文中提到的应用
目的仅仅是用来做说明, 盛群不保证或表示这些没有进一步修改的应用将是适当的, 也不推荐它的产品使用在会
由于故障或其它原因可能会对人身造成危害的应用。 盛群产品不授权使用于救生、 维生器件或系统中做为关键组
件。 盛群拥有不事先通知而修改产品的权利, 对于最新的信息, 请参考我们的网址 http://www.holtek.com
标签:option 多个 alt type line 使用 public copyright set
原文地址:http://www.cnblogs.com/yuandongtao1989/p/6844676.html