Krzysztof Wesołowski Programowanie, elektronika, automatyka – doświadczenia i projekty

1gru/08

Automatyczna Generacja Plików ads/adb

W trakcie tworzenia dowolnego projektu w języku Ada będziemy potrzebować minimum 1 pliku, zawierającego główną procedurę. Aby ułatwić sobie kompilację często korzysta się z plików opisujących Projekt((Posiadają rozszerzenie *.gpr, zawierają informacje o opcjach kompilacji, katalogach, nazwach plików wynikowych etc.)).  Każdy kolejny pakiet to jeszcze jeden plik *.ads, i jeden *.adb. Ręczne tworzenie tych plików jest jak najbardziej możliwe, ale znacznie przyjemniejsze jest generowanie ich podstawowej struktury za pomocą GNATbench.

Tworzenie nowego projektu

Już raz stworzyliśmy nowy projekt, postaram się przejść teraz przez niego z paroma slowami komentarza na temat wybieranych opcji. Po wybraniu File -> New -> Ada Project poproszeni zostaniemy o podanie nazwy projektu. W katalogu o takiej nazwie, wewnatrz naszego Workspace, będą przechowywane pliki projektu (jeśli nie wybierzemy innego katalogu ręcznie w tym oknie).

W kolejnym oknie kreatora poproszeni zostaniemy o podanie nazwy procedury głównej((Main Subprogram Unit)). Oznacza to że kompilator będzie poszukiwał pliku o nazwie nazwa_procedury_glownej.adb, aby jako główną uruchamianą procedurę ustawić zawartą w nim nazwa_procedury_glownej. Poniżej możemy również zaznaczyć że chcemy wygenerować ten plik.

Następny krok to wybranie katalogów w których będziemy trzymać pliki pośrednie tworzone w trakcie kompilacji1. Warto pamiętać, że w trakcie kompilacji tworzy się tam "niezły bałagan", dlatego warto mieć ten folder jako osobny (co jest domyślnie ustawione), oraz gotowe pliki wykonywalne również umieszczać w osobnym katalogu.

W kolejnym etapie powinniśmy jeszcze wybrać narzędzie gnatmake. Zaznaczanie opcji używania Ady 2005 ma sens tylko dla starszych kompilatorów, gdyż GNAT2008 domyślnie używa tej wersji.

Tworzenie plików *.adb z *.ads.

W trakcie pracy nad projektem, zwłaszcza gdy mamy już jasną koncepcję co i tak chcemy stworzyć, wygodnie jest napisać tylko plik z specyfikacją. Zacznijmy od utworzenia takiego pliku: File->New->Ada Source, pamiętajmy aby wpisać nazwę z rozszerzeniem ads. Po wypełnieniu go specyfikacja potrzebnych nam funkcji, obiektów typów etc. Sprawdźmy czy plik nie zawiera żadnych bledow. Najprościej w tym celu użyć kombinacji klawiszy Ctrl+Alt+A czy też klikjąc Project->Analyze Sources. Jeśli nie ma żadnych błędów składniowych, plik z zawartoscią pakietu możemy wygenerować klikając Source -> Generate Package Body.

Z stworzonego przeze mnie przykładowego pliku przyklad.ads:

Listing:
  1. package przyklad is
  2.    subtype Wynik is Boolean;
  3.  
  4.    procedure Numer1(x,y : in Integer);
  5.    procedure Numer2(A,B : out Wynik);
  6.  
  7.    function dodaj(x,y : in Float)
  8.                   return Float;
  9.  
  10.    task Zadanie is
  11.       entry Wejscie1(zmienn : in out Wynik);
  12.    end Zadanie;
  13.  
  14.    protected type urzadzenie is
  15.       entry Wejscie1(zmienn : in out Wynik);
  16.       function Get_Stan
  17.         return Integer;
  18.       procedure Set_Sten(nowy : in Integer);
  19.    private
  20.       Stan : Integer;
  21.    end urzadzenie;
  22. end przyklad;

GnatBench Automatycznie wygenerował plik przyklad.adb:

Listing:
  1. package body przyklad is
  2.  
  3.    procedure Numer1 (x,y : in Integer) is
  4.    begin
  5.       --  Generated stub: replace with real body!
  6.       raise Program_Error;
  7.    end Numer1;
  8.  
  9.    procedure Numer2 (A,B : out Wynik) is
  10.    begin
  11.       --  Generated stub: replace with real body!
  12.       raise Program_Error;
  13.    end Numer2;
  14.  
  15.    function dodaj
  16.      (x,y : in Float)
  17.       return Float
  18.    is
  19.    begin
  20.       --  Generated stub: replace with real body!
  21.       raise Program_Error;
  22.       return dodaj (x, y);
  23.    end dodaj;
  24.  
  25.    task body Zadanie is
  26.    begin
  27.       --  Generated stub: replace with real body!
  28.       raise Program_Error;
  29.    end Zadanie;
  30.  
  31.    protected body urzadzenie is
  32.  
  33.       entry Wejscie1 (zmienn : in out Wynik) when True is
  34.       begin
  35.          --  Generated stub: replace with real body!
  36.          raise Program_Error;
  37.       end Wejscie1;
  38.  
  39.       function Get_Stan
  40.          return Integer
  41.       is
  42.       begin
  43.          --  Generated stub: replace with real body!
  44.          raise Program_Error;
  45.          return Get_Stan;
  46.       end Get_Stan;
  47.  
  48.       procedure Set_Sten (nowy : in Integer) is
  49.       begin
  50.          --  Generated stub: replace with real body!
  51.          raise Program_Error;
  52.       end Set_Sten;
  53.  
  54.    end urzadzenie;
  55.  
  56. end przyklad;

Od razu lojalnie ostrzegam że nie da się zmian w pakiecie ads uzupełnić w adb inaczej niż ręcznie, dlatego warto napisać przemyślaną wcześniej specyfikacje jak najpełniej.

Podsumowując, GNATbench bez problemu zastępuje nas w tworzeniu przynajmniej części szkieletu kodu, sprawiając że pisanie kodu jest mniej nużącą pracą.

  1. Intermediate Product Folder[]
Komentarze (0) Trackbacks (0)

Przepraszam, dodawanie komentarzy zablokowane.

Trackbacks are disabled.