| 
									
										
										
										
											2023-10-06 18:47:05 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #include "utility.h"
 | 
					
						
							|  |  |  |  | float myatof(const char* str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	 | 
					
						
							|  |  |  |  | 	uint32_t int_nu = 0; | 
					
						
							|  |  |  |  | 	uint32_t flot_nu = 0; | 
					
						
							|  |  |  |  | 	float val; | 
					
						
							|  |  |  |  | 	float f_count = 1; | 
					
						
							|  |  |  |  | 	while((*str != 0) && (*str != '.')) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if(*str > '9' && *str < '0') | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			str++; | 
					
						
							|  |  |  |  | 			continue; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		int_nu = int_nu*10+(*str - 48); | 
					
						
							|  |  |  |  | 		str++; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	 | 
					
						
							|  |  |  |  | 	if(*str == 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		val = int_nu; | 
					
						
							|  |  |  |  | 		return val; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	str++; | 
					
						
							|  |  |  |  | 	while(*str != 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if(*str > '9' && *str < '0') | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			str++; | 
					
						
							|  |  |  |  | 			continue; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		flot_nu = flot_nu*10+(*str - 48); | 
					
						
							|  |  |  |  | 		f_count *= 10; | 
					
						
							|  |  |  |  | 		str++; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	val = flot_nu; | 
					
						
							|  |  |  |  | 	val = val / f_count + int_nu; | 
					
						
							|  |  |  |  | 	return val; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	string to uint16_t | 
					
						
							|  |  |  |  | *@param		str:src string, base: | 
					
						
							|  |  |  |  | *@return	num:convert result | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | uint16_t atoi16(const char* str,uint16_t base) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   unsigned int num = 0; | 
					
						
							|  |  |  |  |   while (*str !=0) | 
					
						
							|  |  |  |  |           num = num * base + c2d(*str++); | 
					
						
							|  |  |  |  |   return num; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	string to uint32 | 
					
						
							|  |  |  |  | *@param		str:src string, base: | 
					
						
							|  |  |  |  | *@return	num:convert result | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | uint32_t atoi32(const char* str,uint16_t base) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   uint32_t num = 0; | 
					
						
							|  |  |  |  |   while (*str !=0) | 
					
						
							|  |  |  |  |           num = num * base + c2d(*str++); | 
					
						
							|  |  |  |  |   return num; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	uint16 data to string | 
					
						
							|  |  |  |  | *@param		n:src num, str[5]:string buffer  len:string size | 
					
						
							|  |  |  |  | *@return	void | 
					
						
							|  |  |  |  | */ | 
					
						
							| 
									
										
										
										
											2023-11-01 23:51:19 +08:00
										 |  |  |  | void myitoa(int n,char *str, int len) | 
					
						
							| 
									
										
										
										
											2023-10-06 18:47:05 +08:00
										 |  |  |  | { | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |   uint8_t i=len-1; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   memset(str,0x20,len); | 
					
						
							|  |  |  |  |   do{ | 
					
						
							|  |  |  |  |   str[i--]=n%10+'0'; | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |  }while((n/=10)>0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |  return; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	dec or hex string convert to uint32_t | 
					
						
							|  |  |  |  | *@param		str:src string, ret: the pointer of result | 
					
						
							|  |  |  |  | *@return	success = 1, fail = 0 | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | int validatoi(const char* str, int base,uint32_t* ret) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   int c; | 
					
						
							|  |  |  |  |   const  char* tstr = str; | 
					
						
							|  |  |  |  |   if(str == 0 || *str == '\0')  | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |   	return 0; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |   while(*tstr != '\0') | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     c = c2d(*tstr); | 
					
						
							|  |  |  |  |     if( (c >= 0) && (c < base)) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		 tstr++; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |     else | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 	    return 0; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |   *ret = atoi32(str,base); | 
					
						
							|  |  |  |  |   return 1; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	 new char to replace the old char  | 
					
						
							|  |  |  |  | *@param		str:src string,oldchar:dst char,newchar:src char | 
					
						
							|  |  |  |  | *@return	void | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | void replacetochar(char * str,	char oldchar,char newchar) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   int x; | 
					
						
							|  |  |  |  |   for (x = 0; str[x]; x++)  | 
					
						
							|  |  |  |  |     if (str[x] == oldchar) str[x] = newchar;	 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	char to num | 
					
						
							|  |  |  |  | *@param		c:src char | 
					
						
							|  |  |  |  | *@return	convert result | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | char c2d(const uint8_t c) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if (c >= '0' && c <= '9') | 
					
						
							|  |  |  |  | 		return c - '0'; | 
					
						
							|  |  |  |  | 	if (c >= 'a' && c <= 'f') | 
					
						
							|  |  |  |  | 		return 10 + c -'a'; | 
					
						
							|  |  |  |  | 	if (c >= 'A' && c <= 'F') | 
					
						
							|  |  |  |  | 		return 10 + c -'A'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	return (char)0; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	num to char | 
					
						
							|  |  |  |  | *@param		c:src num | 
					
						
							|  |  |  |  | *@return	convert result | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | char d2c(const uint8_t c) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	if ( c <= 9) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return c + '0'; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	if (c >= 0x0a && c <= 0x0f) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		return c + 'a' - 10; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  |     return 0; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	2bytes swap  | 
					
						
							|  |  |  |  | *@param		i:src num | 
					
						
							|  |  |  |  | *@return	convert result | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | uint16_t swaps(uint16_t i) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   uint16_t ret=0; | 
					
						
							|  |  |  |  |   ret = (i & 0xFF) << 8; | 
					
						
							|  |  |  |  |   ret |= ((i >> 8)& 0xFF); | 
					
						
							|  |  |  |  |   return ret;	 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	4 bytes swap, bytes order 4 3 2 1 convert to 1 2 3 4 | 
					
						
							|  |  |  |  | *@param		i:src num | 
					
						
							|  |  |  |  | *@return	convert result | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | uint32_t swapl(uint32_t l) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   uint32_t ret=0; | 
					
						
							|  |  |  |  |   ret = (l & 0xFF) << 24; | 
					
						
							|  |  |  |  |   ret |= ((l >> 8) & 0xFF) << 16; | 
					
						
							|  |  |  |  |   ret |= ((l >> 16) & 0xFF) << 8; | 
					
						
							|  |  |  |  |   ret |= ((l >> 24) & 0xFF); | 
					
						
							|  |  |  |  |   return ret; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	get substring | 
					
						
							|  |  |  |  | *@param		src:src string s1: target begin s2: target end sub: result pointer | 
					
						
							|  |  |  |  | *@return	void | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | void mid(const char* src, const char* s1, const char* s2, char* sub) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	char* sub1; | 
					
						
							|  |  |  |  | 	char* sub2; | 
					
						
							|  |  |  |  | 	uint16_t n; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   sub1=strstr(src,s1); | 
					
						
							|  |  |  |  |   sub1+=strlen(s1); | 
					
						
							|  |  |  |  |   sub2=strstr(sub1,s2); | 
					
						
							|  |  |  |  |   n=sub2-sub1; | 
					
						
							|  |  |  |  |   strncpy(sub,sub1,n); | 
					
						
							|  |  |  |  |   sub[n]=0; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /**
 | 
					
						
							|  |  |  |  | *@brief	 	bytes array conver to string  | 
					
						
							|  |  |  |  | *@param		*data: ponit src bytes len: array length str: resuter string pointer | 
					
						
							|  |  |  |  | *@return	void | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | 	 | 
					
						
							|  |  |  |  | void bytes2hexString(const char* data, uint32_t len, char* str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	char c_temp; | 
					
						
							|  |  |  |  | 	while(len > 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		c_temp = ((*data) &0xF0) >> 4; | 
					
						
							|  |  |  |  | 		if(c_temp < 10) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			*str = c_temp + '0'; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			*str = (c_temp - 10) + 'A'; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		 | 
					
						
							|  |  |  |  | 		c_temp = ((*data) &0x0F); | 
					
						
							|  |  |  |  | 		str++; | 
					
						
							|  |  |  |  | 		if(c_temp < 10) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			*str = c_temp + '0'; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			*str = (c_temp - 10)+ 'A'; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		str++; | 
					
						
							|  |  |  |  | 		data++; | 
					
						
							|  |  |  |  | 		len--; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	*(str++) = '\0'; | 
					
						
							|  |  |  |  | 	 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /*
 | 
					
						
							|  |  |  |  | Hex Datas to Bytes | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | uint8_t HexStrings2Byte(char**strs,uint16_t size,uint8_t* buf,uint16_t buf_size) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	char* str; | 
					
						
							|  |  |  |  | 	uint8_t data = 0; | 
					
						
							|  |  |  |  | 	uint16_t count = 0; | 
					
						
							|  |  |  |  | 	while((size > 0) && (count < buf_size)) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		str = strs[count++]; | 
					
						
							|  |  |  |  | 		size--; | 
					
						
							|  |  |  |  | 		data = 0; | 
					
						
							|  |  |  |  | 		while(*str != '\0') | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			 | 
					
						
							|  |  |  |  | 			if(*str == '0') | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				if((*(str+1) == 'X') || (*(str+1) == 'x')) | 
					
						
							|  |  |  |  | 				{ | 
					
						
							|  |  |  |  | 					str+=2; | 
					
						
							|  |  |  |  | 					continue; | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 			data <<=4; | 
					
						
							|  |  |  |  | 			data |=c2d(*str); | 
					
						
							|  |  |  |  | 			str++; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		*buf = data; | 
					
						
							|  |  |  |  | 		buf++; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	return count; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /*
 | 
					
						
							|  |  |  |  | Hex Datas to uint32_t | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | uint32_t HexStrings2UInt(char*str) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	uint32_t data = 0; | 
					
						
							|  |  |  |  | 	uint16_t count = 0; | 
					
						
							|  |  |  |  | 		data = 0; | 
					
						
							|  |  |  |  | 		while(*str != '\0' && count < 10) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			 | 
					
						
							|  |  |  |  | 			if(*str == '0') | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				if((*(str+1) == 'X') || (*(str+1) == 'x')) | 
					
						
							|  |  |  |  | 				{ | 
					
						
							|  |  |  |  | 					str+=2; | 
					
						
							|  |  |  |  | 					continue; | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 			data <<=4; | 
					
						
							|  |  |  |  | 			data |=c2d(*str); | 
					
						
							|  |  |  |  | 			str++; | 
					
						
							|  |  |  |  | 			count++; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	return data; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | //冒泡排序16位数据
 | 
					
						
							|  |  |  |  | void Bubble_Sort_u16(uint16_t* buf,uint32_t len) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	uint32_t ul_temp1 = 0; | 
					
						
							|  |  |  |  | 	uint32_t ul_temp2 = 0; | 
					
						
							|  |  |  |  | 	uint16_t us_temp; | 
					
						
							|  |  |  |  | 	if(len < 2) | 
					
						
							|  |  |  |  | 		return; | 
					
						
							|  |  |  |  | 	for(ul_temp2 = 0; ul_temp2 < len-1; ul_temp2++) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		for(ul_temp1 = 0; ul_temp1 < len-1-ul_temp2; ul_temp1++) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			if(buf[ul_temp1] > buf[ul_temp1+1]) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				us_temp = buf[ul_temp1]; | 
					
						
							|  |  |  |  | 				buf[ul_temp1] = buf[ul_temp1 + 1]; | 
					
						
							|  |  |  |  | 				buf[ul_temp1 + 1] = us_temp; | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	 | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | //数据左移
 | 
					
						
							|  |  |  |  | void BufMoveLeft(uint8_t* srcbuf,uint16_t offset,uint16_t data_len) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	uint8_t index = 0; | 
					
						
							|  |  |  |  | 	while(data_len > 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		srcbuf[index] = srcbuf[index+offset]; | 
					
						
							|  |  |  |  | 		data_len--; | 
					
						
							|  |  |  |  | 		index++; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | //数据右移
 | 
					
						
							|  |  |  |  | void BufMoveRight(uint8_t* srcbuf,uint16_t offset,uint16_t data_len) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	while(data_len > 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		data_len--; | 
					
						
							|  |  |  |  | 		srcbuf[data_len+offset] = srcbuf[data_len] ;  | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | //@brief 计算数组的CRC8值
 | 
					
						
							|  |  |  |  | //@param *srcbuf 数据源指针
 | 
					
						
							|  |  |  |  | //@param len 数据源长度
 | 
					
						
							|  |  |  |  | //@rtvl 返回计算结果
 | 
					
						
							|  |  |  |  | uint8_t CheckXOR_8(uint8_t* srcbuf,uint16_t len) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   uint8_t crc = 0x00; | 
					
						
							|  |  |  |  |   while(len--) | 
					
						
							|  |  |  |  |   { | 
					
						
							|  |  |  |  |     crc ^= *srcbuf++; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   return crc; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | //@brief 计算数组异或校验值
 | 
					
						
							|  |  |  |  | //@param *Ptr 数据源
 | 
					
						
							|  |  |  |  | //@param num 计算长度
 | 
					
						
							|  |  |  |  | //@rtvl 返回计算结果
 | 
					
						
							|  |  |  |  | uint8_t CheckCRC_8(uint8_t* Ptr,uint16_t num) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |   uint8_t crc = 0; | 
					
						
							|  |  |  |  | 	uint16_t j,i; | 
					
						
							|  |  |  |  | 	 | 
					
						
							|  |  |  |  |     for (j = 0; j < num; j++) | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         crc ^= *(Ptr+j); | 
					
						
							|  |  |  |  |         for ( i = 0; i < 8; i++) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if ((crc & 0x01) != 0) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 crc >>= 1; | 
					
						
							|  |  |  |  |                 crc ^= 0x8c; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             else | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 crc >>= 1; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     return crc; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  |  //@brief 计算CRC32
 | 
					
						
							|  |  |  |  | //@param *srcbuf 数据源
 | 
					
						
							|  |  |  |  | //@param len 计算长度
 | 
					
						
							|  |  |  |  | //@rtvl 返回计算结果
 | 
					
						
							|  |  |  |  | uint32_t Crc32Calu(uint32_t* buf, uint32_t len) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	 uint32_t temp,crc = 0xFFFFFFFF; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	 uint32_t i,j; | 
					
						
							|  |  |  |  | 	 i = 0; | 
					
						
							|  |  |  |  | 	 if(((uint32_t)buf %4) != 0) | 
					
						
							|  |  |  |  | 	 { | 
					
						
							|  |  |  |  | 			 return 1; | 
					
						
							|  |  |  |  | 	 } | 
					
						
							|  |  |  |  | 	 while(i<len) | 
					
						
							|  |  |  |  | 	 { | 
					
						
							|  |  |  |  | 			temp = *buf; | 
					
						
							|  |  |  |  | 			i += 4; | 
					
						
							|  |  |  |  | 			buf ++; | 
					
						
							|  |  |  |  | 			for(j=0; j<32; j++) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 					if( (crc ^ temp) & 0x80000000 ) | 
					
						
							|  |  |  |  | 					{ | 
					
						
							|  |  |  |  | 							crc = 0x04C11DB7 ^(crc<<1); | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 					else | 
					
						
							|  |  |  |  | 					{ | 
					
						
							|  |  |  |  | 							crc <<=1; | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 					temp<<=1; | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 			crc&=0xFFFFFFFF; | 
					
						
							|  |  |  |  | 	 } | 
					
						
							|  |  |  |  | 	 return crc; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | /*
 | 
					
						
							|  |  |  |  | @brief 获取数组中的最大值和最小值 | 
					
						
							|  |  |  |  | @param *aus_buf 缓存数组 | 
					
						
							|  |  |  |  | @param us_size 数组长度 | 
					
						
							|  |  |  |  | @param *us_max 最大值 | 
					
						
							|  |  |  |  | @param *us_min 最小值 | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void GetMaxAndMinValue(uint16_t* aus_buf,uint16_t us_size,uint16_t* us_max,uint16_t* us_min) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	*us_max = 0; | 
					
						
							|  |  |  |  | 	*us_min = ~0; | 
					
						
							|  |  |  |  | 	while(us_size > 0) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if(*us_max < *aus_buf) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			*us_max = *aus_buf; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		if(*us_min > *aus_buf) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			*us_min = *aus_buf; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		aus_buf++; | 
					
						
							|  |  |  |  | 		us_size--; | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } |