再问个关于操作系统任务的问题

rado3090   2009-9-22 22:05 楼主
在看一个项目的代码

底层初始化的不说了,进入root任务之后,创建task1,task2,task3等几个任务,创建任务的时候设定优先级,

task1,task2等的代码如下

例如 void task1()
{
....
  while(1)
   {
    process()//做具体的处理
   suspend_p(0);        //挂起自己
    }
}


其他几个任务都是这样的,没有用到信号量,消息队列之类的

就是一个死循环,执行完挂起自己,任务之间通过全局变量来把task1处理后的数据交给task2用,底层有些汇编写的中断接收几个串口来的数据,有几个任务要读取串口的数据

这样用操作系统必要吗??

个人观点:
个人觉得完全可以用前后台来做 ,一个死循环++中断

........//定义些全局变量
main()

{
      while(1)
   {

   task1();
   task2();
   task3();
   }
}











回复评论 (9)

欢迎各方高手前来发表观点解惑,谢谢了
点赞  2009-9-22 22:05
操作系统的作用之一是保证在进程等待资源的时候把CPU让出来,当资源可用的时候告诉进程并运行等待资源的进程。

楼主的使用方法是做不到这点的。
点赞  2009-9-23 11:43
引用: 引用 2 楼 zyzhang365 的回复:
操作系统的作用之一是保证在进程等待资源的时候把CPU让出来,当资源可用的时候告诉进程并运行等待资源的进程。

楼主的使用方法是做不到这点的。

如果低优先级的任务过长占用CPU,别的任务就无法获得CPU,即使优先级更高。
点赞  2009-9-23 11:49
void task1()
{
....
  while(1)
  {
    process()//做具体的处理
  suspend_p(0); //挂起自己
    }
}
可是现在的代码也是一直执行某个任务,直到处理完再把自己挂起来,也就是说每个任务都要等自己运行完毕,下个任务才能接着执行呀

root()
{
  taskcreat(.....task1,200.....);
  taskcreat(.....task2,201.....);
  taskcreat(.....task3,202.....);
  taskcreat(.....task4,203.....);

}
task1()
{
while(1)
{
process1();
suspend();
}
}

task2()
{
while(1)
{
process2();
suspend();
}
}

....
每个任务都是这样处理的。。
高手帮看下,这样用操作系统的意义在哪里?
点赞  2009-9-23 16:02
感觉并没有高优先级任务枪占的概念。。
也没有任务之间的同步互赤
点赞  2009-9-23 16:04
引用: 引用 5 楼 lover_9305 的回复:
感觉并没有高优先级任务枪占的概念。。
也没有任务之间的同步互赤


如果真的是如LZ描述的一样,个人感觉也没什么不可以的,是不是LZ描述的不够清楚呢?大侠指正~
点赞  2009-9-23 18:32
任务调度是操作系统的主要任务之一,个人理解信号量也是对任务调度的一种扩展
点赞  2009-9-23 18:36
帮顶下
点赞  2009-9-25 04:45
我只能说您的应用确实没有必要用到操作系统,但是还有大量的应用是需要操作系统的
点赞  2009-9-25 17:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复