osThreadAttr_t - структура атрибутов для создания потока / задачи в CMSIS-RTOS2

Структура атрибутов, используемая функцией osThreadNew() при создании нового потока / задачи.

/// Attributes structure for thread.

typedef struct {
   const char        *name;       /// name of the thread
   uint32_t          attr_bits;   /// attribute bits
   void              *cb_mem;     /// memory for control block
   uint32_t          cb_size;     /// size of provided memory for control block
   void              *stack_mem;  /// memory for stack
   uint32_t          stack_size;  /// size of stack
   osPriority_t      priority;    /// initial thread priority (default: osPriorityNormal)
   TZ_ModuleId_t     tz_module;   /// TrustZone module identifier
   uint32_t          reserved;    /// reserved (must be 0)
} osThreadAttr_t;


Поля структуры

const char *
name
Указатель на строку с удобочитаемым именем задачи (используется при отладке)

По умолчанию: NULL - имя не задано, отладчик отображает имя функции как имя задачи.

uint32_t
attr_bits
Биты атрибутов. Битовое поле используется для установки следующих опций:
// Thread attributes (attr_bits in \ref osThreadAttr_t).
#define osThreadDetached      0x00000000U   /// Thread created in detached mode (default)
#define osThreadJoinable      0x00000001U   /// Thread created in joinable mode
#define osThreadUnprivileged  0x00000002U   /// Thread runs in unprivileged mode
#define osThreadPrivileged    0x00000004U   /// Thread runs in privileged mode
#define osThreadZone (n)                    /// n - MPU zone value in attribute bit field format.
#define osSafetyClass (n)                   /// n - Safety class value in attribute bit field format

По умолчанию: 0 - никакие атрибуты задачи не установлены.

void *
*cb_mem
Указатель на область памяти где размещён блок управления задачей. Устанавливается в случае распределения памяти пользователем (User-defined Allocation).

По умолчанию: NULL - используется автоматическое распределение памяти (Automatic Dynamic Allocation).

uint32_t
size
Размер (в байтах) области памяти где размещён блок управления задачей, передаваемый указателем *cb_mem.

По умолчанию: 0 - используется автоматическое распределение памяти (Automatic Dynamic Allocation) и *cb_mem не передаётся.

void *
*stack_mem
Указатель на область памяти где размещён стек потока.

По умолчанию: NULL - память для стека предоставляется системой на основе конфигурации ядра FreeRTOS.

uint32_t
stack_size
Размер стека (в байтах).

По умолчанию: 0 - определяется системой.

osPriority_t
priority
Начальный приоритет выполнения задачи. Задаётся значением из перечисления osPriority_t (enum osPriority_t)

По умолчанию: osPriorityNormal.

TZ_ModuleId_t
tz_module
Идентификатор модуля TrustZone.
#ifndef  TZ_MODULEID_T
#define  TZ_MODULEID_T
/// \details Data type that identifies secure software modules called by a process.
typedef  uint32_t  TZ_ModuleId_t;
#endif

По умолчанию: 0.

uint32_t
affinity_mask
Маска для привязки задачи к ядру в многоядерных микроконтроллерах. Макрос osThreadProcessor создаёт значение маски

По умолчанию: 0 - маска не используется.




Примечание

Биты атрибутов определены как макросы и описаны в разделе Macro Definition. Используемые биты атрибутов описаны в файле cmsis_os2.h и их наличие в файлах библиотеки CMSIS-RTOS2 зависит от номера релиза.