最近在学习uc/osii在AVR单片机的移植问题,对UC/OS进行了进一步的研读,但是一直有些问题不置可否,茫无头绪。从网上也下载了许多UC/OS在AVR上移植的比如程序,一直无法调试成功。由于不必调试和仿真,对内核的运转进程就不能有直观深化的知道。
总算,功夫不负有心人,昨日下载的实例在ICCAVR7上顺畅经过了编译,并且在AVRstudio4上也能够顺畅的进行调试,在proteus6.9上也能作仿真,经过AVR studio4上的单步运转了断点全速运转,对uc/osII的运转有了深入的知道。
首要,理清了使命调度的机理。当应用程序树立了3个使命和一个闲暇使命,在使命初始化的时分树立一切使命,在OSStart()中经过调用OSStartHighRdy()运转优先级最高的使命。
在使命的运转及调度方面,每个使命的完毕部分均设置一个OSTimeDly()函数,经过该函数挂起当时运转的使命,并经过OS_Sched()中的OSCtxSw()进行那个使命级调度,运转优先级最高的使命。
节拍中止时重要的环节,包含中止向量的装置与中止函数的书写。
UC/OS的内核的时刻管理能够使用单片机内部的守时器设定固守时刻的守时(如20ms),该时刻即为一个节拍(Tick),经过OSTickISR守时器中止处理程序进行处理。每个使命均会挂起n个Tick,OSTimeTick()将时一切挂起的使命的延时时刻减1,当减到0时,该使命既有挂起状况转为安排妥当状况。当守时中止时,在OSIntExit()中若发现有更高优先级使命处理安排妥当状况,将碑文中止级使命切换OSIntSw()进行使命的切换。
这仅仅学习ucosii的初步,Jean J.Labrosse的代码的的精华还远远没有体会到,学习ucosii的路还很长。