硬汉嵌入式论坛

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

[FreeRTOS] FreeRTOS任务切换的问题

[复制链接]

3

主题

8

回帖

17

积分

新手上路

积分
17
发表于 2018-7-24 09:42:34 | 显示全部楼层 |阅读模式
我是一个新手,在创建两个相同的任务,做LED闪烁时遇到的问题是先创建的任务可以按延时时间正常延时,后创建的任务会很快的被切换出去
1532396247(1).jpg 1532396307(1).jpg
如图,不管哪一个任务后被创建,都会出现后创建的任务执行时间只有一瞬间。

回复

使用道具 举报

10

主题

140

回帖

170

积分

初级会员

积分
170
发表于 2018-7-24 10:22:01 | 显示全部楼层
本帖最后由 lvehe 于 2018-7-24 10:28 编辑

你这样的2个任务,由于优先级相同,且没有主动放弃CPU的使用仅,另外一个任务根本没有办法得到执行。
不能用HAL_Delay(),改为vTaskDelay(1000);试试吧,vTaskDelay会使内核调用任务调度函数使任务之间发生切换。
回复

使用道具 举报

3

主题

8

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2018-7-24 10:28:05 | 显示全部楼层
lvehe 发表于 2018-7-24 10:22
你这样的2个任务,由于优先级相同,且没有主动放弃CPU的使用仅,如果没有开启round-robin的话,另外一个任 ...

截图截错了  是用的vTaskDelay,后创建的任务执行时间很短
回复

使用道具 举报

10

主题

140

回帖

170

积分

初级会员

积分
170
发表于 2018-7-24 10:32:39 | 显示全部楼层
2个任务的执行时间应该差不多,你不能用LED灯的亮灭时间来判断他们的执行时间。因为你2个任务操作的是同一个LED。
一个任务点亮之后,立马又执行另一个任务将它熄灭了。这样就会照成熄灭的任务执行时间长的假象。其实2个任务都在休眠。
回复

使用道具 举报

3

主题

8

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2018-7-24 10:45:54 | 显示全部楼层
lvehe 发表于 2018-7-24 10:32
2个任务的执行时间应该差不多,你不能用LED灯的亮灭时间来判断他们的执行时间。因为你2个任务操作的是同一 ...

创建的任务只有这两个,所以应该是按1s的延时toggle的,我也用示波器看了,执行时间很短的任务对应的电平确实很短,只有几个毫秒
回复

使用道具 举报

10

主题

140

回帖

170

积分

初级会员

积分
170
发表于 2018-7-24 10:52:12 | 显示全部楼层
如果你用2个LED,使用HAL_GPIO_TogglePin来控制亮灭,相信你会看到2个LED同时亮灭1s的现象。
回复

使用道具 举报

3

主题

8

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2018-7-24 12:08:36 | 显示全部楼层
lvehe 发表于 2018-7-24 10:52
如果你用2个LED,使用HAL_GPIO_TogglePin来控制亮灭,相信你会看到2个LED同时亮灭1s的现象。

是的 两颗LED就现象正常,但是为什么以上的情况就不行呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 04:41 , Processed in 0.259382 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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