硬汉嵌入式论坛

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

[FreeRTOS] 定时器回调函数

[复制链接]

20

主题

72

回帖

132

积分

初级会员

积分
132
发表于 2018-8-14 14:42:55 | 显示全部楼层 |阅读模式
我设置了一个定时器,时间到了进入回调函数,在回调函数中while循环发送数据,直到全部发送完成才跳出while循环,但是发送每条数据之间需要有个短暂的延时请教:
1.我可以在回调函数中调用vtaskdelay延时吗?
2.如果调用了vtaskdelay延时,又不想让任务切换出去(需要把全部数据发送完才能切换到别的任务),应该怎么做



函数大概是这样:
static void vTimerCanTxCallback(xTimerHandle pxTimer)
{
                configASSERT(pxTimer);
                while(a>b)                                                       
                {
                                b++
                                can发送函数
                                vtaskdelay(10)
                }
}
               

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107221
QQ
发表于 2018-8-14 16:25:28 | 显示全部楼层
FreeRTOS的定时器组回调函数里面不能调用带有延迟类功能函数。
你可以创建1个任务,需要处理什么功能了,直接给任务发个消息命令即可,然后在这个任务里面执行相应的功能,如果怕任务切换,就把这个任务优先级设置高些。

QQ截图20180814162229.png




回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2018-8-14 17:52:22 | 显示全部楼层
eric2013 发表于 2018-8-14 16:25
FreeRTOS的定时器组回调函数里面不能调用带有延迟类功能函数。
你可以创建1个任务,需要处理什么功能了, ...

那是不是只能在定时器里置个标志位,然后开个任务来轮询这个标志位了?有更好的办法吗?
回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2018-8-14 17:53:36 | 显示全部楼层
eric2013 发表于 2018-8-14 16:25
FreeRTOS的定时器组回调函数里面不能调用带有延迟类功能函数。
你可以创建1个任务,需要处理什么功能了, ...

可以用自己写的延时函数吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107221
QQ
发表于 2018-8-15 01:24:30 | 显示全部楼层
502398542 发表于 2018-8-14 17:52
那是不是只能在定时器里置个标志位,然后开个任务来轮询这个标志位了?有更好的办法吗?

不用的,你什么时候需要执行的时候,给这个任务发消息即可,比如你这里要发CAN数据,你的应用中应该有要求什么时候发吧。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107221
QQ
发表于 2018-8-15 01:25:27 | 显示全部楼层
502398542 发表于 2018-8-14 17:53
可以用自己写的延时函数吗

可以的,不过定时器任务优先级高的话,影响其它任务的执行,如果你的应用不介意的话,没关系的。
回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2018-8-15 09:30:42 | 显示全部楼层
eric2013 发表于 2018-8-15 01:25
可以的,不过定时器任务优先级高的话,影响其它任务的执行,如果你的应用不介意的话,没关系的。

好的,多谢指点
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 09:32 , Processed in 0.218090 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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