[开发工具] 信号量:按键切换异常

[复制链接]
22|10
梧桐uuu 发表于 2026-4-19 20:41 | 显示全部楼层 |阅读模式
我创建了3 个任务:高优先级、普通(中)优先级、低优先级。无法实现高 / 中 / 低三个优先级任务的预期调度逻辑
预期的执行逻辑:
首先执行高优先级任务,执行完成后退出高优先级任务;
接着进入中优先级任务,并等待用户按键按下;
如果按键被按下 ,进入低优先级任务,执行后退出;
如果按键未被按下 ,回到高优先级任务重新执行。
现在无法实现这个逻辑

公羊子丹 发表于 2026-4-20 08:08 | 显示全部楼层
我怀疑你信号量创建或释放逻辑不对,高优先级跑完没给中优先级发同步信号,导致中优先级根本没机会运行,你先检查一下同步流程。
周半梅 发表于 2026-4-20 08:11 | 显示全部楼层
你是不是把按键检测放在死循环里没做阻塞?中优先级任务一直占着CPU,高优先级没法抢占,调度自然乱了,加个延时试试。
帛灿灿 发表于 2026-4-20 08:12 | 显示全部楼层
这问题挺常见的,多任务调度一定要靠信号量或消息队列同步,你光靠优先级切换没用,得让任务主动等待触发条件。
童雨竹 发表于 2026-4-20 08:13 | 显示全部楼层
建议你先把任务逻辑简化,单独测试高→中、中→低的切换,确认每一步都能正常跳转,再合并完整逻辑。
万图 发表于 2026-4-20 08:15 | 显示全部楼层
你有没有给任务设置正确的阻塞状态?高优先级执行完应该主动挂起或延时,不然会一直抢占,中低优先级根本跑不起来。
Wordsworth 发表于 2026-4-20 08:16 | 显示全部楼层
好奇你用的是什么RTOS?不同系统任务调度机制不一样,你可以先打印任务运行状态,看看是哪个环节卡住了。
Bblythe 发表于 2026-4-20 08:17 | 显示全部楼层
我之前做按键切换任务也踩过坑,多半是按键消抖没处理好,信号量重复释放,导致任务切换乱套,加个消抖再试。
Pulitzer 发表于 2026-4-20 08:19 | 显示全部楼层
你可以在每个任务入口加打印信息,看看高优先级是不是跑完就退出了,还是一直在循环抢占CPU,这样能快速定位问题。
Uriah 发表于 2026-4-20 08:20 | 显示全部楼层
中优先级任务等待按键时,一定要用阻塞式等待,不能轮询查询,否则CPU被占死,其他任务完全得不到调度。
Clyde011 发表于 2026-4-20 08:21 | 显示全部楼层
感觉你任务退出和恢复的逻辑没配对,高优先级退出后没唤醒中优先级,你可以用信号量的take和give严格配对试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

139

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0