You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.3 KiB
90 lines
2.3 KiB
/**
|
|
* @file lv_freertos.h
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Copyright 2023 NXP
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#ifndef LV_FREERTOS_H
|
|
#define LV_FREERTOS_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "lv_os.h"
|
|
|
|
#if LV_USE_OS == LV_OS_FREERTOS
|
|
|
|
#if (ESP_PLATFORM)
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
#include "freertos/semphr.h"
|
|
#else
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
#include "semphr.h"
|
|
#endif
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
|
|
/*
|
|
* Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM
|
|
* than unblocking a task using an intermediary object such as a binary semaphore.
|
|
*
|
|
* RTOS task notifications can only be used when there is only one task that can be the recipient of the event.
|
|
*/
|
|
#define USE_FREERTOS_TASK_NOTIFY 1
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
typedef struct {
|
|
void (*pvStartRoutine)(void *); /**< Application thread function. */
|
|
void * xTaskArg; /**< Arguments for application thread function. */
|
|
TaskHandle_t xTaskHandle; /**< FreeRTOS task handle. */
|
|
} lv_thread_t;
|
|
|
|
typedef struct {
|
|
BaseType_t xIsInitialized; /**< Set to pdTRUE if this mutex is initialized, pdFALSE otherwise. */
|
|
SemaphoreHandle_t xMutex; /**< FreeRTOS mutex. */
|
|
} lv_mutex_t;
|
|
|
|
typedef struct {
|
|
#if USE_FREERTOS_TASK_NOTIFY
|
|
TaskHandle_t xTaskToNotify;
|
|
#else
|
|
BaseType_t
|
|
xIsInitialized; /**< Set to pdTRUE if this condition variable is initialized, pdFALSE otherwise. */
|
|
SemaphoreHandle_t xCondWaitSemaphore; /**< Threads block on this semaphore in lv_thread_sync_wait. */
|
|
uint32_t ulWaitingThreads; /**< The number of threads currently waiting on this condition variable. */
|
|
SemaphoreHandle_t xSyncMutex; /**< Threads take this mutex before accessing the condition variable. */
|
|
BaseType_t xSyncSignal; /**< Set to pdTRUE if the thread is signaled, pdFALSE otherwise. */
|
|
#endif
|
|
} lv_thread_sync_t;
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
#endif /*LV_USE_OS == LV_OS_FREERTOS*/
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif /*LV_FREERTOS_H*/
|
|
|