static void timer_code(void *arg) { long long int t1, t2, t3; long int tdiff1, tdiff2, tdiff3; char buf[30]; while (1) { /* a simple counter... */ timer_count++; /* print the results every second */ if (timer_count % 1000 == 0) { t1 = rtapi_get_time(); t2 = rtapi_get_time(); rtapi_delay(rtapi_delay_max()); t3 = rtapi_get_time(); tdiff1 = t2 - t1; tdiff2 = t3 - t2; tdiff3 = t3 - t1; long_long_to_dec_str(buf, t1); rtapi_print("T1 = %s\n", buf); long_long_to_dec_str(buf, t2); rtapi_print("T2 = %s\n", buf); long_long_to_dec_str(buf, t3); rtapi_print("T3 = %s\n", buf); rtapi_print("Tdiff1 = %ld\n", tdiff1); rtapi_print("Tdiff2 = %ld\n", tdiff2); rtapi_print("Tdiff3 = %ld\n", tdiff3); } /* put the task to sleep until the next interrupt */ rtapi_wait(); } return; }
/* task code, executed each timer interrupt */ void fifo_code(void *arg) { int n, tmp; char buffer[FIFO_SIZE + 1] = { '\n' }; while (1) { /* write count to buffer as a 3 digit number */ tmp = count; for (n = 0; n < 3; n++) { buffer[2 - n] = (char) ('0' + (tmp % 10)); tmp /= 10; } buffer[3] = ':'; /* write 'len' digits of 'len' */ for (n = 0; n < len; n++) { buffer[4 + n] = (char) ('0' + len); } rtapi_fifo_write(fifo, buffer, len + 4); total += len + 4; buffer[4 + n] = (char) '\0'; rtapi_print_msg(2, "fifotask: total %d, wrote '%s'\n", total, buffer); count++; len++; if (len > 9) len = 0; rtapi_wait(); } return; }
/* task code, executed periodically */ void shmem_code(void *arg) { while (1) { if (0 != shmem_struct) { shmem_struct->heartbeat++; } rtapi_wait(); } return; }