⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 functions.c

📁 freescaleHC12插值代码,8,16位无符号和有符号一维及二维插值
💻 C
📖 第 1 页 / 共 2 页
字号:
      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 + -