void loopCommandLine(void) { // print status if we're not in the menu if (! menuEnabled) { if (TimerReached(&cmdline_looptime, 1000)) { printStatus(); } } // check for serial command unsigned int c = uart_getc(); if (!(c & UART_NO_DATA)) { if (! menuEnabled) { menuEnabled=1; printHelp(); } switch((char) c) { case 'x': case 'X': // terminates menu uart_puts_P("Leaving menu." NEWLINESTR); menuEnabled=0; break; case 'b': case 'B': // show PID values printPID(); break; case 'r': case 'R': // reset PID values restorePIDDefault(); break; case 'o': case 'O': // print out PID debug data togglePIDDebug(); break; case 'p': setPID_P(getPID_P() - delta); printPID(); break; case 'P': setPID_P(getPID_P() + delta); printPID();break; case 'i': setPID_I(getPID_I() - delta); printPID(); break; case 'I': setPID_I(getPID_I() + delta); printPID(); break; case 'd': setPID_D(getPID_D() - delta); printPID(); break; case 'D': setPID_D(getPID_D() + delta); printPID(); break; case 't': setPIDSetpoint(getPIDSetpoint() - delta); printPID(); break; case 'T': setPIDSetpoint(getPIDSetpoint() + delta); printPID(); break; case 's': case 'S': savePIDConfig(); break; case '+': {// adjust delta delta *= 10.0; if (delta > MAX_DELTA) delta = MAX_DELTA; uart_print_delta(); break; } case '-': {// adjust delta delta /= 10.0; if (delta < MIN_DELTA) delta = MIN_DELTA; uart_print_delta(); break; } case '?': // show menu printHelp(); break; } } }
int printPID(int offsprings){ // wypisuje identyfikator procesu printf("%d:%d:E execution\n", offsprings, getpid()); if(offsprings != 0){ // tworzy nowy proces switch (fork()) { // błąd case -1: fprintf(stderr, "Error in fork\n"); return -1; // proces potomny case 0: printf("%d:%d:C creating\n", offsprings, getpid()); //wywołaj funkcję jeszcze raz i zmniejsz licznik return printPID(--offsprings); // proces macierzysty default: printf("%d:%d:P waiting\n", offsprings, getpid()); // czeka na zakończenie procesu potomnego if(wait(0) == -1){ fprintf(stderr, "Error in wait\n"); return -1; } printf("%d:%d:P closing\n", offsprings, getpid()); return 0; } } return 0; }
int main () { return printPID(4); }