任务的执行一定要尽量的快,一定不能因为某个任务需要等等特殊的东西,而影响的其他任务,这句话我觉得有问题!你任务的执行是在while(1) 中,每个任务执行时间比起它循环周期而言是很短的,只有高优先级的任务循环时间很短,执行的时间也很短,短到刚刚让出CPU控制权,执行次优先级的任务,执行完这个次优先级任务后,因为高优先级任务循环时间短,又开始执行了,这样的结果是后面的低优先级 任务永远也执行不到,注意一个是因为你高优先级任务的循环时间短造成的,而不是你任务执行时间长造成的,任务长可以用return退出这个任务函数,暂时交出CPU控制权,下次进来这个函数从你退出的这个地方继续执行就行,这样就成了一个抢占式的任务了, 只不过这个任务的现场保护是编译器帮你完成的。如果觉得不过瘾,你可以把这些任务分配堆栈来保护现场了,就是一个实实在在的任务强占式调度器了。 |