FreeRTOS学习笔记2
FreeRTOS函数原型解析:
portBASE_TYPE xTaskCreate(
pdTASK_CODE pvTaskCode,
const signed portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,、
xTaskHandle *pxCreatedTask );
参数名:pvTaskCode 实现函数的指针,无实际意义,和函数名类似。
参数名:pcName 调试时描述任务的别名,系统不会调用, 通过定义常量 config_MAX_TASK_NAME_LEN 来定义任务名的最大长度。
参数名:usStackDepth 在任务创建时所分配的空间,需注意这个值是表示 字(WORD)而不是字节(byte),如果是32位的栈空间,
传入的值为100。那么分配的 空间为400字节(100*4byte)。栈深度乘以栈宽度的结果千万不能超过一个size_t 类型变量所能表达的最大值。
应用程序通过定义常量configMINIMAL_STACK_SIZE 来决定空闲 任务任用的栈空间大小。这个值一般是所有任务的最小建议值。
参数名:pvParameters
参数名:uxPriority 指定任务执行的优先级。优先级的取值范围可以从最低优先级0 到 最高优先级(configMAX_PRIORITIES – 1)。 configMAX_PRIORITIES 由用户定义的常量。一般设置为最大任务数量即可。过大会产生内存浪费
参数名:pxCreatedTask 用于传出任务的句柄。这个句柄将在API 调用中对 该创建出来的任务进行引用,比如改变任务优先级,或者删除任务。 如果应用程序中不会用到这个任务的句柄,则pxCreatedTask 可以 被设为NULL。
返回值:任务有两个可能的返回值 pdTRUE 用于表明任务创建成功 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 由于内存堆空间不足,无法分配足够的空间保存任务结构数据和任务栈, 无法创建任务。
一个典型的任务函数:
void vTask1( void *pvParameters )
{
const char *pcTaskName = "Task 1 is running\r\n"; volatile unsigned long ul;
/* 和大多数任务一样,该任务处于一个死循环中。 */
for( ;; )
{
/* Print out the name of this task. */
vPrintString( pcTaskName );
/* 延迟,以产生一个周期 */
for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
{
/* 这个空循环是最原始的延迟实现方式。在循环中不做任何事情。后面的示例程序将采用 delay/sleep函数代替这个原始空循环。 */
}
}
}