目录
任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。
任务可以被认为是一组函数,它们在运行时相互协作以完成特定的目标。
在 FreeROTS 中,任务可以分配不同的优先级,并按照优先级进行调度。当一个任务没有工作可以做时,操作系统会将 CPU 时间分配给另一个优先级更高的任务,以确保系统的正常运行。
任务通常都含有 while(1) 死循环。
函数名称 | 函数作用 |
xTaskCreate() | 动态方式创建任务 |
xTaskCreateStatic() | 静态方式创建任务 |
vTaskDelete() | 删除任务 |
动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。 通常情况下使用动态方式创建任务。
1. pxTaskCode:指向任务函数的指针,任务必须实现为永不返回(即连续循环);
2. pcName:任务的名字,主要是用来调试,默认情况下最大长度是16;
3. pvParameters:指定的任务栈的大小;
4. uxPriority:任务优先级,数值越大,优先级越大;
5. pxCreatedTask:用于返回已创建任务的句柄可以被引用。
返回值 | 描述 |
pdPASS | 任务创建成功 |
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY | 任务创建失败 |
void vTaskDelete(TaskHandle_t xTaskToDelete);
只需将待删除的任务句柄传入该函数,即可将该任务删除。
当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)。
将FreeRTOS移植到STM32F103C8T6,具体看我写过的文章FreeRTOS移植到STM32F103C8T6
打开freertos.c文件
- void StartTaskLED1(void const * argument)
- {
- for(;;)
- {
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
- osDelay(500);
- }
- }
-
-
- void StartTaskLED2(void const * argument)
- {
- for(;;)
- {
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
- osDelay(1000);
- }
- }