int main(void) { int r; set_func("func1"); r = g_func(1); set_func("func2"); r = g_func(2); set_func("func3"); return 0; }
VOID GPIO_Interrupt_handler() { if(g_func!=NULL) { g_func(); } gpioMaskCfg.falling = FALSE; gpioMaskCfg.rising = FALSE; hal_GpioIrqSetMask(g_GpioId, &gpioMaskCfg); SXS_TRACE(TSTDOUT,"clean gpio %d ",g_GpioId); hal_GpioResetIrq(g_GpioId); gpioMaskCfg.falling = FALSE; gpioMaskCfg.rising = TRUE; hal_GpioIrqSetMask(g_GpioId, &gpioMaskCfg); }
static void handle_link_request(NaClSrpcRpc *rpc, NaClSrpcArg **in_args, NaClSrpcArg **out_args, NaClSrpcClosure *done) { int obj_file_count = in_args[0]->u.ival; int nexe_fd = in_args[kMaxObjectFiles + 1]->u.hval; if (obj_file_count < 1 || obj_file_count > kMaxObjectFiles) { NaClLog(LOG_FATAL, "Bad object file count (%i)\n", obj_file_count); } int obj_file_fds[obj_file_count]; for (int i = 0; i < obj_file_count; i++) { obj_file_fds[i] = in_args[i + 1]->u.hval; } int result = g_func(nexe_fd, obj_file_fds, obj_file_count); rpc->result = result == 0 ? NACL_SRPC_RESULT_OK : NACL_SRPC_RESULT_APP_ERROR; done->Run(done); }
int main() { //File PARITY std::fstream parity_file("..\\..\\data\\PARITY.txt"); if (!parity_file) return 1; std::istream_iterator<long> eos; std::istream_iterator<long> iit(parity_file); const long rows = *iit++; const long cols = *iit++; std::vector<std::vector<long>> check(rows), bit(cols); std::cout << "Reading PARITY...\n"; std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); //Initial bit_connections and check_connections while (iit != eos) { long left = *iit; ++iit; check[left - 1].push_back(*iit); bit[*iit - 1].push_back(left); ++iit; } std::chrono::system_clock::time_point end = std::chrono::system_clock::now(); int sec = std::chrono::duration_cast<std::chrono::seconds>(end - start).count(); int msec = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() - sec * 1000; std::cout << "Done reading in " << sec << " s " << msec << " ms\n"; //File demodSignal std::fstream signal_file("..\\..\\data\\demodSignal.txt"); if (!signal_file) { std::cout << "Error with opening demodSignal.txt\n" << std::endl; return 1; } std::istream_iterator<float> eos_d; std::istream_iterator<float> iit_d(signal_file); std::vector<float> demodSignal; std::cout << "Reading demodSignal...\n"; start = std::chrono::system_clock::now(); //Reading demodSignal file while (iit_d != eos_d) { demodSignal.push_back(*iit_d); ++iit_d; } end = std::chrono::system_clock::now(); sec = std::chrono::duration_cast<std::chrono::seconds>(end - start).count(); msec = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() - sec * 1000; std::cout << "Done reading in " << sec << " s " << msec << " ms\n"; //Initialization posylka_from_bit_to_check std::vector<std::vector<float>> posylka_from_bit_to_check(cols); std::vector<std::vector<long>>::iterator iter_p = bit.begin(); int num_d = 0;//Íîìåð èíäåêñà ñèãíàëà std::cout << "Preparing posylka_from_bit_to_check...\n"; start = std::chrono::system_clock::now(); while (iter_p != bit.end()) { for (int i = 0; i < bit[num_d].size(); i++) { posylka_from_bit_to_check[num_d].push_back(demodSignal[num_d]); } num_d++; ++iter_p; } end = std::chrono::system_clock::now(); sec = std::chrono::duration_cast<std::chrono::seconds>(end - start).count(); msec = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() - sec * 1000; std::cout << "Done preparing in " << sec << " s " << msec << " ms\n"; //Initialization posylka_from_check_to_bit std::vector<std::vector<float>> posylka_from_check_to_bit(rows); const int MaxIteration = 50; //Íà÷àëàñü îòïðàâêà start = std::chrono::system_clock::now(); for (int n_iter = 0; n_iter < MaxIteration; n_iter++) { std::cout << "\n" << n_iter + 1 << " iterations\n"; std::vector<long>::iterator it_find; std::vector<long> d; // Çàïèñûâàåòñÿ èñïðàâëÿåìûé ñèãíàë std::vector<float> LQ; //std::cout << "Otpravka: \n"; for (int nn = 0; nn < rows; nn++) { std::vector<long> input_indeces = check[nn]; std::vector<long>::iterator it_ii = input_indeces.begin(); std::vector<float> posylki; //Chto imenno prihodilo: while (it_ii != input_indeces.end()) { it_find = std::find(bit[*it_ii - 1].begin(), bit[*it_ii - 1].end(), nn + 1); int num_it_find = it_find - bit[*it_ii - 1].begin(); float tmp = posylka_from_bit_to_check[*it_ii - 1][num_it_find]; ++it_ii; posylki.push_back(tmp); } posylka_from_check_to_bit[nn].clear(); // Ñòèðàåì äëÿ çàïîëíåíèÿ îáíîâëåííûìè çíà÷åíèÿìè //Formiruem otvet for (int kk = 0; kk < input_indeces.size(); kk++) { std::vector<float> posyl_minus_1(posylki); posyl_minus_1.erase(posyl_minus_1.begin() + kk); float gg = g_func(posyl_minus_1); posylka_from_check_to_bit[nn].push_back(gg); } } //std::cout << "Otvet:\n"; //bit node update for (int nn = 0; nn < cols; nn++) { std::vector<long> input_indeces = bit[nn]; std::vector<long>::iterator it_ii = input_indeces.begin(); std::vector<float> posylki; //Chto imenno prihodilo: while (it_ii != input_indeces.end()) { it_find = std::find(check[*it_ii - 1].begin(), check[*it_ii - 1].end(), nn + 1); int num_it_find = it_find - check[*it_ii - 1].begin(); float tmp = posylka_from_check_to_bit[*it_ii - 1][num_it_find]; ++it_ii; posylki.push_back(tmp); } posylka_from_bit_to_check[nn].clear(); //Formiruem otvet for (int kk = 0; kk < input_indeces.size(); kk++) { std::vector<float> posyl_minus_1(posylki); posyl_minus_1.erase(posyl_minus_1.begin() + kk); float gg = demodSignal[nn] + sum(posyl_minus_1); posylka_from_bit_to_check[nn].push_back(gg); } LQ.push_back(demodSignal[nn] + sum(posylki)); d.push_back((1 - Sign(LQ[nn])) / 2); } //Ñîçäàåì è çàïîëíÿåì ñèíäîðì std::vector<long> syndrome; for (int i = 0; i < rows; i++) { std::vector<long> indeces = check[i]; std::vector<long>::iterator it_ind = indeces.begin(); std::vector<long> tmp; while (it_ind != indeces.end()) { tmp.push_back(d[*it_ind - 1]); it_ind++; } syndrome.push_back(fmod(sum(tmp), 2)); } std::cout << "\nErrors: " << sum(syndrome) << std::endl; if (sum(syndrome) == 0) { break; } } end = std::chrono::system_clock::now(); sec = std::chrono::duration_cast<std::chrono::seconds>(end - start).count(); msec = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() - sec * 1000; std::cout << "\nDone preparing in " << sec << " s " << msec << " ms\n"; std::cout << "SYNDROME == 0" << std::endl; system("pause"); return 0; }