by schumi2000
Embed:
(wiki syntax)
Show/hide line numbers
sys.cpp
00001 #include "sys.h" 00002 00003 00004 unsigned short ccitt_table[256] = { 00005 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 00006 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 00007 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 00008 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 00009 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, 00010 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 00011 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 00012 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 00013 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 00014 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 00015 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 00016 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 00017 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 00018 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 00019 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, 00020 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 00021 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 00022 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, 00023 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 00024 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, 00025 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 00026 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 00027 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, 00028 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 00029 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 00030 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, 00031 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 00032 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 00033 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 00034 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 00035 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 00036 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 00037 }; 00038 00039 unsigned short crc_ccitt(unsigned char *q, int len) 00040 { 00041 unsigned short crc = 0; 00042 00043 while (len-- > 0) 00044 crc = ccitt_table[(crc >> 8 ^ *q++) & 0xff] ^ (crc << 8); 00045 return ~crc; 00046 } 00047 00048 00049 /** 00050 *@brief 把十进制数转化为字符型 00051 *@param c:要转化十进制数据 00052 *@return 返回一个字符型数据 00053 */ 00054 char c2d(uint8_t c) 00055 { 00056 if (c >= '0' && c <= '9') 00057 return c - '0'; 00058 if (c >= 'a' && c <= 'f') 00059 return 10 + c -'a'; 00060 if (c >= 'A' && c <= 'F') 00061 return 10 + c -'A'; 00062 00063 return (char)c; 00064 } 00065 00066 /** 00067 *@brief 字符转转化为8位整型函数 00068 *@param str:要转化字符串, base: 00069 *@return num:返回转化后的整型数 00070 */ 00071 uint16_t atoi16(char* str,uint16_t base ) 00072 { 00073 unsigned int num = 0; 00074 while (*str !=0) 00075 num = num * base + c2d(*str++); 00076 return num; 00077 } 00078 00079 00080 /** 00081 *@brief 把字符串转化为十进制或十六进制数函数 00082 *@param str:要转化字符串, len:整型数长度 00083 *@return 成功 - 1, 失败 - 0 00084 */ 00085 int validatoi(char* str, int base,int* ret) 00086 { 00087 int c; 00088 char* tstr = str; 00089 if(str == 0 || *str == '\0') return 0; 00090 while(*tstr != '\0') 00091 { 00092 c = c2d(*tstr); 00093 if( c >= 0 && c < base) tstr++; 00094 else return 0; 00095 } 00096 00097 *ret = atoi16(str,base); 00098 return 1; 00099 } 00100 00101 void HexToStr(char *pbDest, char *pbSrc, int nLen) 00102 { 00103 char ddl,ddh; 00104 int i; 00105 00106 for (i=0; i<nLen; i++) 00107 { 00108 ddh = 48 + pbSrc[i] / 16; 00109 ddl = 48 + pbSrc[i] % 16; 00110 if (ddh > 57) ddh = ddh + 7; 00111 if (ddl > 57) ddl = ddl + 7; 00112 pbDest[i*2] = ddh; 00113 pbDest[i*2+1] = ddl; 00114 } 00115 00116 pbDest[nLen*2] = '\0'; 00117 } 00118 00119 void HexOutput(const char* buf, int len) 00120 { 00121 int i=0; 00122 printf("The Hex output of data :\n0x"); 00123 for(i=0; i<len; ++i) 00124 { 00125 unsigned char c = buf[i]; // must use unsigned char to print >128 value 00126 if( c< 16) 00127 { 00128 printf("0%x ", c); 00129 } 00130 else 00131 { 00132 printf("%x ", c); 00133 } 00134 } 00135 printf("\n"); 00136 } 00137 00138 00139 void reverse_u64(uint64_t *temp) 00140 { 00141 char temp_str[8]; 00142 memset(temp_str,0x00,8); 00143 //printf("old data\n"); 00144 //HexOutput((char *)temp,8); 00145 00146 memcpy(temp_str+7,(char*)temp,1); 00147 memcpy(temp_str+6,(char*)temp+1,1); 00148 memcpy(temp_str+5,(char*)temp+2,1); 00149 memcpy(temp_str+4,(char*)temp+3,1); 00150 memcpy(temp_str+3,(char*)temp+4,1); 00151 memcpy(temp_str+2,(char*)temp+5,1); 00152 memcpy(temp_str+1,(char*)temp+6,1); 00153 memcpy(temp_str,(char*)temp+7,1); 00154 00155 memcpy((char *)temp,temp_str,8); 00156 00157 //printf("new data\n"); 00158 //HexOutput((char *)temp,8); 00159 } 00160 00161 00162 void reverse_u32(uint32_t *temp) 00163 { 00164 char temp_str[4]; 00165 memset(temp_str,0x00,4); 00166 //USARTX_SendData(USART1,(char *)temp,4); 00167 00168 memcpy(temp_str+3,(char*)temp,1); 00169 memcpy(temp_str+2,(char*)temp+1,1); 00170 memcpy(temp_str+1,(char*)temp+2,1); 00171 memcpy(temp_str,(char*)temp+3,1); 00172 00173 memcpy((char *)temp,temp_str,4); 00174 00175 //USARTX_SendData(USART1,(char *)temp,4); 00176 } 00177 00178 void reverse_u16(uint16_t *temp) 00179 { 00180 char temp_str[2]; 00181 memset(temp_str,0x00,2); 00182 //USARTX_SendData(USART1,(char *)temp,2); 00183 00184 memcpy(temp_str+1,(char*)temp,1); 00185 memcpy(temp_str,(char*)temp+1,1); 00186 00187 memcpy((char *)temp,temp_str,2); 00188 00189 //USARTX_SendData(USART1,(char *)temp,2); 00190 } 00191 00192 00193 //设置栈顶地址 00194 //addr:栈顶地址 00195 __asm void MSR_MSP(u32 addr) 00196 { 00197 MSR MSP, r0 //set Main Stack value 00198 BX r14 00199 }
Generated on Tue Aug 23 2022 22:33:31 by 1.7.2