obsw/mission/freeRTOS_rust_helper.c

51 lines
1.2 KiB
C

#include "FreeRTOS.h"
#include "semphr.h"
#include "task.h"
// TODO namespace the names
const char *get_task_name() { return pcTaskGetName(NULL); }
void stop_it() { taskENTER_CRITICAL(); }
// TODO return some error code?
void *create_task(TaskFunction_t taskFunction, void *parameter,
size_t stack_size) {
TaskHandle_t newTask;
BaseType_t result =
xTaskCreate(taskFunction, "rust", stack_size, parameter, 4, &newTask);
if (result == pdTRUE) {
return newTask;
} else {
return NULL;
}
}
void task_delay(uint32_t milliseconds) {
vTaskDelay(pdMS_TO_TICKS(milliseconds));
}
void delete_task(void * task){
vTaskSuspend(task); //we can not use vDeleteTask as it would free the allocated memory which is forbidden using heap1 (which we use)
}
void *create_queue(size_t length, size_t element_size) {
QueueHandle_t newQueue = xQueueCreate(length, element_size);
return newQueue;
}
uint8_t queue_receive(void *queue, void *message) {
if (xQueueReceive(queue, message, 0) == pdPASS) {
return 1;
} else {
return 0;
}
}
uint8_t queue_send(void *queue, void *message) {
if (xQueueSend(queue, message, 0) != pdPASS) {
return 1;
} else {
return 0;
}
}