硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5098|回复: 9
收起左侧

[FreeRTOS] xTaskCreate的第四个参数有什么特别用法

[复制链接]

5

主题

87

回帖

102

积分

初级会员

积分
102
发表于 2018-10-28 21:48:07 | 显示全部楼层 |阅读模式
xTaskCreate( TaskFunction_t pxTaskCode,
       const char * const pcName,
       const configSTACK_DEPTH_TYPE usStackDepth,
       void * const pvParameters,
       UBaseType_t uxPriority,
       TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;

之前在使用的时候都是写NULL,不知道这个参数在哪些环境下会被用到,写入的参数能做些什么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106978
QQ
发表于 2018-10-29 00:31:24 | 显示全部楼层
这个是任务句柄,用到的地方很多,比如任务的删除,挂起等操作。
回复

使用道具 举报

5

主题

87

回帖

102

积分

初级会员

积分
102
 楼主| 发表于 2018-10-29 17:01:13 | 显示全部楼层
eric2013 发表于 2018-10-29 00:31
这个是任务句柄,用到的地方很多,比如任务的删除,挂起等操作。

TaskHandle_t 是任务句柄吗?
我想问的是“ void * const pvParameters”这条参数
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-10-29 21:25:59 | 显示全部楼层
游在云间 发表于 2018-10-29 17:01
TaskHandle_t 是任务句柄吗?
我想问的是“ void * const pvParameters”这条参数

参数,例如带个结构体指针等等,或者指定的信号量,很多很多东西
回复

使用道具 举报

5

主题

87

回帖

102

积分

初级会员

积分
102
 楼主| 发表于 2018-10-29 22:07:26 | 显示全部楼层
在水一方 发表于 2018-10-29 21:25
参数,例如带个结构体指针等等,或者指定的信号量,很多很多东西

可以具体举个例子吗?不明白怎么使用
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2018-10-30 00:17:23 | 显示全部楼层
QQ截图20181030001710.png
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

0

主题

105

回帖

105

积分

初级会员

积分
105
发表于 2018-10-30 09:12:06 | 显示全部楼层
假设你的任务体是 void task(const void* para);
你问的那个参数最终就是传入任务的指针  *para,当1个函数体被创建成多个任务的时候,可以通过传入的这个参数来进行判断
或者可以把某个句柄、内存地址通过这个指针穿进去,以实现传输“对象”的概念。例如传不同的串口句柄,可以以同样的流程操作不同的串口,你在修改串口指向的时候就不需要再修改函数体本身了
回复

使用道具 举报

5

主题

87

回帖

102

积分

初级会员

积分
102
 楼主| 发表于 2018-10-30 21:39:19 | 显示全部楼层
barryxiao 发表于 2018-10-30 09:12
假设你的任务体是 void task(const void* para);
你问的那个参数最终就是传入任务的指针  *para,当1个函 ...

非常感谢,您的回答非常完美的解决了我的疑问。
但是我还是理解的不够透彻,请问有相关的资料可以分享一下吗?
回复

使用道具 举报

36

主题

2040

回帖

2148

积分

至尊会员

积分
2148
发表于 2018-10-31 09:58:03 | 显示全部楼层
这个是多任务的例化,多个任务使用同一个函数,可以通过此参数做不同任务执行状态区分,FreeRTOS的定时器组学习了没有,一个道理。
1.png
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

0

主题

105

回帖

105

积分

初级会员

积分
105
发表于 2018-10-31 11:11:32 | 显示全部楼层
游在云间 发表于 2018-10-30 21:39
非常感谢,您的回答非常完美的解决了我的疑问。
但是我还是理解的不够透彻,请问有相关的资料可以分享一 ...

不好意思,我也没有在哪看到能系统学习这些知识,都是自己照着指针的应用来做的野路子

你就单独把这个参数当做一个指针就好了,指针能传递的东西他都能传递,例如类对象、结构体、邮箱信号量句柄、数字、地址、函数入口这些都可以用这个参数来传递。
剩下的就看你想怎么用这个参数了,还可以把这个参数的指针作为一个回调,来达到“任务同步”、“数据传递”的功能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 07:14 , Processed in 0.180368 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表