Создание задачи внутри другой задачи в freertos
Я новичок в RTOS и создаю простую систему реального времени для автомобильной промышленности.
Мне интересно, возможно ли создать задачу внутри другой задачи. Я попытался сделать это следующим способом, но он не работает.
void vTask1 { *pvParameters){
unsigned portBASE_TYPE taskPriority;
taskPriority=uxTaskPriorityGet( NULL );
char x;
while (1){
x= 5 ;
if (x==5)
xTaskCreate( vTask2 , "task2", 1000, "task2 is running", taskPriority+5 , NULL );
}
когда я отлаживаю этот код, он висит на xTaskCreate, не выполняя новую задачу, и я искал руководство и интернет что-то об этом, но я не нашел ничего.
кто-нибудь скажет мне, что это можно сделать в RTOS или я делаю это неправильно?
2 ответа
Задачи могут быть созданы до того, как планировщик был запущен (из основной), или после того, как планировщик был запущен (из другой задачи). Документация по API xTaskCreate() находится здесь: http://www.freertos.org/a00125.html. Вы также найдете набор демонстрационных задач, демонстрирующих создание и удаление задач из другой задачи, в основной загрузке файла FreeRTOS .zip. Посмотрите в файле FreeRTOS/Demo/Common/Minimal/death.c (смерть для самоубийственных заданий, когда они удаляются после создания).
Если xTaskCreate() вернет NULL, возможно, вам не хватило места в куче. См. http://www.freertos.org/a00111.html. Я думаю, что большинство из сотен или предварительно сконфигурированных примеров, которые входят в загрузку zip-файла, имеют комментарии на этот счет.
Проверьте возвращаемое значение xTaskCreate api.
еще одна вещь, вторая задача, которую вы создаете, это vtask2, который имеет более низкий приоритет, чем vtask1 того, кто создает. И vtask1 работает в то время как планировщик (1) не будет планировать vtask2. Вы можете отложить или приостановить vtask1 после создания vtask2.
тогда vtask2 может выполнить.