ucos-16-第1周总结

“自己写一个os的内核,是一种爱好,是一种坚持,是一种心理的安慰”――mingdong

接触ucosII,差不多有1个多周的时间了(不包括之前了解过的时间),总体感觉:rtos内核不是多么难,而且随着对其时间投入的量多来越多,肯定有一天会有好的回报――自己写出一个os的内核。
下面谈谈这一周来对ucosII的认识:
1、一台机器上可以运行多个任务(即多个程序),但是cpu只有一个(即能完成对任务处理的设备),那么怎样才能让多个任务在只有一个cpu的机器上流畅的运行呢?答案:需要一个“特殊的任务”,这个特殊的任务就是os,当然了只是一个os内核。
2、既然已经有个一个特殊的任务――os,那么怎样才能让os完成对只有一个cpu的设备完成对多个任务的切换就显得十分重要了。
3、在ucosII中要想让ucosII,运行起来,并且在它上面能运行一个自己写的程序,是非常复杂的(这也就是对于像我这种人要研究的目标),大体的过程是这样:(1)做好对各种硬件设备的初始化,(2)运行ucosII内核,(3)让ucosII自动的完成对多任务的管理;那么管理多任务的过程中就会涉及到怎样切换:(1)让应用程序调用ucosII给出的一些特殊的函数,在应用程序调用这些ucosII给出的这些函数的时候,事实上就是要通知ucosII,现在去看一下有没有其他比当前更重要的任务要运行(按照优先级来判断),如果有那么就运行那个任务(2)在ucosII刚刚开始运行的时候其实要设置一些特殊的东西,即 设置一个定时器(每到指定的时间到来那么就会,产生一个中断),那么如果时间到了,cpu就会去执行一个特殊的函数――终端服务程序(isr),在这个ISR中,就可以再看看有没有更重要的事情要运行,如果有,那么就对任务进行切换,否则完成ISR后,就再次运行刚刚的任务。
4、那么ucosII是怎样知道哪个任务是当前要最重要(即接下来要运行)的任务呢?在ucosII中是按照 “优先级”的优先级别来进行判断的。
5、有人可能要问了,比如现在有个任务A(低优先级)在运行,突然发现有个任务B(高优先级)要运行,按照刚刚说的方式,ucosII肯定要运行任务B,那么问题是:当任务B运行完毕后,ucosII怎么知道上次任务A运行到哪里呢?(即怎样知道接下来该运行那个语句了?),其实大体的过程是:在任务B运行之前,ucosII已经把任务A当前运行时的信息都给保存到一个结构体中了(即任务的TCB),因此当任务B完成后,可以把任务A在之前运行时所需要的所有的东西又一次重新放回到cpu、寄存器中,那么cpu就可以运行任务A了。

总结:对于从来没有研究过os内核的实现的朋友们,要记住一句话:“不要刚开始就研究代码,要先看理论”,上面就是这一个周,研究ucosII的以下小收获,希望大家有所感触!

你可能感兴趣的:(总结,内核,感触,ucos)