AVR单片机的RTOS-AVRX应用

发布者:和谐的24号最新更新时间:2013-12-10 来源: eefocus关键字:AVR单片机  RTOS-AVRX  编译器 手机看文章 扫描二维码
随时随地手机看文章

引 言

      随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式。在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。

      AVR 微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的复杂指令集微处理器快了将近lO倍。

      AVRX是由lbarello编写的源码公开的嵌入式操作系统,它专门针对AVR系列单片机的RTOS,具有免费和可以修改的特点。它的缺点是由于做为一种专用的操作系统很难移植到其他平台上。

1 AVRX系统的特点

      AVRX做为AVR专用RTOS有如下的特点:

      ◆完全支持占先式、优先级驱动的任务调度算法;

      ◆16个优先级,相同的优先级的任务采用Round-robin调度算法轮流执行;

      ◆信号量可以用于信号传递、同步和互斥信号量,支持阻塞和非阻塞语法;

      ◆任务之间可以用消息队列相互传递信息,接收和确认消息可以用阻塞和非阻塞调用;

      ◆在中断子程序中,大部分非阻塞的中断服务程序可以使用;

      ◆支持单个定时器的时间队列管理,任何进程都可以设置一个定时器,并且任何一个任务都可以等待定时器时间到;

      ◆支持单步调试运行着的进程;

      ◆程序空间小,包含所有功能的版本占用1000字节;

      ◆与定时器/计数器有关的一些事务可以用AVRX写成任务级代码。

1.1任务

      AVRX2. 6为了支持c语言,保存了所有的32个寄存器。最小的上下文是32个寄存器、SREG和PC,总共35个字节。AvrxInitTask()函数给所有的寄存器初始化为0X00。只有进程上下文保存在任务堆栈中,所有其他的使用(包括内核和中断)保存在内核堆栈。这样降低了第一个中断的上下文切换和进入内核API的SRAM消耗。随后的中断(如果允许中断嵌套)嵌入内核堆栈,API不进行上下文切换。

1.2信号量

      信号量是SRAM指针,它们有三种状态:PEND、WAITING和DONE。当一个进程被一个信号量阻塞时,它处于WAITING状态,多个任务可以排队等候一个信号量。在后一种情况下,信号量可以看作互斥信号量。提供的API函数如下:AvrXSetSemaphore、 AvrXIntsetSema- pore、AvrXWaitSemaplaore、AvrXTestSemapIlorc、AvrX-IntTestSemaphore和 AvrxResetSemaphore。

1.3定时器

      定时器控制块(TCB)长度为4(或6)个字节。它们管理一个16位计数值。定时器队列管理器管理一个分类的定时器队列,每个都调整为所有计数器的和到其延时需要的值。提供的API函数如下: AvrXStartTimer、AvrXTim-erHandler、AvrXCancel Timer、AvrXWaitTimer、AvrX-TestTimer和AvrXDelay。

1.4消息队列

      消息队列用消息控制块(MCB)做为队列首地址。任何进程、中断处理函数和多个进程都可以等待消息。MCB的长度是2或4个字节,消息可以认为是灵活性更大的信号量。提供的API函数如下:AvrXSendMessage、AvrXIntSendMessage、AvrXRecvMessage、 AvrXWaitMes-sage、AvrXAckMessage、AvrXTestMessage和AvrXWait-MessageAck。

1.5单步运行支持

      通过重新汇编内核AVRX,可以允许和禁止单步运行的支持。单步运行可以通过编译内核库时定义下面的变量:#define SIGNALSTEPSUPPORT。在能够单步运行以前,进程必须先暂停。有两种方法实现:一是仅仅初始化进程但不使能;二是用目标进程的ID调用 AvrXSuspend,一旦目标进程挂起,调试SPI就能使用了。提供的API函数有:AvrxStepNext和AvrXSin- gleStepNext。

1.6系统对象

      AVRX是围绕系统对象的概念而构建的。系统对象包括一个链接和其后面的0个或者若干个字节的数据信号量。进程对象可以根据运行队列和信号量排队。计数器控制块只能根据计数器队列排队。消息控制块只能在消息队列排队。进程根据嵌入对象的信号量等待这些对象。进程堆栈中可用的SRAM是限制系统规模的主要因素,每个进程都需要至少10~35字节的空间来存储进程上下文。提供的API函数如下:AvrXSetObjectSama-phore、 AvrXIntObjectSamaphore、 AvrXResetObiectSama-phore、AvrXWaitObjectSamaphore、AvrXTestObjectSama- phore和AvrXInfTestObjectSamaphore。

