#define _GNU_SOURCE // 用于启用一些非标准的、GNU C 库扩展的特性,例如: 中的 CPU_ZERO 和 CPU_SET 函数。 #include #include #include #include #include #include #include #include #include #include //#include //#include //#include //#include //#include //#include #include "predict.h" #include #include #include "main.h" #include #include #define CURENT_LENGTH 131 // #define AppLog(msg...) if(LogOn){printf("Log At Line[%d] >> ",__LINE__),printf(msg),printf("\n");} #define AppErr(msg...) printf("Error At Line[%d] >> ",__LINE__),printf(msg),printf("\n"); unsigned char LogOn = 1; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; bool Is_opposite_signs(int *x,int *y); int min_count_abs(int x,int *arr); void array_subtraction(int *power,int *last_arr,int *current_arr,int *subtraction_arr); int current_detection(int *last,int *current,int *subtraction); int main() { //int last_arr [131] = {3,0,8,-4,-5,-5,-2,-7,-6,-4,-6,-1,-6,-3,-5,-9,-7,-9,-5,-8,-7,-7,-3,-6,0,-2,-6,-4,-3,-7,-22,-32,-11,-5,-3,-3,-3,-5,-4,-7,-6,-4,-4,-5,-5,-2,-4,-6,-4,-4,-8,-4,-4,-7,-6,0,-5,-7,-6,-2,-5,-6,-4,-7,-3,-4,-3,-3,-2,2,13,1,-3,-3,-6,-4,-3,-6,-5,-5,-1,-7,-6,-4,-5,-7,-2,-4,-4,-7,-4,-6,-5,-7,-4,-4,-6,-6,-6,-8,-5,-6,-6,-3,-3,-4,-6,-5,-13,-27,-14,-12,-5,-5,-4,-5,-3,-6,-5,-7,-4,-6,-6,-6,-15,-5,-5,-4,-6,-5,-4}; //int current_arr [131] = {165,22,243,161,58,253,-546,-612,-508,-377,-369,-333,-275,-228,-189,-171,-128,-65,3,7,4,9,7,4,3,3,3,0,2,0,-4,0,2,8,8,9,10,9,1,-1,5,8,7,7,106,541,613,513,374,369,343,276,224,182,167,117,62,-9,-5,-8,-8,-6,-8,-7,-13,-9,-12,-8,-8,-6,-3,-4,1,-2,-5,-2,-6,0,0,2,3,3,1,-66,-521,-608,-517,-369,-364,-343,-273,-226,-193,-171,-124,-77,-5,-6,-6,-2,-8,-9,-9,-10,-17,-12,-14,-19,-13,-8,-8,-8,-4,-3,-1,-2,-3,1,4,7,9,9,68,530,621,540,389,384,360,291,239,198,181,132}; //for(int n = 0;n<10000;n++){ //int last_arr [131] = {2,0,222,-5,-6,-8,-4,-2,-7,-2,-4,-5,-5,-7,-6,-2,-4,-7,0,-5,-5,-1,0,-2,-4,-6,-4,-2,-6,-5,-6,-3,-4,-6,-7,-6,1,-5,-7,-4,-5,-7,-4,-3,-3,-6,-5,-6,-7,-1,0,-5,-6,-4,-8,-7,-6,-5,-7,-5,-4,-5,-5,-5,-6,-3,-5,-4,-6,-6,-7,-4,-6,-5,-7,-6,-7,-12,1,-8,-6,-6,-4,-6,-5,-5,-4,-4,-4,-6,-4,-8,-11,-5,-2,-6,-5,-3,-7,-4,-6,-5,-5,-6,-7,-5,0,-3,-5,-3,-6,-4,-6,-6,-7,-5,-5,-4,-6,-3,-7,-7,-5,-6,-3,-6,-9,-6,-4,-7,-4}; //int current_arr [131] = {110,22,178,3,-6,-8,-4,-5,-4,-6,-7,-7,-6,-8,-4,-7,-7,-8,-5,-12,-6,-8,-6,-5,-8,-5,-8,-8,-7,-4,-8,-169,-479,-389,-380,-336,-247,-191,-151,-137,-117,-85,-16,-5,-2,-6,-3,-4,-2,-7,-2,-4,-4,-8,-6,-3,-5,-4,-3,-3,-2,-3,-6,-3,-5,-3,-1,-4,-3,1,144,468,409,363,328,238,179,148,124,108,75,6,-7,-3,-6,-5,-3,-5,-8,-5,-7,-7,-7,-7,-1,-3,-5,-5,-9,-6,0,-12,-9,-4,-10,-6,-6,-6,-10,-132,-469,-446,-367,-334,-251,-191,-153,-133,-113,-89,-20,0,-3,-2,-6,-4,-4,-4,-3,-6,-4}; int subtraction_data[CURENT_LENGTH] = {0}; int last_arr [CURENT_LENGTH] = {0}; int current_arr [CURENT_LENGTH] = {0}; FILE *file_in = fopen("temp_input.txt","r"); if (file_in == NULL) { perror("Error opening file"); return 1; } char line[1024]; // 假设每行不会超过1024个字符 char *token; int index1 = 0, index2 = 0; // 读取第一行 if (fgets(line, sizeof(line), file_in) != NULL) { token = strtok(line, ","); // 使用逗号作为分隔符 while (token != NULL && index1 < CURENT_LENGTH) { last_arr[index1++] = atoi(token); // 将字符串转换为整数 token = strtok(NULL, ","); // 继续获取下一个元素 } } // 读取第二行 if (fgets(line, sizeof(line), file_in) != NULL) { token = strtok(line, ","); while (token != NULL && index2 < CURENT_LENGTH) { current_arr[index2++] = atoi(token); token = strtok(NULL, ","); } } fclose(file_in); // 关闭文件 // 输出读取到的数组 // printf("Array 1: "); // for (int i = 0; i < index1; i++) { // printf("%d ", last_arr[i]); // } // printf("\n"); // printf("Array 2: "); // for (int i = 0; i < index2; i++) { // printf("%d ", current_arr[i]); // } // printf("\n"); int result = current_detection(last_arr,current_arr,subtraction_data); if(result == -1) { printf("******************************************************\n"); printf("检测结果是:%d\n",result); // printf("last_data is ["); // for(int index=0;index<131;index++) // printf("%d,",last_arr[index]); // printf("]\n"); // printf("current_data is ["); // for(int index=0;index<131;index++) // printf("%d,",current_arr[index]); // printf("]\n"); printf("******************************************************\n"); } FILE *file_out = fopen("temp_output.txt","w"); if (file_out == NULL) { perror("Error opening file"); return 1; } fprintf(file_out, "%d", result); fclose(file_out); //} // //double arr[128] = { -1413,-1487,-1545,-1626,-2256,-2594,-2499,-2317,-2363,-2272,-2191,-2149,-2108,-2068,-1966,-1870,-1796,-1634,-1541,-1475,-1317,-1214,-1056,-912,-744,-580,-415,-268,-143,-9,137,243,410,552,687,846,983,1133,1288,1413,1498,1551,1631,2250,2598,2481,2328,2376,2274,2195,2145,2105,2052,1955,1867,1792,1629,1531,1470,1309,1213,1052,907,743,576,414,264,150,12,-131,-236,-400,-544,-680,-837,-975,-1112,-1273,-1397,-1481,-1541,-1603,-2184,-2566,-2565,-2275,-2338,-2269,-2188,-2148,-2117,-2072,-1990,-1876,-1808,-1663,-1536,-1498,-1336,-1230,-1081,-933,-771,-598,-438,-287,-161,-22,112,231,389,532,665,825,966,1106,1272,1395,1488,1544,1609,2176,2572,2586,2401,2384,2283,2195 }; // init_uart (); // char num = 0; // int index; // collect_data collect_data_test; // int arr[131] = {572,76,658,-5062,-1258,986,9294,1686,274,-1832,-4292,-876,1294,6122,1420,-804,-9456,-1772,210,7318,2224,288,-1810,-8588,-1558,544,8540,1930,0,-5700,-3572,-544,1576,4762,1112,-1118,-8924,-2196,-194,1872,4034,724,-1404,-5524,-1360,894,9512,1758,-334,-7362,-2230,-998,1194,7336,1464,-728,-9058,-1804,104,6862,2442,398,-1700,-4574,-1034,442,7892,2074,96,-3126,-3894,-646,1494,4996,1174,-984,-9384,-1742,392,7650,4230,894,-1348,-6456,-1452,776,9440,1728,-272,-7344,-2302,-368,1774,4270,1550,-608,-8530,-2022,-30,5658,3494,528,-1638,-4832,-1110,1066,8682,1566,150,-1920,-4090,-800,1378,5628,1316,-928,-9528,-1816,298,7398,2198,196,-1884,-7440,-1490,670,9080,1828,-126,-6832,-2676}; // //int arr[131] = { -1413,-1487,-1545,-1626,-2256,-2594,-2499,-2317,-2363,-2272,-2191,-2149,-2108,-2068,-1966,-1870,-1796,-1634,-1541,-1475,-1317,-1214,-1056,-912,-744,-580,-415,-268,-143,-9,137,243,410,552,687,846,983,1133,1288,1413,1498,1551,1631,2250,2598,2481,2328,2376,2274,2195,2145,2105,2052,1955,1867,1792,1629,1531,1470,1309,1213,1052,907,743,576,414,264,150,12,-131,-236,-400,-544,-680,-837,-975,-1112,-1273,-1397,-1481,-1541,-1603,-2184,-2566,-2565,-2275,-2338,-2269,-2188,-2148,-2117,-2072,-1990,-1876,-1808,-1663,-1536,-1498,-1336,-1230,-1081,-933,-771,-598,-438,-287,-161,-22,112,231,389,532,665,825,966,1106,1272,1395,1488,1544,1609,2176,2572,2586,2401,2384,2283,2195,1895,57,1910 }; // collect_data_test.power_p = arr[128]; // collect_data_test.power_q = arr[129]; // collect_data_test.power_s = arr[130]; // for(index = 0;index < CURENT_LENGTH;index++) // collect_data_test.current[index] = arr[index]; // while (1) // { // /* code */ // procecing(&num, &collect_data_test); // sleep(5); // } } bool Is_opposite_signs(int *x,int *y) { return ((*x^*y)<0); } int min_count_abs(int x,int *arr) { if(abs(arr[x]) < abs(arr[x+1])) return x; else return x+1; } void array_subtraction(int *power,int *last_arr,int *current_arr,int *subtraction_arr){ u_int8_t last_zero_node [3] = {0}; u_int8_t current_zero_node [3] = {0}; u_int8_t count = 0; u_int8_t node_count = 0; //printf("power is %d\n",*power); if(*power > 15){ if(current_arr[0] != 0){ node_count = 0; for(count = 0;count<127;count++){ if(Is_opposite_signs(¤t_arr[count],¤t_arr[count+1])){ current_zero_node[node_count]=min_count_abs(count,current_arr); node_count++; } if(node_count == 3) break; } } else{ current_zero_node[0] = 0; node_count = 1; for(count = 1;count<127;count++){ if(Is_opposite_signs(¤t_arr[count],¤t_arr[count+1])){ current_zero_node[node_count]=min_count_abs(count,current_arr); node_count++; } if(node_count == 3) break; } } if(current_arr[current_zero_node[0]+3]