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

2008-8-10 08:11 3969 2 4 分类: MCU/ 嵌入式

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


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

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户478327 2008-8-13 06:25

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

用户1406132 2008-8-11 19:45

你用的什么AVR?一直ucos对单片机有什么要求吗?
相关推荐阅读
用户478327 2010-05-08 08:40
Source Insight配置WinAVR(转载)
Source Insight配置WinAVR----AVR单片机2010-02-23 17:10Source Insight功能强大,特别是看程序!下载地址http://www.yaguo.com/w...
用户478327 2010-04-15 20:10
进程与线程
  进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终...
用户478327 2010-04-01 12:52
嵌入式Linux开发流程(转载)
不同于平常开发的软件,在开发嵌入式系统时,常常把所有的软件模块最终都生成一个单一的文件,我们把这个单一的文件称为image,它一般包括以下布局:bootloaderembedded linux ker...
用户478327 2009-12-17 08:41
编程规范-匈牙利表示法
匈牙利表示法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、变量的命名每个变量...
用户478327 2009-10-24 12:06
掉电检测与数据存储(转载)
 2.掉电检测与数据存储1)总体思路   由于电能表的计量是要求持续性的,而主供电系统不可能是持续的,注意这里需要一个掉电检测与数据存储的问题。首先检测出供电系统已经断电,然后启用备用电源存储数据,而...
用户478327 2009-10-21 23:07
嵌入式系统设计的特点
嵌入式系统设计的特点:(1)软硬件协同并行开发(2)嵌入式系统通常面向特定的应用系统(3)实时嵌入式操作系统的多样性(4)与台式机相比,可利用的资源较少(5)嵌入式系统设计需要交差的开发环境     ...
EE直播间
更多
我要评论
2
2
关闭 站长推荐上一条 /3 下一条