1.7系统堆栈

      AVRX需要足够大的堆栈来处理所有可能的中断嵌套。每次进入内核将会把10~35字节压进堆栈(标准上下文和返回地址),中断处理可能压进去更多。AVRX的API会临时压入2个以上的字节。GCC或者汇编代码定义于SRAM的顶部,保证AVRX的堆栈在有效SRAM空间之内是设计者的工作。[page]

2 AVRX系统的应用

2.1 AVRX在不同型号AVR单片机上的移植

      下面以ATmegM6为例,介绍移植工作。

      (1)编译器的选择

      由于AVRX的编者是在GNU推出的AVR-GCC编译器下编写的,所以选用AVR-GCC编译器可以大大提高AVRX在不同AVR单片机上的移植特性。

      (2)重新编译AVRX内核

      为了将应用程序成功编译,需要重新编译AVRX内核,重新编译包括下述步骤。

      ①重新修改AVRX源码的Makefile文件,需要修改的几处如下:

            ABSPATH=…/avrx/*更改AVRX原路径刊实际路径下*/
            修改 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嵌入式系统的应用提供了借鉴。

关键字:AVR单片机  RTOS-AVRX  编译器 引用地址:AVR单片机的RTOS-AVRX应用

上一篇:利用AVR的铅酸蓄电池管理系统原理及设计
下一篇:AVR的锂电池智能充电器的设计与实现

推荐阅读最新更新时间:2024-03-16 13:31

