Cześć, zastanawiam się czy linux jest w stanie pracować jako RTOS, RTOS hard.Chciałbym realizować na linuxie jedną rzecz która będzie się wykonywała co 100ms. Minimalne zwłoki czasowe są dopuszczalne, na poziomie kilku ms, maksymalnie kilkudziesięcu ms.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
void *myfunc1 (void *myvar);
void *myfunc2 (void *myvar);
int main(void)
{
pthread_t thread1, thread2;
char *msg1 = "First";
char *msg2 = "Second";
int ret1 = 0;
int ret2 = 0;
ret1 = pthread_create(&thread1, NULL, myfunc1, (void*) msg1);
ret2 = pthread_create(&thread2, NULL, myfunc2, (void*) msg2);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("First thread ret: %d", ret1);
printf("Second thread ret: %d", ret2);
return 0;
}
void *myfunc1 (void *myvar)
{
while(1)
{
//update_db();
printf("Thread1\n");
usleep(500000);
}
}
void *myfunc2 (void *myvar)
{
while(1)
{
//update_output();
printf("Thread2\n");
usleep(100000);
}
}
Czy da się uruchomić ten program, aby miał wysoki priorytet? Tak samo zależy mi aby wątek pthread2 którego zadaniem jest wysterowanie pinów wykonywał się co 100ms., Wątek pthread1 którry realizuje zadanie zadanie odczytu i zapisu do bazy danych jest mniej istotny, opóźnienia mogą być. Czasem zapis do DB trwa długo np. 800ms, i pthread1 blokuje pthread2 który ma "ważniejsze zadanie". Chciałbym uzyskać efekt podobny do FreeRTOS tzn. mieć task o najwyższym priorytecie.