AVR单片机的RTOS-AVRX应用
[09-12 18:17:48] 来源:http://www.88dzw.com 单片机学习 阅读:8539次
文章摘要:1.6 系统对象 AVRX是围绕系统对象的概念而构建的,系统对象包括一个链接和其后面的0个或者若干个字节的数据信号量。进程对象可以根据运行队列和信号量排队。计数器控制块只能根据计数器队列排队。消息控制块只能在消息队列排队。进程根据嵌入对象的信号量等待这些对象。 进程堆栈中可用的SRAM是限制系统规模的主要因素,每个进程都需要至少10~35字节的空间来存储进程上下文。提供的API函数如下:AvrXSetObjectSamaphore、AvrXIntObjectSamaphore、AvrXResetObjectSamaphore、AvrXWaitObjectSamaphore、AvrXTestOb
AVR单片机的RTOS-AVRX应用,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com1.6 系统对象
AVRX是围绕系统对象的概念而构建的,系统对象包括一个链接和其后面的0个或者若干个字节的数据信号量。进程对象可以根据运行队列和信号量排队。计数器控制块只能根据计数器队列排队。消息控制块只能在消息队列排队。进程根据嵌入对象的信号量等待这些对象。
进程堆栈中可用的SRAM是限制系统规模的主要因素,每个进程都需要至少10~35字节的空间来存储进程上下文。提供的API函数如下:AvrXSetObjectSamaphore、AvrXIntObjectSamaphore、AvrXResetObjectSamaphore、AvrXWaitObjectSamaphore、AvrXTestObjectSamaphore和AvrXIntTestObjectSamaphore。
1.7 系统堆栈
AVRX需要足够大的堆栈来处理所有可能的中断嵌套,每次进入内核将会把10~35字节压进堆栈(标准上下文和返回地址),中断处理可能压进去更多。AVRX的API会临时压入2个以上的字节。GCC或者汇编代码定义于SRAM的顶部,保证AVRX的堆栈在有效SRAM空间之内是设计者的工作。
2 AVRX系统的应用
2.1 AVRX在不同型号AVR单片机上的移植
下面以ATmega16为例,介绍移植工作。
(1)编译器的选择
由于AVRX的编者是在GNU推出的AVR-GCC编译器下编写的,所以选用AVR-GCC编译器可以大大提高AVRX在不同AVR单片机上的移植特性。
(2)重新编译AVRX内核
为了将应用程序成功编译,需要重新编译AVRX内核,重新编译包括下述步骤。
①重新修改AVRX源码的Makefile文件,需要修改的几处如下:
ABSPATH=…/avrx /*更改AVRX原路径到实际路径下*/
修改 MCU=8535
AAVRMCU=1
GCCMCU=at90s$(MCU)
AVRXMCU=_AT90S$(MCU)_
为 ICCMCU=m16
AAVRMCU=3
GCCMCU=atmega16
AVRXMCU=_AT90Mega16_
②重新修改AVRX源码的serialio.s文件,即根据不同的单片机修改串口部分的寄存器定义。需要增添如下代码:
#if defined(UBRRL)
#define UBRR UBRRL
#endif
#if defined(UBRRH)
sts UBRRH,p1h
#endif
③重新编译内核。具体做法是复制一个“令名提示符”到AVRX目录下,运行“命令提示符”,键入“makegcc”命令后运行就完成了AVRX内核的重新编译,会生成很多的.o文件和avrx.a文件。这些文件在以后的应用程序中会使用。
至此就完成了AVRX在ATmega16单片机上的内核移植,接着就可以编写应用程序了。
2.2 在AVRX上编写应用程序
这时候要用一个新的makefile文件,同时自己的程序可以不和AVRX的内核在一个目录,但是要指出依赖文件的明确路径。makefile的框架可以采用Winavr的sample文件夹下的makefile文件框架,这里的难点其实还是makefile文件的语法问题。下面介绍应用程序的makefile文件在实例中需要修改或增加的代码:
MCU=atmega16 /*微处理器的名字*/
TARGET=test /*应用程序文件名*/
GCCLIB=$(AVRX)/avrx/avrx.a
GCCINC=-L-I$(AVRX)/avrx-I$(AVR)/avr/inc /*加上相关的库*/
SCANF_LIB_MIN=-W1,-u,vfscanf-1scanf_min
SCANF_LIB_FLOAT=-W1,-u,vfscanf-1scanf_flt
SCANF_LIB /*设置sacnf函数库的类型,在不使用时可以注释掉,这样可以减小编译后的文件大小*/
LDFLAGS+=$(PRINTF_LIB)$(SCANF_LIB)$(MATH_LIB) /*新增的连接器参数设定*/
3 系统测试
3.1 系统实时性测试
在实时系统中,实时系统的实时性表现在系统对外部事件的响应能力上,系统通过中断来响应外部事件的发生,并且在用户中断程序中做的事要尽量少,把大部分工作留给任务去做,只是通过信号量或者信息机制来通知任务运行。Mega16的定时器2设为比较匹配输出模式,在匹配时间到了之后产生一定周期脉冲输出,并产生中断。设置定时器1为计数模式来计数产生的脉冲输出。通过定时器2的比较匹配中断服务子程序来发信号量通知任务运行,并在中断子程序中不开中断,而在任务得到信号后开中断,以实现中断处理与任务运行的同步,任务中对一个全局变量计数,以记录任务执行的次数。运行一段时间后,在设置的匹配时间里,任务的运行次数和定时器1的计数一样,则系统在这段时间里是能完全响应外部事件的,当定时器2的比较匹配时间设为大于23μs时,2个计数是相等的;当小于23μs时,定时器1计数值大于任务计数值,说明任务没有完全得到响应。这说明中断的进入和返回即系统对外部时间的响应和处理时间为23μs,远远大于其他操作系统在AVR单片机上移植后的响应时间。
《AVR单片机的RTOS-AVRX应用》相关文章
- › 自制AVR单片机的并口ISP下载线
- › AVR单片机的RTOS-AVRX应用
- › 基于AVR单片机的多任务嵌入式Internet系统设计
- › 一种基于AVR单片机的工频干扰滤除快速算法
- › 基于AVR单片机LED显示屏的灰度设计与实现
- › 基于AVR单片机的可充电电池的放电监测
- 在百度中搜索相关文章:AVR单片机的RTOS-AVRX应用
- 在谷歌中搜索相关文章:AVR单片机的RTOS-AVRX应用
- 在soso中搜索相关文章:AVR单片机的RTOS-AVRX应用
- 在搜狗中搜索相关文章:AVR单片机的RTOS-AVRX应用