红外舒适型节能电源插座的应用设计
一、项目概述   1.1 引言   如今可持续发展成为社会的主题,从而电器的节能与环保越来越受到重视。随着电视机、计算机的使用越来越普遍,其节能与环保成为人们关心的问题。该节能插座的设计利用AVR单片机来控制计算机外部设备电源接口的开或关,具有智能节能和定时开关功能,也可作为普通插座使用,充分显示出设计的智能化与人性化。智能节能插座能有效地控制能源浪费,具有巨大的市场空间。   1.2 项目背景/选题动机   据有关部门调查,有近七成的居民家庭使用家电后不关闭电源,很多的居民不知道待机也会耗电。而由于电器关机没拔插头的原因,全国每年的耗电量十分惊人。电器待机耗电严重浪费着能源。人们在关闭计算机、电视的时候,处在待机状态
[单片机]
红外舒适型节能电源插座的应用设计
AVR单片机与上位机通信协议的制定
单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定! 上行协议,即由单片机向上位机发送数据。 下行协议,即由上位机向单片机发送数据。 而通信协议又要分固定长度和不定长度两种 本文所介绍的协议属于简单的固定字长的通信协议! 下行协议由四个字节构成 起始字PRE 命令字ORD 值VAL 结束字END 附注 1byte 1byte 1byte 1byte   BBH AAH(ORD_SATA)     单片机状态转换命令标识 01H EEH 模式1:空闲 02H EEH 模式2:温度采集 03H EEH 模式3:温度采集向上位机传送采集值 04H EEH 模式4:PWM测试 BBH DDH(ORD_P
[单片机]
如何使用AVR单片机进行自整定PID控制器的设计
本文介绍了基于AVR单片机的自整定PID控制器的设计.该控制器以FESTO水位为控制对象,控制核心为ATmega128单片机.采用继电自整定PID算法,并用LED数码管实时显示控制情况.实验结果表明,本设计可以根据实际情况在线自整定PID参数.控制效果快速,平稳,超调量小。 PID控制器是过程控制中所用的主要控制器-由于其算法简单.鲁棒性好和可靠性高等特点,被广泛应用于工业过程控制.但是PID参数的整定一般需要经验丰富的工程技术人员来完成.既耗时又费力,加之实际系统有滞后和非线性等因素,增加了PID参数整定的难度.如何在线自整定PID参数,以符合过程控制的要求。是目前控制器设计中的一个重要课题,它不仅能减少操作人员的负担,还可
[单片机]
如何使用<font color='red'>AVR单片机</font>进行自整定PID控制器的设计
Proteus—AVR单片机(ATMEGA16单片机)系统时钟及时钟选项设置
在设置之前呢,我得把ATMEGA16里面的datasheet里面的资料说说,当然是关于系统时钟和时钟选项的 一、系统时钟及时钟选项(这里主要是介绍原理,三里面会介绍如何设置,其实你会了一,那后面的二和三就相当简单了~~你懂得,就是根据一来的 ) 1. 时钟系统及其分布: Figure 11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗, 可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟。 1)CPU 时钟- clkCPU CPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针 的数据存储器。终止CPU 时钟将使内核停止工作和计算。 2)I/O 时钟- clkI/O I/
[单片机]
Proteus—<font color='red'>AVR单片机</font>(ATMEGA16单片机)系统时钟及时钟选项设置
AVR单片机的掉电保护
简介:在掉电时怎样保护数据到EEPROM中 我想在掉电时保存数据(3个字节)到EEPROM中,用BOD掉电检测,不知怎样使用。望高手指点: 1、在BOOT区设置好BODEN,BODLEVEL,后软件还要怎样设置? 2、掉电中断是否是产生复位?我的写EEPROM程序应该放在什么地方?他和其他复位怎样区别? 3、设置了BOOT区后,硬件上是否要加电源到一个管脚比较后才产生中断?? 掉电检测BOD的误解 AVR自带的BOD(Brown-outDetection)电路,作用是在电压过低(低于设定值)时产生复位信号,防止CPU意外动作. 对EEPROM的保护作用是当电压过低时保持RESET信号为低,防止CPU意外动作,错误修改
[单片机]
基于AVR单片机的温度测量系统
1 引言   传统温度测量系统中,一般选用模拟式温度传感器。常用的模拟式温度传感器,其中一个共同特点是输出为模拟量,因此在测量电路中必须经过A/D转换才能成为计算机所能处理的数字量。数字式温度传感器将非电模拟量转换到数字信号这一处理过程的多个环节集成在单芯片上,实现了在测量点将温度值数字化,有效解决了传统温度传感器外围电路复杂,抗干扰能力差的弊病,降低了对系统的要求。   该系统以Atmel公司的ATmega8L单片机为控制中心,温度测量使用DS18B20单总线数字温度传感器,采用1602字符型液晶显示器作为温度值的显示输出。编程使用CodeVision AVR C Compiler编译器,该编译软件自带了使用器件库函数文件
[单片机]
基于<font color='red'>AVR单片机</font>的温度测量系统
入门MSP430FR6989 第一章
从今天开始我就开始我开始学习了MSP430FR6989,前几天一直在找资料,找的很头疼。现在正式开始学习。 前两天我一直在琢磨到底用什么编译器,用什么版本,经过了我长时间的挣扎,一直不停的换编译器,最终选在CCS9.01版本上操作,选择他是因为好像CCS6.0不支持6989,8.3的Resource Explorer(430的辅助编程在线版,感觉还好用),不能联网。 先从安装软件开始。 先从ti官网下载ccs最新版(网站: http://software-dl.ti.com/ccs/esd/documents/ccs_downloads.html ),下载后解压-,0解压包建议不要放在含有中文的目录(切记),然后打开文件,如图
[单片机]
入门MSP430FR6989 第一章
AVR单片机的多协议读写器的设计
引言 射频识别(RFID)是利用无线方式对电子数据载体(电子标签)进行识别的一种新兴技术。与接触式IC卡和条形码识别等系统比较,它有着巨大的优势。利用射频识别技术,能有效实现对数量大、分布区域广的信息进行智能化管理,达到高效快捷运作的目的,特别是在第二代身份证、物流、交通航运、自动收费、超市、门禁系统管理、服务领域等方面有着广泛的应用前景。随着我国国民经济的快速发展,国内RFID行业也正经历着深刻的变革。 RFID系统一般是由读写器、射频卡、应用软件来组成。其中读写器的设计是至关重要的,它决定了系统的稳定性和准确性。 除了要求其能支持一系列协议、标准和收发器外,对读写器可能还有其它功能性方面的要求,如高性能、防冲突、远/近感应距离
[单片机]
于<font color='red'>AVR单片机</font>的多协议读写器的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved