EDN首页   博客首页

日志档案

发表于 2008-8-10 8:11:43

1

标签: 无标签

UC/OSII在AVR单片机上的移植部分体会

     最近在学习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()进行任务的切换。

    先总结了这么一点,经验微薄,希望大家多多指点。

系统分类: 嵌入式   |   用户分类: 无分类   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(388)    回复(2)  

投一票您将和博主都有获奖机会!

  • yorkbluedream

    2008-8-11 19:45:05

    你用的什么AVR?一直ucos对单片机有什么要求吗?

  • ancient

    2008-8-13 6:25:46

    我采用的是ATMEGA16,但SRAM只有1kB,小了一些,当任务多,需要处理的数据量大时感觉不够。