2011-10-24 27 views
3

我想使用AVR-ADA实现任务功能,但是当我运行make,我得到这些错误消息:与AVR-ADA任务

C:\avr_test>make 
avr-gcc.exe (GCC) 4.3.3 
Copyright (C) 2008 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

ADA_PROJECT_PATH= avr-gnatmake -XMCU=atmega8 -p -Pbuild.gpr -XAVRADA_MAIN=led_on avr-gcc -c --RTS=rts/avr4 -gnatec=C:\avr-ada\lib\gnat\gnat.adc -gdwarf-2 -gnatwp -gnatwu gnatn -gnatp -gnatVn -Os -gnatef -fverbose-asm -frename-registers -mmcu=atmega8 gnateDMCU=atmega8 -fdata-sections -ffunction-sections -I- -gnatA C:\avr_test\led_on.adb 
c:\avr_test\led_on.adb:3:06: warning: unit "task_bla" is not referenced 
c:\avr_test\task_bla.ads:3:04: construct not allowed in configurable run-time mode 
c:\avr_test\task_bla.ads:3:04: violation of restriction "no_tasking" at C:\avr-ada\lib \gnat\gnat.adc:124 
avr-gnatmake: "c:\avr_test\led_on.adb" compilation error 
make: ** [led_on.elf] Erro 4 

所以,我能做些什么来使任务特征?

我的包刚很简单的测试任务:(我只是想检查任务功能)

-- led_on.adb 
with AVR; use AVR; 
with AVR.MCU; 
with task_bla; 
procedure LED_On is 
LED : Boolean renames MCU.PortB_Bits (3); 
begin 
MCU.DDRB_Bits := (others => DD_Output); 
LED := Low; 
end LED_On; 

-- task_bla.ads 
package task_bla is 
task test; 
end task_bla; 

-- task_bla.adb 
package task_bla is 
task body test is 
    loop 
    null; 
    end loop; 
end test; 
end task_bla; 

回答

2

我发现了什么可能是一个线索。我读了AVR-ADA文档中更详细,我发现这状态区AVR-ADA的Sourceforge的文档http://sourceforge.net/apps/mediawiki/avr-ada/index.php?title=Status

AVR-ADA的电流是基于GCC-4.3 V1.1 0.3。

提供的Ada运行时系统(RTS)大部分甚至不是运行时系统。这更像是一个编译时系统:-)。 RTS中的大多数文件只在编译时需要。因此,我们还不支持异常或任务(多线程)。

有一些AVR的具体支持。类型和接口定义,时序例程,eeprom访问,UART,最重要的是大多数AVR器件的必要端口和中断定义。

因此,任务功能一开始不启用/可用。在文档中不断深入,我发现这http://sourceforge.net/apps/mediawiki/avr-ada/index.php?title=InstallRunTimeSystem

InstallRunTimeSystem

安装的Ada运行系统和AVR支持库

建设和安装的Ada交叉编译器,你以后需要一个基本的运行时间系统(RTS)。

打开AVR-Ada源代码分发包之后,运行configure并在顶层目录中创建。配置决定安装的gcc的安装路径(PREFIX)。查看Makefile中关于不同make目标的注释。您应该先构建并安装RTS,然后安装AVR库。 RTS将安装在gcc树中,AVR库将安装在PREFIX/avr/ada中。确保您在这些位置有写入权限。存在

configure 
make build_rts 
make install_rts 
make build_libs 
make install_libs 

仅从运行时库中的一些文件。目前它只包含编译时需要的文件。看到目录rts/adainclude。

未来版本的AVR-Ada应该扩展提供的RTS的可能性。这可能包括:

Ada异常。 AVR-libc已经支持setjmp/longjmp,但是我不知道嵌入式系统中异常有多大用处。 简单的任务(如在Ravenscar配置文件中)。这可能应该建立在像AvrX这样的小调度器之上。

不要指望在不久的将来出现任何东西!

那么,我没有时间去测试所有这些。但很快我就完成了。并且可能需要一点努力才能启用任务。

2

你将不得不执行任务的AVR-ADA的运行系统。

我不认为硬件支持任务,所以这可能相当困难。

+0

是的,在8位微控制器上执行任务可能会非常棘手。 –

2

不知道AVR它看起来像在你的gnat.adc文件中有一个no_tasking限制,在第124行,看看这个,看看你是否可以安全地删除它。

注意:这可能是出于良好原因,因此请自行承担风险。