xTaskCreate 任务创建 API 函数

lichongyang
lichongyang
lichongyang
110
文章
0
评论
2020年1月10日14:35:37 评论 502 次浏览

xTaskCreate

函数名 :xTaskCreate 头文件 :task.h 函数功能:任务创建 函数声明:

portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pvCreatedTask );

如果使用FreeRTOS-MPU,建议使用 xTaskCreateRestricted()来替换xTaskCreate()。 在FreeRTOS-MPU 下使用xTaskCreate(),允许任务被创建于运行在特权模式或者用户模式。(见uxPriority 的描述)。特权模式下,可以利用任务访问整个存储器空间,用户模式下,任务只能访问自己的堆栈。在两种情况下,MPU 不会自动捕获堆栈溢出,虽然标准的FRTOS堆栈溢出检测方案依然可以使用。xTaskCreateRestricted() 允许了更大的灵活性。 【具体参数】 pvTaskCode :指向任务函数。任务必须以永不返回的形式实现(比如一个死循环)。笔者注释:这个参数即任务函数的函数名,见下文描述。 pcName : 任务函数的别名,仅仅是方便调试所用。最大的长度由configMAX_TASK_NAME_LEN定义。 usStackDepth :任务堆栈的深度,定义了堆栈可以包含的变量数——不是字节数。比如如果堆栈的宽度为16BIT,而 usStackDepth定义为100,则200 字节被分配给堆栈存储。堆栈深度乘以堆栈宽度的最大值,不能超过 size_t变量能包含的最大值。(笔者注释:堆栈到底应该定义多大,大体要考虑到:

  1. 最大级别中断嵌套需要的堆栈;
  2. 由于RTOS 生成每个任务,该任务天生需要的堆栈,FRTOS至少是16个字节,随着翻译深入会确认这个问题;
  3. 在每个任务函数中定义局部变量而产生的任务函数的变量堆栈。3者相加即为一个合适的堆栈。)

pvParameters :作为参数的指针,当任务创建时。 uxPriority :任务的优先级。包括MPU支持的系统可以选择在特权模式(系统模式)创建任务,通过设置优先级参数的portPRIVILEGE_BIT位。比如,创建一个特权任务在优先级2,则uxPriority 应当设置为( 2 | portPRIVILEGE_BIT )。 pvCreatedTask :回传一个句柄,以便创建的任务可以被关联。返回值:pdPASS,如果任务成功创建且添加到就绪列表,否则返回一个错误代码,见 projdefs.h。

void vTaskCode( void * pvParameters )//创建的任务
{
    //如果有初使化,放在死循环之前
    for( ;; ) //一个死循环
    {
     //任务代码
    }
}
//此函数创建一个任务
void vOtherFunction( void )
{
    static unsigned char ucParameterToPass;
    xTaskHandle xHandle;
    /*
    创建任务,存储句柄,注意传递的参数 ucParameterToPass必须在任务生存周期内存在,
    故在此例子的情况下定义为局部静态变量。如果它只是一个自动堆栈变量(局部变量),它可能不再存在或者至少崩溃了,当新的任务试图访问时。
    笔者注释:由于该任务一建立就在同一个函数中被删除了,大可以用些局部静态变量和局部变量,如果不是在一个函数中删除之前创建的任务,以上参数请用全局变量。
    */
    xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass,
    tskIDLE_PRIORITY, &xHandle );
    //使用句柄删除任务。
    vTaskDelete( xHandle );
}
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信小程序
  • 我的微信小程序扫一扫
  • weinxin
lichongyang
  • 本文由 发表于 2020年1月10日14:35:37
  • 转载请务必保留本文链接:https://www.chongyangli.com/archives/xtaskcreate-%e4%bb%bb%e5%8a%a1%e5%88%9b%e5%bb%ba-api-%e5%87%bd%e6%95%b0/
FreeRTOS 系统时钟节拍和时间管理 操作系统

FreeRTOS 系统时钟节拍和时间管理

FreeRTOS 的时钟节拍 任何操作系统都需要提供一个时钟节拍,以供系统处理诸如延时、 超时等与时间相关的事件。时钟节拍是特定的周期性中断,这个中断可以看做是系统心跳。 中断之间的时间间隔取决于不同...
物联网的嵌入式编程 操作系统

物联网的嵌入式编程

嵌入式编程在使设备满足人们的需求方面具有悠久的历史。但是,它在很大程度上仍然被应用程序编程所掩盖。当应用程序程序员采用相对高级的面向对象的语言(如C ++或Java)或图形化应用程序开发环境(如MAT...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: