首先我们需要有一个创建好的工程,这里用的开发环境是keil
一、xTaskCreate函数分析
1.函数介绍
BaseType_t xTaskCreate(
TaskFunction_t pvTaskCode,
const char * const pcName,
configSTACK_DEPTH_TYPE usStackDepth,
void *pvParameters,
UBaseType_t uxPriority,
TaskHandle_t *pxCreatedTask
);
xTaskCreate 是 FreeRTOS 中用于创建任务的函数,属于动态内存分配方式的任务创建接口。该函数通过分配堆内存来存储任务栈和任务控制块(TCB),适用于资源允许动态分配的场景。
2.参数解释
- pvTaskCode:任务入口函数指针,需为 void vTaskFunction(void *pvParameters) 形式。
- pcName:任务名称字符串,用于调试和追踪,长度受 configMAX_TASK_NAME_LEN 限制。
- usStackDepth:任务栈深度,单位为字(Word)。例如,若栈需 1024 字节且字长为 32 位,则设为 256(1024/4)。
- pvParameters:传递给任务的参数指针,可为 NULL。
- uxPriority:任务优先级(0 为最低,configMAX_PRIORITIES-1 为最高)。
- pxCreatedTask:输出参数,返回任务句柄,可用于后续操作(如删除任务)。
二、实战例子
1.找到freertos.c文件
打开keil工程,左边的Application/User/Core文件路径中双击打开,里面就有freertos.c

2.编写任务入口函数指针
把文件拖到最下方,会有一个void StartDefaultTask(void *argument)函数,这是默认的任务,复制他的格式。

仿照他的格式,写一个新函数,这个函数的内容就是新任务执行的内容,函数的名字可以自定义。这里我用的名字是FirstTask。函数内容可以写自己需要的,例如我这里是实现led一秒翻转一次电平。

3.使用xTaskCreate 创建任务
六个参数在前面已经解释过了,这里不再赘述。直接贴上我的测试代码。
到这里,工程默认的任务void StartDefaultTask(void *argument)加上我们创建的这个任务,我们就有两个任务了。实现了一个多任务,想到实现更多任务,依次就行前面的流程即可。
xTaskCreate(FirstTask,"TaskName",128,NULL,osPriorityNormal,NULL);
4.进行烧录检验
烧录完没反应可以试着按一下RESET复位一下。可以在keil中配置自动复位运行代码。
(1)点击魔术棒

(2)点击Debug,再点击Settings

(3)点击Flash Download,勾选上Reset and Run

(4)最后点击确定即可。
三、总结
FreeRtos创建多任务核心分两步



