int main(int argc, char *argv[]){ system("clear"); printf("Eliminando basura...\n"); system("ipcrm -a"); struct cola colas; /* Inicializa las variables de las colas de variables de todos los nodos del sistema, por defecto todo a 0 */ int s=0; int xxx; for(s=0;s<NODOS;s++){ colas= iDColaNodo(s); printf("[Nodo:%u] cola vars= %u\n",s,colas.msqid_vars); printf("[Nodo:%u] cola mutex= %u\n",s,colas.msqid_mutex); printf("[Nodo:%u] cola peticiones= %u\n",s,colas.msqid_peticiones); if (s==0) xxx = colas.msqid_peticiones; inicializarVariables(colas.msqid_vars); } printf("Presiona ENTER para enviar el testigo\n"); getchar(); inyectarTestigo(xxx); while(1); return 0; }
int main(int argc, char** argv) { // pcb * pcbVacioLoco=newEmptyPcb(); // StrKerCpu *hola = newStrKerCpu(KERNEL_ID,PRIMER_PCB,*pcbVacioLoco,8,"hola",0,"hola",0); // SocketBuffer *bufferLoco =serializeKerCpu(hola); // bufferLoco->data; // hola=unserializeKerCpu(bufferLoco->data); // // paginaDeStack * paginita =list_get(hola->pcb.indiceDelStack,0); // paginaDeStack * paginita2 =list_get(hola->pcb.indiceDelStack,1); // // if(argc != 2){ puts("No se ingreso la ruta del archivo de configuracion\n"); return 0; } //memcpy(rutaArchivoConfig,&*argv[1],strlen(argv[1])); rutaArchivoConfig=argv[1]; inicializarVariables(rutaArchivoConfig); printf("%d", tamanioPaginas); log_info(nucleolog, "Variables inicializadas."); /**************************************************/ //Creacion de Hilos crearHilos(); log_info(nucleolog, "Se han creado los threads."); /**************************************************/ /* ESTE WAIT ES PARA QUE SIGAN CORRIENDO LOS HILOS */ while (1) { sleep(5); } /***************************************************/ log_info(nucleolog, "Termine re piola."); return EXIT_SUCCESS; }
// Codigo para procesar los comandos recibidos a traves del canal USB static portTASK_FUNCTION( CommandProcessingTask, pvParameters ){ unsigned char frame[MAX_FRAME_SIZE]; //Ojo, esto hace que esta tarea necesite bastante pila int numdatos; unsigned int errors=0; unsigned char command; EventBits_t bits; /* The parameters are not used. */ ( void ) pvParameters; for(;;) { numdatos=receive_frame(frame,MAX_FRAME_SIZE); if (numdatos>0) { //Si no hay error, proceso la trama que ha llegado. numdatos=destuff_and_check_checksum(frame,numdatos); if (numdatos<0) { //Error de checksum (PROT_ERROR_BAD_CHECKSUM), ignorar el paquete errors++; // Procesamiento del error (TODO) } else { //El paquete esta bien, luego procedo a tratarlo. command=decode_command_type(frame,0); bits=xEventGroupGetBits(xEventGroup); switch(command) { case COMANDO_PING : if(bits & TrazaBit == TrazaBit){ UARTprintf("Comando PING\n "); } //A un comando de ping se responde con el propio comando numdatos=create_frame(frame,command,0,0,MAX_FRAME_SIZE); if (numdatos>=0) { send_frame(frame,numdatos); }else{ //Error de creacion de trama: determinar el error y abortar operacion errors++; logError(numdatos); } break; case COMANDO_START: // Comando de ejemplo: eliminar en la aplicacion final { if(bits & TrazaBit == TrazaBit){ UARTprintf("Comando START\n "); } if(sensorTaskHandle == NULL){ inicializarVariables(); if((xTaskCreate(ConsumoTask, (signed portCHAR *)"Consumo", LED1TASKSTACKSIZE,NULL,tskIDLE_PRIORITY + 1, &consumoTaskHandle)!= pdTRUE)) { while(1); } if((xTaskCreate(SensorTask, (signed portCHAR *)"Sensor", LED1TASKSTACKSIZE,NULL,tskIDLE_PRIORITY + 1, &sensorTaskHandle) != pdTRUE)) { while(1); } if((xTaskCreate(HighTask, (signed portCHAR *)"Altitud", LED1TASKSTACKSIZE,NULL,tskIDLE_PRIORITY + 1, &altitudTaskHandle) != pdTRUE)) { while(1); } if((xTaskCreate(turbulenciasTask, (signed portCHAR *)"Turbulencias", LED1TASKSTACKSIZE,NULL,tskIDLE_PRIORITY + 1, &turbulenciasTaskHandle) != pdTRUE)) { while(1); } } } break; case COMANDO_STOP: { if(bits & TrazaBit == TrazaBit){ UARTprintf("Comando STOP\n "); } if(combustible>0){ //Eliminamos las tareas en el STOP vTaskDelete(sensorTaskHandle); vTaskDelete( consumoTaskHandle ); vTaskDelete(altitudTaskHandle); vTaskDelete( turbulenciasTaskHandle ); } } break; case COMANDO_SPEED: { if(bits & TrazaBit == TrazaBit){ UARTprintf("Comando SPEED\n "); } float velocidad; //Recibimos y enviamos por la cola la velocidad extract_packet_command_param(frame,sizeof(velocidad),&velocidad); xQueueSend( velocidadQueue,&velocidad,portMAX_DELAY); } break; case COMANDO_TIME: { if(bits & TrazaBit == TrazaBit){ UARTprintf("Comando TIME\n "); } uint32_t hora; extract_packet_command_param(frame,sizeof(hora),&hora); //recibimos y actualizamos el valor de Hora setHora(hora); //Creamos la tarea Time if(xTaskCreate(TimeTask, (portCHAR *)"Time",LED1TASKSTACKSIZE, NULL, tskIDLE_PRIORITY + 1, NULL) != pdTRUE) { while(1); } } break; default: { PARAM_COMANDO_NO_IMPLEMENTADO parametro; parametro.command=command; //El comando esta bien pero no esta implementado numdatos=create_frame(frame,COMANDO_NO_IMPLEMENTADO,¶metro,sizeof(parametro),MAX_FRAME_SIZE); if (numdatos>=0) { send_frame(frame,numdatos); } break; } } } }else{ // if (numdatos >0) //Error de recepcion de trama(PROT_ERROR_RX_FRAME_TOO_LONG), ignorar el paquete errors++; } } }