Mini system operacyjny dla STM32 – wprowadzenie

Inną możliwością komunikacji międzyprocesowej (międzywątkowej) są kolejki FIFO umożliwiających przekazywanie danych pomiędzy zadaniami:
fifo_t* isix_fifo_create(int n_elem, size_t elem_size);
Funkcja tworzy kolejkę FIFO na n_elem elementów, o wielkości każdego elementu elem_size. W przypadku powodzenia funkcja zwraca wskaźnik na strukturę kontrolną fifo_t, natomiast w przypadku niepowodzenia zwraca wartość NULL.

int isix_fifo_write(fifo_t *fifo, const void *item, tick_t timeout);
int isix_fifo_write_isr(fifo_t *queue, const void *item);

Funkcje zapisują do kolejki o argumencie fifo element o wartości przekazanej za pomocą argumentu item. Wersja pierwsza w przypadku gdy kolejka FIFO jest zapełniona powoduje uśpienie zapisującego procesu (wątku) na czas przekazany jako argument timeout lub do momentu zwolnienia miejsca w kolejce. Wersja z przyrostkiem _isr służy do wywoływania z kontekstu przerwania i nie powoduje zablokowania. W przypadku powodzenia zwraca wartość ISIX_EOK.

int isix_fifo_read(fifo_t *fifo,void *item, tick_t timeout);
int isix_fifo_read_isr(fifo_t *queue, void *item);

Funkcje te są analogiczne do wcześniej opisanych funkcji isix_fifo_write() i powodują odczytanie danych z kolejki FIFO.

int isix_fifo_count(fifo_t *fifo);
Funkcja zwraca ilość elementów znajdujących się aktualnie w kolejce lub kod błędu gdy wartość zwracana jest mniejsza od 0.

int isix_fifo_destroy(fifo_t *fifo);
Funkcja powoduje skasowanie kolejki FIFO oraz zwolnionych przez nią zasobów. W przypadku powodzenia zwraca wartość ISIX_EOK (0).

Funkcje alokacji pamięci na stercie systemu, zawarte w pliku nagłówkowym memory.h:
void* isix_alloc(size_t size);
Funkcja powoduje alokację size bajtów pamięci na stercie systemowej. W przypadku powodzenia zwraca wskaźnik do zaalokowanej pamięci, w przypadku niepowodzenia zwraca wartość NULL.

void isix_free(void *mem);
Funkcja ta powoduje zwolnienie pamięci na stercie systemowej (argument mem), zaalokowanej wcześniej za pomocą funkcji isix_alloc.

O autorze