任务可以使用API函数 vTaskDelete() 删除自己或其他任务。
空闲任务的责任是要将分配给已删除任务的内存释放掉。注意:只有内核为任务分配的内存空间才会在任务被删除后自动回收,任务自己占用的内存或资源需要由应用程序自己显式地释放。
void vTaskDelete( xTaskHandle pxTaskToDelete );
其中pxTaskToDelete 被删除任务的句柄(目标任务) 。可参照创建任务时使用 FreeRTOS 的API 函数xTaskCreate(),
portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode,
const signed portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pxCreatedTask );
其中pxCreatedTask 用于传出任务的句柄。这个句柄将在API 调用中对该创建出来的任务进行引用,比如改变任 务优先级,或者删除任务。如果应用程序中不会用到这个任务的句柄,则pxCreatedTask 可以被设为NULL。
任务可以通过传入NULL值来删除自己。
例程如下:
/* main() 函数实现 */
int main( void )
{
/* 任务1创建在优先级1上 */
xTaskCreate( vTask1, "Task 1", 1000, NULL, 1, NULL );
/* 任务1以优先级 1创建 */
/* 开启任务调度器,执行任务1 */
vTaskStartScheduler();
/* main() should never reach here as the scheduler has been started. */
for( ;; );
}
/*任务1 代码*/
void vTask1( void *pvParameters )
{
const portTickType xDelay100ms = 100 / portTICK_RATE_MS; /*当前的每个tick的MS值为100*/
for( ;; )
{
/* Print out the name of this task. */