2011-10-24 32 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行,看看這個,看看你是否可以安全地刪除它。

注意:這可能是出於良好原因,因此請自行承擔風險。