如图,各位大佬,我现在建立了三个任务,三个任务按顺序依次执行,每个任务都有固定的运行时间片,时间片没用完之前,不能执行下个任务,也不能回到任务开头重新执行,只能空等到时间片用完再睡眠自己,然后启动下个任务。我的想法是前一个任务通过信号量控制下一个任务的唤醒,任务—任务2-任务3-任务1,这样就需要3个信号量,总感觉这个办法有些傻,请问各位大佬有更好的办法吗?求指教。
查看更多
按照顺序的话,依次发事件给下一个任务?每个任务永远等待事件发生。
不知道是否符合你的需求?
三个任务,要么定时唤醒运行,要么其他任务去触发它们动作,总需要信号去触发
你这需求属于多事务时间顺序管理型应用,应该放到一个线程中完成,每个事务都可以在一个单独的模块中实现。事务1处理->等事务1剩余时间->事务2处理->……
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
请问发事件与释放信号量,有什么不一样呢
你发帖中,不是提到,你的方案需要三个信号量吗?
事件标志组只需要1个,可以最多设置32个事件。
我有一个小疑惑,既然是顺序执行,为什么不将这些功能放入到同一个线程中?就像函数一样,依次调用即可。
当然,涉及到你项目的具体需求和隐私,就不用回复了。
是这样的,因为每个任务从这次执行到下次执行之间的时间间隔必须是固定的,如果把几个任务换成函数的话,前一个函数每次执行的时间是变化的,将导致后一个函数两次执行的时间间隔无法保证固定。所以要使用几个任务,然后每个任务都固定周期。
你可以用rt_thread_delay_until函数,它符合你的需求,保证任务执行周期是绝对的,即使每次各个函数执行时间存在偏差,但是线程两次间隔是准确的。
类似于FreeRTOS的vTaskDelayUntil功能。
另,4.0.3版本的这个函数实现稍微有些bug,4.0.5中应该已经改正过来了。如果你用4.0.3或以下版本,你可以将4.0.5的该函数复制到你的os版本中。
还有就是,FreeRTOS有一个xEventGroupSync函数,也可以实现你提到的多个线程同步功能,可惜RTT中没有。
感谢大神,回答的真是专业,膜拜