芯片j9九游会网


首页 -- 单片机j9九游会-- ICj9九游会-- 芯片j9九游会-- 新闻技能 --关于j9九游会
 

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空间之内是设计者的事情。 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嵌入式体系的使用提供了自创。
前往顶部


2013-2015 芯片j9九游会网 All Rights Reserved.
若有任何题目和发起请>###@qq.com

深圳市星光芯电子有限公司 版权一切

地点:深圳市龙岗区南湾街道平吉小道1号建昇大厦B栋1618(李朗软件园劈面)###
###QQ:498187676 联系:周工


站点舆图