xTaskCreate(), а уничтожаются xTaskDelete().
Функция xTaskCreate() является одной
из наиболее сложных API-функций. Ее про-
тотип:
portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode,
const signed portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pxCreatedTask
);
xTaskCreate() в случае успешного созда-
ния задачи возвращает pdTRUE. Если же
объема памяти кучи недостаточно для раз-
мещения служебных структур данных
и стека задачи, то xTaskCreate() возвращает
errCOULD_NOT_ALLOCATE_REQUIRED_
MEMORY. Функции xTaskCreate() передают-
ся следующие аргументы:
1. pvTaskCode — указатель на функцию, реа-
лизующую задачу (фактически — иденти-
фикатор функции в программе).
2. pcName — нуль-терминальная (заканчива-
ющаяся нулем) cтрока, определяющая имя
функции. Ядром не используется, а служит
лишь для наглядности при отладке.
3. usStackDepth — глубина (размер) собствен-
ного стека создаваемой задачи. Размер зада-
ется в словах, хранящихся в стеке, а не в бай-
тах. Например, если стек хранит 32-битные
слова, а значение usStackDepth задано рав-
ным 100, то для размещения стека задачи
будет выделено 4100 = 400 байт. Размер
стека в байтах не должен превышать мак-
симального значения для типа size_t. Размер
стека, необходимый для корректной работы
задачи, которая ничего не делает (содержит
только пустой бесконечный цикл, как за-
дача ATaskFunction выше), задается макро-
сом configMINIMAL_STACK_SIZE. Не ре-
комендуется создавать задачи с меньшим
размером стека. Если же задача потребляет
большие объемы стека, то необходимо за-
дать большее значение usStackDepth. Нет
простого способа определить размер сте-
ка, необходимого задаче. Хотя возможен
точный расчет, большинство програм-
мистов находят золотую середину между
требованиями выделения достаточного
размера стека и эффективного расхода па-
мяти. Существуют встроенные механизмы
экспериментальной оценки объема ис-
пользуемого стека, например API-функция
Достарыңызбен бөлісу: |