Beispiel #1
0
int main(void)
{
    int r;
    set_func("func1");
    r = g_func(1);
    set_func("func2");
    r = g_func(2);
    set_func("func3");
    return 0;
}
Beispiel #2
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);
}
Beispiel #4
0
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;
}