机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
AVR单片机的RTOS-AVRX应用
AVR单片机的RTOS-AVRX应用
 更新时间:2008-8-19 13:44:07  点击数:68
【字体: 字体颜色

修改 MCU=8535
AAVRMCU=1
GCCMCU=at90s$(MICU)
AVRXMCU=_AT90S$(MCU)_为 ICCMCU=m16
AAVRMCU=3
GCCMCU=atmega16
AVRXMCU=_AT90Megal6_

②重新修改AVRX源码的serialio.S文件,即根据不同的单片机修改串口部分的寄存器定义。需要增添如下代码:

#if defined(UBRRL)
#define UBRR UBRRL
#endif
#if defined(UBRRH)
sts UBRRH, plh
#endif

③重新编译内核。具体做法是复制一个“命令提示符”到AVRX目录下,运行“命令提示符”,键入“makegcc”命令后运行就完成了AVRX内核的重新编译,会生成很多的.o文件和avrx.a文件。这些文件在以后的应用程序中会使用。

  至此就完成了AVRX在ATmegal6单片机上的内核移植,接着就可以编写应用程序了。

2.2在AVRX上编写应用程序

  这时候要用一个新的makefile文件,同时自己的程序可以不和AVRX的内核在一个目录,但是要指出依赖文件的明确路径。makefile的框架可以采用Winavr的sam-ple文件夹下的makefile文件框架。这里的难点其实还是makefile文件的语法问题。下面介绍应用程序的makefile文件在实例中需要修改或增加的代码:

MCU=atmegal6 /*微处理器的名字*/
TARGET=test /*应用程序文件名*/
GCCLIB=$(AVRX)/avrx/avrx.a
GCCINC=-I.-I$(AVRX)/avrx-I$(AVR)/avr/inc /*加上相关的库*/
SCANF_LIB_MIN=-Wl,-u,vfscanf-lscanf_min
SCANF_LlB_FLOAT= -Wl,一u,vfscannf-lscanl_flt
SCANF_LIB= /*设置sacnf函数库的类型,在不使用时可以
注释掉,这样可以减小编译后的文件太小*/
LDFLAGS+=$(PRIBITF_LlB)$(SCANF_LIB)
$(MATH_LIB) /*新增的连接器参数设定*/

3 系统测试

3.1 系统实时性测试

  在实时系统中,实时系统的实时性表现在系统对外部事件的响应能力上。系统通过中断来响应外部事件的发生,并且在用户中断程序中做的事要尽量少,把大部分工作留给任务去做,只是通过信号量或者消息机制来通知任务运行。Mega16的定时器2设为比较匹配输出模式,在匹配时间到了之后产生一定周期脉冲输出,并产生中断。设置定时器1为计数模式来计数产生的脉冲输出。通过定时器2的比较匹配中断服务子程序来发信号量通知任务运行,并在中断子程序中不开中断,而在任务得到信号后开中断,以实现中断处理与任务运行的同步。任务中对一个全局变量计数,以记录任务执行的次数。运行一段时间后,在设置的匹配时间里,任务的运行次数和定时器1的计数一样,则系统在这段时间里是能完全响应外部事件的。当定时器2的比较匹配时间设为大于23 μs时,2个计数是相等的;当小于23 μs时,定时器1计数值大于任务计数值,说明任务没有完全得到响应。这说明中断的进入和返回即系统对外部时间的响应和处理时间为23 μs,远远大于其他操作系统在AVR单片机上移植后的响应时间。

3.2应用例程测试

  这里只对源文件中的几个例程先进行简单的编译,然后去掉不必要的代码,加入自己想测试的一些代码,进行了定时器控制模块、信号量和消息队列以其简单组合的测试,均在ATmega16上达到了预期的效果。

4 心得体会

①AVRX的源码都是用汇编语言编写的,相对来讲代码效率很高,但是由于没有详细的API介绍文档,所以最好的入门方法就是先读懂RTOS的源码和例程,然后进行修改,再加上自己的代码逐渐熟练应用。

②AVRX需要分配的堆栈为35个字节加上任务代码需要的额外堆栈,具体的大小取决于每个进程用的本地变量个数。比较好的确定分配给任务堆栈大小的方法是:分配很大的堆栈(如70字节),运行一段应用程序后看堆栈到多深(因为GCC启动时把所有内存都清0了,这样很容易看到)。不过,为了安全起见,用编译器或仿真器在估计堆栈的顶端写入几个字节的0xFFFFF去验证到底达到了多少字节,然后分配给比测试结果多两个以上的字节给这个任务。

③启动的最后一个指令必须跳转到Epilog()。

5 结论

  AVRX是一个不错的RTOS,最显著的特点就是内核小,速度快,编译后大概只需500~700字节,且基本的调度功能一个也不少。由于其代码公开,结合不同型号AVR单片机的特性,可以在此基础上进行系统的裁减和扩展,使之能达到更好的效果。本文为AVR嵌入式系统的应用提供了借鉴。
上一页  [1] [2] 
  • 上一篇: 在C51系统上实现YAFFS文件系统
  • 下一篇: MC9S12NE64型单片机的嵌入式以太网连接
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1