在看一个项目的代码
底层初始化的不说了,进入root任务之后,创建task1,task2,task3等几个任务,创建任务的时候设定优先级,
task1,task2等的代码如下
例如 void task1()
{
....
while(1)
{
process()//做具体的处理
suspend_p(0); //挂起自己
}
}
其他几个任务都是这样的,没有用到信号量,消息队列之类的
就是一个死循环,执行完挂起自己,任务之间通过全局变量来把task1处理后的数据交给task2用,底层有些汇编写的中断接收几个串口来的数据,有几个任务要读取串口的数据
这样用操作系统必要吗??
个人观点:
个人觉得完全可以用前后台来做 ,一个死循环++中断
........//定义些全局变量
main()
{
while(1)
{
task1();
task2();
task3();
}
}
操作系统的作用之一是保证在进程等待资源的时候把CPU让出来,当资源可用的时候告诉进程并运行等待资源的进程。
楼主的使用方法是做不到这点的。
引用: 引用 2 楼 zyzhang365 的回复:
操作系统的作用之一是保证在进程等待资源的时候把CPU让出来,当资源可用的时候告诉进程并运行等待资源的进程。
楼主的使用方法是做不到这点的。
如果低优先级的任务过长占用CPU,别的任务就无法获得CPU,即使优先级更高。
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();
}
}
....
每个任务都是这样处理的。。
高手帮看下,这样用操作系统的意义在哪里?
感觉并没有高优先级任务枪占的概念。。
也没有任务之间的同步互赤
引用: 引用 5 楼 lover_9305 的回复:
感觉并没有高优先级任务枪占的概念。。
也没有任务之间的同步互赤
如果真的是如LZ描述的一样,个人感觉也没什么不可以的,是不是LZ描述的不够清楚呢?大侠指正~
任务调度是操作系统的主要任务之一,个人理解信号量也是对任务调度的一种扩展
我只能说您的应用确实没有必要用到操作系统,但是还有大量的应用是需要操作系统的