4.1接着我们来看创建任务的基本步奏
第一步:调用创建任务的API(Application Programming Interface的缩写)xTaskCreate()或者xTaskCreateStatic(),一种是动态创建,另一种为静态创建(高级用法),动态创建是通过“堆内存来分布的”
如果需要查看API函数的用法,可以查看官网手册:https://www.freertos.org/media/2025/FreeRTOS_Reference_Manual_V8.2.1.pdf
接着我们来看xTaskCreate()函数的用法,返回值用来表示任务是否被创建成功,如果返回的是pdPASS则表示任务创建成功,如果是其它值则表示任务创建失败。
参数1:任务的函数名
参数2:自己给任务取得名字
参数3:调用任务栈的深度(一般填128,为128*4个字节)
参数4:任务参数
参数5:任务优先级,在freertos数值越高,优先级越高(0-configMAX_PRIORITIES-1)
参数6:任务句柄,创建好变量,函数会将任务信息保存在任务句柄中
4.2任务的状态
freertos有2种执行任务的模式,1:协作式调度调度器同样优先选择高优先级的任务执行来执行,但只有当前任务主动让出控制权的时候才会发生切换。2:抢占式调度(Preemptive Scheduling)调度器总是选择更高优先级的任务来执行,当高优先级的任务就绪的时候当前任务会立刻被抢占。
文件:工程根目录\FreeRTOS\Inc\FreeRTOSConfig.h
/* 如果configUSE_PREEMPTION被设置为1,则使用抢占式调度
如果configUSE_PREEPTION被设置为0,则使用协作式调度 */
#defineconfigUSE_PREEMPTION 1(1为带时间片)
带时间片的抢占式调度和不带时间片的抢占式调度
带时间片的抢占式调度:对于优先级相同的任务,隔一段时间执行下一个任务
时间片的长度为:两次SYSTICK溢出的时间间隔。
// 用来设置SYSTICK中断的频率,单位是赫兹
#defineconfigTICK_RATE_HZ 100