Задачи с AVR-Ada - PullRequest
       87

Задачи с AVR-Ada

4 голосов
/ 24 октября 2011

Я пытаюсь реализовать функции задач с помощью AVR-Ada, но когда я запускаю make, я получаю следующие сообщения об ошибках:

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;

Ответы [ 3 ]

3 голосов
/ 24 октября 2011

Не зная о AVR, похоже, в вашем файле gnat.adc, строка 124, есть ограничение no_tasking, посмотрите на это и посмотрите, можете ли вы удалить его безопасно.

ПРИМЕЧАНИЕ. Вероятно, это было сделано по ХОРОШЕЙ причине, поэтому делайте это на свой страх и риск.

3 голосов
/ 25 октября 2011

Я нашел то, что может быть ключом к этому.Я читал документацию AVR-Ada более подробно, и я нашел это в Status области документации AVR-Ada Sourceforge http://sourceforge.net/apps/mediawiki/avr-ada/index.php?title=Status:

Ток AVR-AdaV1.1 основан на gcc-4.3.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 и make в каталоге верхнего уровня,Configure определяет путь установки (PREFIX) из установленного gcc.Смотрите комментарии в 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.Это может включать:

Ада исключений.В AVR-libc уже есть поддержка setjmp / longjmp, но я не знаю, насколько полезны исключения во встроенных системах.Простое управление задачами (как в профиле Ravenscar).Вероятно, он должен быть построен поверх небольшого планировщика, такого как AvrX.

Не рассчитывайте на то, что что-то появится в ближайшем будущем!

Ну, у меня еще не было времени все это проверить.Но скоро я сделаю это.И, возможно, потребуется немного усилий, чтобы включить управление задачами.

3 голосов
/ 24 октября 2011

Вы должны реализовать Tasking для системы времени выполнения AVR-Ada.

Я не думаю, что аппаратное обеспечение поддерживает работу с задачами, так что это может быть довольно сложно.

...