合泰内建函数

本使用手册版权为盛群半导体股份有限公司所有, 非经盛群半导体股份有限公司书面授权同意, 不得透过任何形
式复制、 储存或传输。
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 CHoltek 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 CHoltek 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 CHoltek 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 CHoltek 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 CHoltek 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 CHoltek 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 CHoltek 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

原文地址:https://www.cnblogs.com/yuandongtao1989/p/6844676.html