Example #1
0
//------------------------------------------------------
// char teclado(void)
//
// Descripción:
//   Explora el teclado matr<icial y devuelve la tecla 
//   pulsada
//------------------------------------------------------
char teclado(void) {
	//char tecla;
	BYTE fila, columna, fila_mask;
	static char teclas[4][4] = {{"123C"},
								{"456D"},
								{"789E"},
								{"A0BF"}};
	// Bucle de exploración del teclado
	while (TRUE) {
		// Excitamos una columna
		for (columna = NUM_COLS - 1; columna >= 0; columna--) {
			salida = salida & 0xFFF0;				 				// Realizamos un AND binario  con el valor actual de salida y 0xFFF0 para no interferir
			salida = salida | (EXCIT << columna);    
			set16_puertoS (salida);									// Se envía la excitación de columna
			retardo(20000);											// Esperamos respuesta de optoacopladores
			
			// Exploramos las filas en busca de respuesta
			for (fila = NUM_FILAS - 1; fila >= 0; fila--) {
				fila_mask = EXCIT << fila;					// Máscara para leer el bit de la fila actual
				if (lee16_puertoE() & fila_mask) {				// Si encuentra tecla pulsada,
					while (lee_puertoE() & fila_mask);				//	Esperamos a que se suelte
					retardo(20000);						//	Retardo antirrebotes
					return teclas[fila][columna];					//	Devolvemos la tecla pulsada
				}
			}
			// Siguiente columna
		}
		// Exploración finalizada sin encontrar una tecla pulsada
	}
	// Reiniciamos exploración
}
//--------------------------------------
// void LCD_reset()
//
// Descripción:
//   Función de inicialización del LCD
//--------------------------------------
void LCD_reset()
{
  int i;
  retardo(RET_15MS);		// Retardo inicial
  for(i = 0; i < 3; i++){	// Se repite 3 veces,
    LCD_inst(FS_8BITS);		//   Instrucción para funcionamiento en 8 bits
    retardo(RET_15MS);		//   Hay que esperar más de 4.1ms
  }
}
//------------------------------------------------------
// void LCD_write(UWORD dato, LCD_TIPO tipo)
//
// Descripción:
//   Función para escribir en el LCD
//
// Parámetros:
//   char dato
//     instrucción o carácter a escribir en el display
//   LCD_TIPO tipo
//     LCD_CHAR si dato es un carácter a escribir
//     LCD_INST si dato es una instrucción para el LCD
//------------------------------------------------------
void LCD_write(UWORD dato, LCD_TIPO tipo)
{
  UWORD salida;
  if(tipo == LCD_CHAR){
    dato = dato << 8;				// El dato debe estar en los 8 bits más significativos
  }
  set16_puertoS(dato | tipo | BIT_ENABLE);	// Enable + dato: Activamos LCD e indicamos el tipo de dato
  retardo(RET_3MS);
  set16_puertoS(dato | tipo);			// Disable: carga el dato en el LCD
  retardo(RET_3MS);
}
char* readPage(int absolutePageNumber) {

	retardo();
	int page_size = getSwapPagesSize();
	char *file_name = getSwapFileName();
	FILE *fp = fopen(file_name, "r");
	char* page = malloc(sizeof(char) * page_size);
	int position = absolutePageNumber * page_size;
	fseek(fp, position, SEEK_SET);
	fgets(page, page_size + 1, fp);
	return page;
}
void writePage(int absolutePageNumber, char *content) {

	retardo();
	int page_size = getSwapPagesSize();

	char *file_name = getSwapFileName();

	FILE *fp = fopen(file_name, "rb+");

	int position = absolutePageNumber * page_size;

	fseek(fp, position, SEEK_SET);

	fwrite(content, sizeof(char), strlen(content), fp);

	fclose(fp);
}
Example #6
0
void calcularPorcentaje() {
	int i = 0;
	while (1) {
		i++;
		retardo(60); //duerme cada 60 segundos

		void sacaPorcentaje(t_cpu* cpu) {
			// 60 instrucciones ejecutadas equivale al 100%
//en este if es para una instruccion que empezo antes de los 60s y terminara despues de estos
			if (cpu->estado == NO_TERMINO_RAFAGA
					&& cpu->terminaInstruccion == NO_TERMINO) {
////esta ejecutando aun una instruccion, pero no ha terminado, entonces la sumo, esta en memoria
				incrementaInstPorcentaje(cpu);
				calculaAcumulado(cpu);


////				cpu->retardoTotal = (uint8_t) dameDiferencia(
////						cpu->inicioInstruccion, cpu->finInstruccion);
//				printf("acumuladoSegundos %f\n", cpu->acumuladoSegundos);
//				cpu->porcentajeUso = (uint8_t)(cpu->acumuladoSegundos * 100)
//						/60;

//				resetValPorcentaje(cpu); //lo reseteo porque luego cuando termine la instruccion se contara
			}  //ya termino la rafaga
//				cpu->porcentajeUso = (uint8_t) ((cpu->cantInstEjecutadasPorcentaje * 100)
//						/ instEquivalenteCienPorciento(configuracion->retardo));
			pthread_mutex_lock(&mutexCPUPorcentaje);
			//	cpu->porcentajeUso = (cpu->acumuladoSegundos * 100)
			//							/60;

//			printf("cant Inst ejecutadas %d \n",
//					cpu->cantInstEjecutadasPorcentaje);
//			printf("acumuladoSegundos %f\n", cpu->acumuladoSegundos);
//			cpu->porcentajeUso = (cpu->acumuladoSegundos * 100) / 60;

//			if (cpu->porcentajeUso > 100)
//				cpu->porcentajeUso = 93.331133;
//			tiempo promedio que demora una instruccion
			double result = cpu->acumuladoSegundos
					/ cpu->cantInstEjecutadasPorcentaje;
			//cuantas instrucciones se podrian ejecutar en 60 segundos
			int cienPorcien =  redondea(result);
//			printf("max instrucciones que se pueden ejecutar %d \n",
//					cienPorcien);

			double resultadoPor = ((cpu->cantInstEjecutadasPorcentaje * 100)
					/ cienPorcien);
			double parte_entera;
			modf(resultadoPor, &parte_entera);
			cpu->porcentajeUso =(int)  parte_entera;

//			cpu->porcentajeUso = ((cpu->cantInstEjecutadasPorcentaje * 100)
//					/ instEquivalenteCienPorciento(configuracion->retardo));
			resetValPorcentaje(cpu);
			//calculo el inicio de la otra mitad de esta instruccion
						calculafecha(cpu);
			pthread_mutex_unlock(&mutexCPUPorcentaje);

			//muestra y loguea resultado
			puts(
					string_from_format(
							KRED "++++++++++++++++++++++"RESET "++++++++"KRED "+++++++++++++++++++++++++++\n" RESET));
			puts(string_from_format("%s,\n", queCPUsoy(cpu)));
			puts(string_from_format("Para el minuto %d, \n", i));
			puts(
					string_from_format(
							"el porcentaje de uso es de  %i porciento. \n",
							cpu->porcentajeUso));
			puts(
					string_from_format(
							KBLU "++++++++++++++++++++++"RESET "+++++++++"KBLU "++++++++++++++++++++++++++\n"RESET));

			pthread_mutex_lock(&mutexCPULogs);
			log_info(logger, identificaCPU(queHiloSoy()));
			log_info(logger, "se ejecuta el calculo del porcentaje de la cpu");
			log_info(logger, string_from_format("para el minuto %i \n", i));
			log_info(logger,
					string_from_format("porcentaje de %i \n",
							cpu->porcentajeUso));
			pthread_mutex_unlock(&mutexCPULogs);
		}

		list_iterate(procCPU->listaCPU, (void*) sacaPorcentaje);

	}
}