请问在多任务下,设置任务如何处理?
请问在多任务下,设置任务如何处理?比如说,工作模式分为 正常工作状态 与 设置状态。
正常工作状态下有4个工作任务运行,
设置的时候需要把这4个工作任务全部停止,设置完再恢复这4个任务运行,
该如何处理? 用的什么RTOS, 好像这种高级功能一般RTOS没有 如何进入设置状态? 假设是一个外部事件(比如按键按下或通信接口收到一个数据),那么可以在检测到这个外部事件的时候,给一个高优先级(相对于那4个工作任务)的任务发信号。 假设是一个外部事件(比如按键按下或通信接口收到一个数据),那么可以在检测到这个外部事件的时候,给一个高优先级(相对于那4个工作任务)的任务发信号。
-----------------------------------
然后把其他任务停止下来? 如果是抢占式调度,发信号的时候就自动转入设置任务。如果需要(工作任务以新的设置重新开始工作),可以在设置任务中重新初始化4个工作任务。
如果是协作调度,直接在检测到外部事件的地方重新初始化各个工作任务。 在普通RTOS下好像不太可能这样做。 看是什么RTOS,是否支持任务挂起等操作?
假设前提条件成立,
在正常状态下,条件触发,进入设置状态,进入之前,将其它任务挂起即可。
在设置状态下,条件触发,退出设置状态,退出之前,将之前挂起的任务恢复即可。
是否满足? 个人愚见,这不是一种好的编程习惯,养成习惯的话,容易造成任务间(模块间)交叉控制,本例的后果是,被控制的4个任务失去独立性,维护性变差。
可以考虑一下是否有其他方法,让4个被控制任务自己决定自己的行为,比如自己检测到什么条件时停止干活。 想法是 每个任务控制块都加上一个 TaskSuspendRequest,
任务不停的查询这个标志,如果有效,自己挂起自己。
这需要任务不停的查询这个标志,如果任务中有较长的延时,又比较麻烦。 能否从系统架构的角度,避开这种尴尬呢?
一般来说,项目实施时需要用什么样的技巧,往往跟系统架构有关。
模块之间交错关联程度,影响最大的就是系统架构设计。 9楼这个问题其实也好解决
多加一个任务,设置任务,这个任务比前面的优先级都要高
按键中断触发这个任务就绪
然后一直不停的运行,这样别的任务就没法打断抢占他,设置完成后设置任务进入阻塞状态
这样其他的4个任务就可以正常运行了 另外一种解决办法:
设一个优先级标志,如果该标志有效,低于某一优先级的线程不参与调度,否则,都参与调度。把需要挂起的线程的优先设在该优先级以下就行了。
这要修改调度算法。
页:
[1]