#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" #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; int current_data [CURENT_LENGTH]; int last_data [CURENT_LENGTH]; int subtraction_data[CURENT_LENGTH]; 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 main() { // //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]