UCOS的源代码中要求在OSStartHighRdy中加入OSRunning=TRUE的代码,但是我用的那个ARM7移植的OSSTartHighRdy并没有这段代码,这会带来什么问题?
首先,OSRunning这个变量在创建任务函数OSTaskCreate中有用到,如果OSRunning为TRUE,则执行OSSched,OSSched的功能就是将就绪表中优先级任务最高的任务取出,然后进行任务切换。也就是说,如果在OSStartHighRdy中没有OSRunning=TRUE的代码,在创建任务的时候,如果创建的任务的优先级为最高,那么它并不能得到马上运行。但实际上这也没多大关系,因为当时钟节拍到来的时候,时钟节拍依次调用了OSTimeTick(节拍服务函数)和OSIntExit。后者与OSSched是极其相似的,它们的作用也一样。这样,在节拍到来时,还是会进行任务切换,只不过刚创建的优先级最高的任务相当于延时了一个节拍运行而已。
文章评论(0条评论)
登录后参与讨论