ESP32-P4 OBC Firmware
ESP-IDF firmware for Plant-B CubeSat OBC
 
Loading...
Searching...
No Matches
FreeRTOS Utilities

Data Structures

struct  rtos_instance_t
 Instance of a FreeRTOS task. More...
 

Enumerations

enum  rtos_event_t { RESEND_SENSOR = 0 , RESEND_IMAGE , RESEND_VIDEO }
 Event types posted to the memory event queue. More...
 

Functions

BaseType_t task_create (TaskFunction_t pxTaskCode, rtos_instance_t *inst, void *const pvParameters)
 Create a FreeRTOS task using the provided instance parameters.
 
void log_watermark (const rtos_instance_t *const inst)
 Log the high-water mark (stack usage in bytes) of a FreeRTOS task.
 
void log_info (const rtos_instance_t *const inst)
 Log general task information in a human-readable way.
 
pal_err_t sensor_queues_init (void)
 Create and initialize all sensor measurement queues.
 
pal_err_t system_queues_init (void)
 Create and initialize all system queues.
 

Sensor Queues

FreeRTOS queues carrying measurements from each sensor task.

QueueHandle_t queue_scd30
 SCD30 measurement queue.
 
QueueHandle_t queue_veml7700
 VEML7700 measurement queue.
 
QueueHandle_t queue_bme280
 BME280 measurement queue.
 

System Queues

FreeRTOS queues used by the aggregation, packet and memory tasks.

QueueHandle_t queue_sens_agg
 Aggregated sensor payload queue.
 
QueueHandle_t queue_pkt_tx
 New outgoing packets queue.
 
QueueHandle_t queue_pkt_rx
 Inbound packet queue.
 
QueueHandle_t queue_pkt_retx
 Stored outgoing packet queue.
 
QueueHandle_t queue_mem_evt
 Memory task event queue.
 

Core Definitions

CPU core identifiers

#define CORE0   (0)
 CPU core 0.
 
#define CORE1   (1)
 CPU core 1.
 

General Macros

#define WORD_LEN_BYTE   (4)
 Word length in bytes.
 
#define BASIC_QUEUE_DEPTH   (5)
 Default number of items a queue can hold.
 
#define SENSOR_RESEND_QUEUE_DEPTH   (32)
 Depth for the sensor data retransmission queue.
 
#define NOT_SET   (255)
 Sentinel value for uninitialized fields.
 

Detailed Description

A collection of useful ESP-IDF FreeRTOS wrappers.


Data Structure Documentation

◆ rtos_instance_t

struct rtos_instance_t

Instance of a FreeRTOS task.

Stores the task handle and its configuration parameters.

Data Fields
const BaseType_t CORE CPU core for pinning the task.
const UBaseType_t PRIORITY Task priority.
const uint32_t STACK_SIZE Task stack size in words.
const char *const TAG Tag used for logging.
TaskHandle_t task_handle FreeRTOS task handle.

Macro Definition Documentation

◆ BASIC_QUEUE_DEPTH

#define BASIC_QUEUE_DEPTH   (5)

Default number of items a queue can hold.

◆ CORE0

#define CORE0   (0)

CPU core 0.

◆ CORE1

#define CORE1   (1)

CPU core 1.

◆ NOT_SET

#define NOT_SET   (255)

Sentinel value for uninitialized fields.

◆ SENSOR_RESEND_QUEUE_DEPTH

#define SENSOR_RESEND_QUEUE_DEPTH   (32)

Depth for the sensor data retransmission queue.

◆ WORD_LEN_BYTE

#define WORD_LEN_BYTE   (4)

Word length in bytes.

Enumeration Type Documentation

◆ rtos_event_t

Event types posted to the memory event queue.

Enumerator
RESEND_SENSOR 

Request to transmit a stored sensor payload.

RESEND_IMAGE 

Request to transmit a stored image.

RESEND_VIDEO 

Request to transmit a stored video clip.

Function Documentation

◆ log_info()

void log_info ( const rtos_instance_t *const inst)

Log general task information in a human-readable way.

The following information is logged:

  • Core ID.
  • Current state.
  • Current priority level.
  • Current high-water mark.
Parameters
instPointer to the rtos_instance_t structure.
Note
Pass NULL if calling this function from within the task itself.

◆ log_watermark()

void log_watermark ( const rtos_instance_t *const inst)

Log the high-water mark (stack usage in bytes) of a FreeRTOS task.

Uses FreeRTOS uxTaskGetStackHighWaterMark() internally.

See also
uxTaskGetStackHighWaterMark() from FreeRTOS for more details.
Parameters
instPointer to the rtos_instance_t structure.
Note
Pass NULL if calling this function from within the task itself.

◆ sensor_queues_init()

pal_err_t sensor_queues_init ( void )

Create and initialize all sensor measurement queues.

Initializes the following queues:

  • queue_scd30 to hold sensor payload part items of type scd30_meas_t.
  • queue_veml7700 to hold sensor payload part items of type veml7700_meas_t.
  • queue_bme280 to hold sensor payload part items of type bme280_meas_t.

All queues can hold BASIC_QUEUE_DEPTH items.

See also
payload_utils.h for payload item types.
Return values
PAL_OKOn success.
PAL_ERR_INVALID_ARGOne or more queues could not be created.

◆ system_queues_init()

pal_err_t system_queues_init ( void )

Create and initialize all system queues.

Initializes the following queues:

  • queue_sens_agg to hold sensor paylaod items of type sensor_payload_t.
  • queue_pkt_tx to hold packet items of type packet_t.
  • queue_pkt_rx to hold packet items of type packet_t.
  • queue_pkt_retx to hold packet memory indexes of type uint8_t.
  • queue_mem_evt to hold RTOS event items of type rtos_event_t.

Queues can hold BASIC_QUEUE_DEPTH items, except queue_pkt_retx which is of depth SENSOR_RESEND_QUEUE_DEPTH.

See also
payload_utils.h for payload item types and packet_utils.h for packet items type.
Return values
PAL_OKOn success.
PAL_ERR_INVALID_ARGOne or more queues could not be created.

◆ task_create()

BaseType_t task_create ( TaskFunction_t pxTaskCode,
rtos_instance_t * inst,
void *const pvParameters )

Create a FreeRTOS task using the provided instance parameters.

Uses FreeRTOS xTaskCreatePinnedToCore() internally.

See also
xTaskCreatePinnedToCore() from FreeRTOS for more details.
Parameters
[in]pxTaskCodePointer to the task function.
[in,out]instPointer to a preconfigured rtos_instance_t structure.
[in]pvParametersParameters to pass to the task function.
Returns
Any BaseType_t value from xTaskCreatePinnedToCore().

Variable Documentation

◆ queue_bme280

QueueHandle_t queue_bme280
extern

BME280 measurement queue.

◆ queue_mem_evt

QueueHandle_t queue_mem_evt
extern

Memory task event queue.

◆ queue_pkt_retx

QueueHandle_t queue_pkt_retx
extern

Stored outgoing packet queue.

◆ queue_pkt_rx

QueueHandle_t queue_pkt_rx
extern

Inbound packet queue.

◆ queue_pkt_tx

QueueHandle_t queue_pkt_tx
extern

New outgoing packets queue.

◆ queue_scd30

QueueHandle_t queue_scd30
extern

SCD30 measurement queue.

◆ queue_sens_agg

QueueHandle_t queue_sens_agg
extern

Aggregated sensor payload queue.

◆ queue_veml7700

QueueHandle_t queue_veml7700
extern

VEML7700 measurement queue.