你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRTOS任务切换的问题

[复制链接]
wanyisq 提问时间:2018-7-24 09:43 /
本帖最后由 wanyisq 于 2018-7-24 10:28 编辑

我是一个新手,在创建两个相同的任务,做LED闪烁时遇到的问题是先创建的任务可以按延时时间正常延时,后创建的任务会很快的被切换出去
1532396247(1).jpg 1532396307(1).jpg
如图,不管哪一个任务后被创建,都会出现后创建的任务执行时间只有一瞬间。
抱歉 截图截错了  延时函数用的是vTaskDelay
收藏 1 评论5 发布时间:2018-7-24 09:43

举报

5个回答
狂吠的小疯狗 回答时间:2018-7-25 08:39:31
两个问题.:一优先级,二,延时函数.
创建任务的时候,会执行任务调度. 你可以把后者的 优先级改的比前者的高.试试. 这样后者会正常执行,但是前者就不一定了.因为你用的延时函数 (我没用hal库) 所以不知道你的hal延时函数 兼不兼容操作系统.是不是操作系统的延时函数.还是裸奔的延时函数.  如果是裸奔的延时函数.则你无论怎么修改两个任务 都不能正常运行.
必须要用 操作系统的延时函数才行.

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

wanyisq 回答时间:2018-7-25 09:38:52
狂吠的小疯狗 发表于 2018-7-25 08:39
两个问题.:一优先级,二,延时函数.
创建任务的时候,会执行任务调度. 你可以把后者的 优先级改的比前者的高. ...

延时函数用过hal库的延时函数,也用过操作系统的延时函数,结果都是一样的。改优先级的话,确实是优先级高的会执行
s2333 回答时间:2018-7-25 10:02:49
使用vTaskDelay函数好像是让任务处于阻塞状态,执行别的任务;;;
你可以尝试删掉任务1的vTaskDelay运行看看情况,灯是不是运行的是任务1的操作;;
然后恢复任务1的vTaskDelay,删除任务2的vTaskDelay,再看看情况,灯是不是运行任务2的操作;;
一般来说vTaskDelay让任务处于阻塞,执行别的任务,直到这个时间结束才会跳出阻塞继续执行这个任务;;
讲得不对的地方请指正,我也是个萌新...

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

Lufie 回答时间:2018-8-6 16:49:38

评分

参与人数 1ST金币 -2 收起 理由
zero99 -2 再次警告

查看全部评分

tanic 回答时间:2018-8-6 18:20:03
本帖最后由 tanic 于 2018-8-6 18:25 编辑

看格式应该不是cube生成的工程  延时函数   用   vTaskDelay() 延时
然后两个任务优先级一样    都延时1s   一个任务开灯一个任务关灯,你看到现象就不奇怪了。
然后需要再不同的任务中对同一对象(外设或者大块共享内存等)设进行操作,建议加锁,

1.假如先创建的点灯,  先创建在lsit前面先执行(这个没仔细研究,也许是后执行),点灯,延时任务挂起
2.此时第二个任务获得CPU使用权,灭灯,延时挂机。
3.1秒延时
循环下去,就是你所看到的现象了


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版