voidx 发表于 2009-12-11 15:12:42

请问在多任务下,设置任务如何处理?

请问在多任务下,设置任务如何处理?

比如说,工作模式分为 正常工作状态 与 设置状态。

正常工作状态下有4个工作任务运行,

设置的时候需要把这4个工作任务全部停止,设置完再恢复这4个任务运行,

该如何处理?

s020102s 发表于 2009-12-11 15:32:49

用的什么RTOS, 好像这种高级功能一般RTOS没有

eduhf_123 发表于 2009-12-11 15:38:02

如何进入设置状态?

eduhf_123 发表于 2009-12-11 15:42:08

假设是一个外部事件(比如按键按下或通信接口收到一个数据),那么可以在检测到这个外部事件的时候,给一个高优先级(相对于那4个工作任务)的任务发信号。

voidx 发表于 2009-12-11 15:56:09

假设是一个外部事件(比如按键按下或通信接口收到一个数据),那么可以在检测到这个外部事件的时候,给一个高优先级(相对于那4个工作任务)的任务发信号。
-----------------------------------
然后把其他任务停止下来?

eduhf_123 发表于 2009-12-11 16:04:41

如果是抢占式调度,发信号的时候就自动转入设置任务。如果需要(工作任务以新的设置重新开始工作),可以在设置任务中重新初始化4个工作任务。

如果是协作调度,直接在检测到外部事件的地方重新初始化各个工作任务。

s020102s 发表于 2009-12-11 16:19:14

在普通RTOS下好像不太可能这样做。

kanprin 发表于 2009-12-11 16:29:35

看是什么RTOS,是否支持任务挂起等操作?

假设前提条件成立,
在正常状态下,条件触发,进入设置状态,进入之前,将其它任务挂起即可。
在设置状态下,条件触发,退出设置状态,退出之前,将之前挂起的任务恢复即可。

是否满足?

djyos 发表于 2009-12-11 17:03:23

个人愚见,这不是一种好的编程习惯,养成习惯的话,容易造成任务间(模块间)交叉控制,本例的后果是,被控制的4个任务失去独立性,维护性变差。
可以考虑一下是否有其他方法,让4个被控制任务自己决定自己的行为,比如自己检测到什么条件时停止干活。

voidx 发表于 2009-12-11 17:39:31

想法是 每个任务控制块都加上一个 TaskSuspendRequest,

任务不停的查询这个标志,如果有效,自己挂起自己。

这需要任务不停的查询这个标志,如果任务中有较长的延时,又比较麻烦。

djyos 发表于 2009-12-11 21:36:58

能否从系统架构的角度,避开这种尴尬呢?
一般来说,项目实施时需要用什么样的技巧,往往跟系统架构有关。
模块之间交错关联程度,影响最大的就是系统架构设计。

ralfak 发表于 2009-12-16 00:32:46

9楼这个问题其实也好解决
多加一个任务,设置任务,这个任务比前面的优先级都要高
按键中断触发这个任务就绪
然后一直不停的运行,这样别的任务就没法打断抢占他,设置完成后设置任务进入阻塞状态
这样其他的4个任务就可以正常运行了

wuzhujian 发表于 2009-12-19 06:30:28

另外一种解决办法:
    设一个优先级标志,如果该标志有效,低于某一优先级的线程不参与调度,否则,都参与调度。把需要挂起的线程的优先设在该优先级以下就行了。
    这要修改调度算法。
页: [1]
查看完整版本: 请问在多任务下,设置任务如何处理?