📄 functions.c
字号:
DES
PSHA
TBL 2,SP+
STAA VE
}
__asm{
LDAB colratio;
LDAA VE
PSHA
INS
LDAA VL
DES
PSHA
TBL 2,SP+
STAA VL
}
return VL;
}
/**************************************************************************
Function Name : INTER_Table_CHAR_2
Engineer : Jackie
Date : 2006-06-09
Description : 8bit有符号整型数二维插值
parameters : struct GROUP_INTER_CHAR2* array:结构参数用以描述参数属性.
un16Col_Coord:列坐标值
un16Row_Coord:行坐标值
Return : VL:函数返回值,8bit有符号整型插值结果
Warning :
**************************************************************************/
extern char INTER_Table_CHAR_2(struct GROUP_INTER_CHAR_2* array,unsigned int un16Col_Coord,unsigned int un16Row_Coord)
{
char VE,VB,VL;//VE:右基准点值;VB:左基准点值;VL:返回值
unsigned char row,col,rowratio,colratio,pos;//row:行坐标位置;col:列坐标位置;rowratio:行比例值;colratio:列比例值;
if(un16Row_Coord<array->rowmin)un16Row_Coord=array->rowmin;
if(un16Row_Coord>array->rowmax)un16Row_Coord=array->rowmax;
//行坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Row_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Row_Coord;
row=(unsigned char)((un16Row_Coord-array->rowmin)/array->rowTemp);
if(row>=array->TableRow)row=array->TableRow-1;
if(un16Col_Coord<array->colmin)un16Col_Coord=array->colmin;
if(un16Col_Coord>array->colmax)un16Col_Coord=array->colmax;
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
col=(unsigned char)((un16Col_Coord-array->colmin)/array->colTemp);
if(col>=array->TableCol)col=array->TableCol-1;
//行比例值计算
rowratio = (unsigned char)((((un16Row_Coord-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
//列比例值计算
colratio = (unsigned char)(((unsigned char)((un16Col_Coord-array->colmin)%array->colTemp)*256)/array->colTemp);
array->V=Table_CHAR_2;
pos=row*array->TableRow+col;
VB=array->V[pos];//左基准点值
VE=array->V[pos+1];//右基准点值
//通用ASM汇编插值函数
__asm{
LDAB rowratio;
LDAA VE
PSHA
INS
LDAA VB
DES
PSHA
TBL 2,SP+
STAA VL
}
pos+=array->TableRow;
VB=array->V[pos];
VE=array->V[pos+1];
__asm{
LDAB rowratio;
LDAA VE
PSHA
INS
LDAA VB
DES
PSHA
TBL 2,SP+
STAA VE
}
__asm{
LDAB colratio;
LDAA VE
PSHA
INS
LDAA VL
DES
PSHA
TBL 2,SP+
STAA VL
}
return VL;
}
/**************************************************************************
Function Name : INTER_Table_UINT1
Engineer : Jackie
Date : 2006-06-09
Description : 16bit无符号整型数一维插值
parameters : struct GROUP_INTER_UINT1* array:结构参数用以描述参数属性.
un16Col_Coord:列坐标值
Return : VL:函数返回值,16bit无符号整型插值结果
Warning :
**************************************************************************/
extern unsigned int INTER_Table_UINT1(struct GROUP_INTER_UINT1* array, unsigned int un16Coord_VALUE)
{
unsigned char pos,ratio;//ratio:比例值;pos:列坐标位置
unsigned int VE,VB,VL;//VE:右基准点值;VB:左基准点值;VL:16位无符号整形插值结果
if(un16Coord_VALUE>array->rowmax)un16Coord_VALUE=array->rowmax;
if(un16Coord_VALUE<array->rowmin)un16Coord_VALUE=array->rowmin;
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
pos=(unsigned char)((un16Coord_VALUE-array->rowmin)/array->rowTemp);
if(pos>=array->TableRow)pos=array->TableRow-1;
//比例计算
ratio=(unsigned char)((((un16Coord_VALUE-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
array->V=Table_UINT1;
VB=array->V[pos];
VE=array->V[pos+1];
//通用ASM汇编插值函数
__asm{
LDD VE
PSHD
INS
INS
LDD VB
DES
DES
PSHD
INS
INS
INS
INS
LDAB ratio
DES
DES
DES
DES
ETBL 4,SP+
STD VL
}
return VL;
}
/**************************************************************************
Function Name : INTER_Table_INT1
Engineer : Jackie
Date : 2006-06-09
Description : 16bit有符号整型数一维插值
parameters : struct GROUP_INTER_INT1* array:结构参数用以描述参数属性.
un16Col_Coord:列坐标值
Return : VL:函数返回值,16bit有符号整型插值结果
Warning :
**************************************************************************/
#if 1
extern int INTER_Table_INT1(struct GROUP_INTER_INT1* array, unsigned int un16Coord_VALUE)
{
unsigned char pos,ratio;//ratio:比例值;pos:列坐标位置
unsigned char VE,VB,VL;//VE:右基准点值;VB:左基准点值;VL:8位无符号整形插值结果
if(un16Coord_VALUE>array->rowmax)un16Coord_VALUE=array->rowmax;
if(un16Coord_VALUE<array->rowmin)un16Coord_VALUE=array->rowmin;
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
//坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:array->rowmax-un16Col_Coord;
pos=(unsigned char)((un16Coord_VALUE-array->rowmax)/array->rowTemp);
if(pos>=array->TableRow)pos=array->TableRow-1;
//比例计算
ratio=(unsigned char)((((un16Coord_VALUE-array->rowmin)%array->rowTemp)*256)/array->rowTemp);
array->V=Table_CHAR1;
VB=array->V[pos];
VE=array->V[pos+1];
//通用ASM汇编插值函数
__asm{
LDAB ratio;
LDAA VE
PSHA
INS
LDAA VB
DES
PSHA
TBL 2,SP+
STAA VL
}
return VL;
}
#else
extern int INTER_Table_INT1(struct GROUP_INTER_INT1* array, int un16Coord_VALUE)
{
static unsigned char pos; //ratio:比例值;pos:列坐标位置
static long int VE,VB; //VE:右基准点值;VB:左基准点值;VL:16位无符号整形插值结果
static int VL;
if(un16Coord_VALUE>array->rowmax)return VL=array->V[array->TableRow-1];
if(un16Coord_VALUE<array->rowmin)return VL=array->V[0];
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
pos=(unsigned char)((un16Coord_VALUE-array->rowmin)/array->rowTemp);
// if(pos>=array->TableRow)pos=array->TableRow-1;
array->V=Table_INT1;
VB=array->V[pos];
VE=array->V[pos+1];
// VB=-32000;
// VE=32000;
// un16Coord_VALUE=10;
// array->rowmin=0;
// array->rowTemp=15;
//VL =VE-VB;
VL=((((un16Coord_VALUE-array->rowmin)%array->rowTemp))*(VE-VB))/array->rowTemp+VB;
return VL;
}
#endif
/**************************************************************************
Function Name : INTER_Table_CHAR1
Engineer : Jackie Modify: Terry
Date : 2006-06-09 2006-06-16
Description : 8bit无符号数一维插值
parameters : struct GROUP_INTER_CHAR1* array:结构参数用以描述参数属性.
int un16Col_Coord:列坐标值
坐标由小到大排列
Return : VL:函数返回值,8bit无符号整型插值结果
Warning :
**************************************************************************/
unsigned char INTER_Table_UCHAR1(struct GROUP_INTER_UCHAR1* array, int un16Coord_VALUE)
{
unsigned char pos; //pos:列坐标位置
unsigned char VE,VB; //VE:右基准点值;VB:左基准点值;VL:8位无符号整形插值结果
unsigned char VL;
array->V=Table_UCHAR1;
if(un16Coord_VALUE>=array->rowmax) return VL=array->V[array->TableRow-1];
if(un16Coord_VALUE<=array->rowmin) return VL=array->V[0];
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
pos=((un16Coord_VALUE-array->rowmin)/array->rowTemp);
// if(pos>=array->TableRow)pos=array->TableRow-1;
VB=array->V[pos];
VE=array->V[pos+1];
VL=((unsigned char)((un16Coord_VALUE-array->rowmin)%array->rowTemp))*(VE-VB)/array->rowTemp+VB;
return VL;
}
/**************************************************************************
Function Name : INTER_Table_CHAR1
Engineer : Jackie Modify: Terry
Date : 2006-06-09 2006-06-16
Description : 8bit有符号数一维插值
parameters : struct GROUP_INTER_CHAR1* array:结构参数用以描述参数属性.
int un16Col_Coord:列坐标值
坐标由小到大排列
Return : VL:函数返回值,8bit有符号整型插值结果
Warning :
注意GROUP_INTER_CHAR1在初始化时的取值范围
**************************************************************************/
extern char INTER_Table_CHAR1(struct GROUP_INTER_CHAR1* array, int un16Coord_VALUE)
{
unsigned char pos; //pos:列坐标位置
char VE,VB; //VE:右基准点值;VB:左基准点值;VL:8位无符号整形插值结果
char VL;
array->V=Table_CHAR1;
if(un16Coord_VALUE>=array->rowmax) return VL=array->V[array->TableRow-1];
if(un16Coord_VALUE<=array->rowmin) return VL=array->V[0];
//列坐标位置计算:坐标参数从小到大排列时,由坐标基准值减去坐标参数最小值:un16Col_Coord-array->rowmin;
pos=((un16Coord_VALUE-array->rowmin)/array->rowTemp);
// if(pos>=array->TableRow)pos=array->TableRow-1;
VB=array->V[pos];
VE=array->V[pos+1];
VL=((char)((un16Coord_VALUE-array->rowmin)%array->rowTemp))*(VE-VB)/array->rowTemp+VB;
return VL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -