FreeRTOS xTaskCreate()
1、xTaskCreate()函数
创建任务使用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);
参数:pvTaskCode,任务是永不退出的C函数,实现通常是一个死循环。参数pvTaskCode一个指向任务的实现函数的指针(效果上仅仅是函数名)。
pcName,具有描述性的任务名。这个参数不会被FreeRTOS使用。其只是单纯地用于辅助调试。识别一个具有可读性的名字总是比通过句柄来识别容易得多。
注:应用程序可以通过定义常量config_MAX_TASK_NAME_LEN来定义任务名的最大长度——包括‘\0’结束符 。如果传入的字符串长度超过了这个最大值,字符串会被自动截断。
usStackDepth,当任务创建时,内核会为每个任务分配属于任务自己的唯一状态。usStackDepth值用于告诉内核为它分配多大的栈空间。
注:这个值指定的栈空间可以保存保存多少个字(word),而不是多少个字节(byte)。栈的深度乘以栈宽度的结果千万不能超过一个size_t类型变量所能表达的最大值。
应用程序通常定义常量configMINIMAL_STACK_SIZE来决定空闲任务的栈空间大小。在FreeRTOS为微控制器架构提供的Demo应用程序中,赋予此常量的值是对所有任务的最小建议值。如果你的任务会使用大量栈空间,那么你应该赋予一个更大的值。没有任何简单的方法可以决定一个任务到底需要多大的栈空间。一般会赋予一个自认为合理的值。
pvParameters,任务函数接收一个指向void的指针。pvParameters的值即是传递到任务中的值。
uxPriority,指定执行的优先级。优先级的取值范围可以从最低优先级0到最高优先级(configMAX_PRIORITIES-1)。
注 :configMAX_PRIORITIES是一个由用户定义的常量。优先级号并没有上限(除了受限于采用的数据类型和系统的有效内存空间),但最好使用实际需要的最小数值以避免内存的浪费。如果uxPriority的值超过了configMAX_PRIORITIES-1,将会导致实际赋给任务的优先级被自动封顶到最大合法值。
pxCreatedTask,pxCreatedTask用于传出任务的句柄。这个句柄将在API调用中对该创建出来的任务进行引用,比如改变任务优先级或者删除任务。如果应用程序中不会用到这个任务的句柄,则pxCreatedTask可以被设为NULL。
返回值:pdTRUE,创建任务成功。
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY,由于内存堆空间不足,FreeRTOS无法分配足够的空间来保存任务结构数据和任务栈,因此无法创建任务。