Страниц: 1 ... 8 9 [10] 11 12
  Печать  
Автор Тема: ADA и QNX  (Прочитано 109412 раз)
s_kSubj
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #135 : Марта 31, 2005, 06:00:15 pm »

Ага, libiconv нашел (из одноименного пакета если не ошибаюсь).
Тревожит сообщение gcc насчет отсутствия компилятора..
Записан
s_kSubj
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #136 : Марта 31, 2005, 09:17:25 pm »

Тээк, все настроил, можете небеспокоиться насчет ликбезов.
Для тестирования выбрал зубочистку, которую еще месяц назад писал. Представляет из себя календарик по принципу бумажных табличных календариков на 1900-2039гг(мож видели). На всякий случай сюда выложу, мож пригодится кому Wink :

<

---------------------------------------------
-- Project: Calendar 1900-2039
-- Description: Main module
-- Copyright (c) 2005 by Subj (subj@bk.ru)
-- File: scalendar.adb
-- Programming Language: ADA95
-- 01.03.2005
---------------------------------------------
with Ada.Text_Io;
with Ada.Integer_Text_Io;
with Calculus;
use Ada.Text_Io;
use Ada.Integer_Text_Io;
procedure SCalendar is
Answer : String := "N";
Year : Calculus.AYear;
Month : Calculus.AMonth;
Date : Calculus.ADate;
begin
Calculus.Create;
-- Main Loop
loop
-- Input Year
loop
declare
Y : Calculus.AYear;
begin
Put("Write Year(1900-2039): ");
Get(Y);
Year := Y;
exit;
exception
when Constraint_Error =>
Put_Line("That number should be between 1900 and 2039");
end;
end loop; -- Input Year
-- Input Month
loop
declare
M : Calculus.AMonth;
begin
Put("Write Month(1-12): ");
Get(M);
Month := M;
exit;
exception
when Constraint_Error =>
Put_Line("That number should be between 1 and 12");
end;
end loop; -- Input Month
-- Input Date
loop
declare
D : Calculus.ADate;
begin
Put("Write Date(1-31): ");
Get(D);
Date := D;
exit;
exception
when Constraint_Error =>
Put_Line("That number should be between 1 and 31");
end;
end loop; -- Input Date
Put(Integer'Image(Year) & " :" & Integer'Image(Month) & " :" & Integer'Image(Date) & " > ");
Put_Line(Calculus.GetDay(Year, Month, Date));
Put("Press Q (q) - key for EXIT program or any key for REPEAT: ");
Get(Answer);
exit when (Answer = "Q") or (Answer = "q");
end loop; --Main Loop
exception
when Data_Error =>
null; -- when not integer
when others =>
null; --when xren znat chto
end SCalendar;

<

---------------------
-- File Calculus.ads
---------------------
package Calculus is
subtype AYear is Integer range 1900..2039;
subtype AMonth is Integer range 1..12;
subtype ADate is Integer range 1..31;
-----------------------------------------------------------------------------
procedure Create;
-----------------------------------------------------------------------------
function GetDay(CYear : AYear; CMonth : AMonth; CDate : ADate) return String;
-----------------------------------------------------------------------------
end Calculus;

<

---------------------------------------------
-- Project: Calendar 1900-2039
-- Description: Calculus Day
-- Copyright (c) 2005 by Subj (subj@bk.ru)
-- File: Calculus.adb
-- Programming Language: ADA95
-- 01.03.2005
---------------------------------------------
package body Calculus is
S : String := "UP";
BaseDays : array(1..7) of String(1..2) :=
("MO", "TU", "WE", "TH", "FR", "SA", "SU");
BaseMonths : array(1..7, 1..3) of Integer :=
(((200),(3),(11)),
((201),(Cool,(0)),
((5),(0),(0)),
((100),(10),(0)),
((101),(4),(7)),
((9),(12),(0)),
((6),(0),(0)));
Years : array(1..25, 1..7) of Integer;
Months : array(1..7, 1..7, 1..3) of Integer;
Dates : array(1..5, 1..7) of Integer;
Days : array(1..7, 1..7) of String(1..2);
Table : array(1900..2039, 1..12, 1..31) of String(1..2);
-----------------------------------------------------------------------------
procedure Create is
--------------------------------------------------------------------------
procedure FillTable is
tempY1 : Integer := 1900;
tempY2,
tempM,
tempDat,
tempDay,
tempT1,
tempT2,
tempT3 : Integer := 0;
--------------------------------------------------------------------------
function SearchLine(YMD, Y, M, D : Integer) return Integer is
R : Integer;
begin
case YMD is
when 1 =>
for i in 1..25 loop
for j in 1..7 loop
if Years(i, j) = Y then
R:=j;
exit;
end if;
end loop;
end loop;
when 2 =>
for i in 1..7 loop
for k in 1..3 loop
if Months(i, Y, k) = M then
R:=i;
exit;
end if;
end loop;
end loop;
when 3 =>
for i in 1..5 loop
for j in 1..7 loop
if Dates(i, j) = D then
R:=j;
exit;
end if;
end loop;
end loop;
when others => R:=0; --It's Unreal, but nado
end case;
return R;
end SearchLine;
--------------------------------------------------------------------------
begin
-- Years
for i in 1..25 loop
for j in 1..7 loop
tempY2 := tempY2+1;
if tempY2 > 4 then
tempY2 := 0;
Years(i, j) := 0;
else
Years(i, j) := tempY1;
tempY1 := tempY1+1;
end if;
end loop;
end loop;
-- Months
for i in 1..7 loop
for j in 1..7 loop
for k in 1..3 loop
tempM := i-1+j;
if tempM > 7 then
tempM := tempM-7;
end if;
Months(i, j, k) := BaseMonths(tempM, k);
end loop;
end loop;
end loop;
-- Dates
for i in 1..5 loop
for j in 1..7 loop
if (i = 1) and (j in 1..4) then
Dates(i,j) := 0;
else
tempDat := tempDat+1;
Dates(i, j) := tempDat;
end if;
end loop;
end loop;
-- Days
for i in 1..7 loop
for j in 1..7 loop
tempDay := i-1+j;
if tempDay > 7 then
tempDay := tempDay-7;
end if;
Days(i, j) := BaseDays(tempDay);
end loop;
end loop;
-- Table
for i in 1900..2039 loop
for j in 1..12 loop
for k in 1..31 loop
tempT1 := j;
if ((i rem 4 = 0) and (i rem 100 /= 0)) or (i rem 400 = 0) then
if tempT1 = 1 then
tempT1 := 101;
elsif tempT1 = 2 then
tempT1 := 201;
end if;
else
if tempT1 = 1 then
tempT1 := 100;
elsif tempT1 = 2 then
tempT1 := 200;
end if;
end if;
tempT2 := SearchLine(1, i, 0, 0);
tempT2 := SearchLine(2, tempT2, tempT1, 0);
tempT2 := 7-tempT2+1;
tempT3 := SearchLine(3, 0, 0, k);
Table(i, j, k) := Days(tempT2, tempT3);
if ((tempT1 = 200) and (k > 28)) or ((tempT1 = 201) and (k > 29)) then
Table(i, j, k) := S;
end if;
if ((j = 4) or (j = 6) or (j = 9) or (j = 11)) and (k > 30) then
Table(i, j, k) := S;
end if;
end loop;
end loop;
end loop;
end FillTable;
--------------------------------------------------------------------------
begin
FillTable;
end Create;
-----------------------------------------------------------------------------
function GetDay(CYear : AYear; CMonth : AMonth; CDate : ADate) return String is
begin
return Table(CYear, CMonth, CDate);
end GetDay;
-----------------------------------------------------------------------------
end Calculus;

Думаю за место Hello world можно будет применять для тестирования.. Smiley
Записан
s_kSubj
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #137 : Апреля 01, 2005, 07:05:27 pm »

Кстати, запустив стандартный Solitaire (Games) можно увидеть следующее:
карта Король крести - C. Babbage
Дама крести - Ada Byron
и соответственно портреты ...
Записан
AG
QOR.Moderator
*****
Offline Offline

Сообщений: 872



Просмотр профиля WWW
« Ответ #138 : Апреля 01, 2005, 11:25:57 pm »

s_kSubj
карта Король крести - C. Babbage
Дама крести - Ada Byron
и соответственно портреты ...


Да, народ в КУСС шутить изволил... А солитёрчик красивый вышел...
Записан

Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #139 : Июля 15, 2005, 10:58:25 am »

Народ!

Каково состояние дел и общий настрой по данной теме?
Реально кто-нибудь выполняет(-нял) проекты на сём соединении (QNX + Ada)? Я имею в виду чего-нибудь по-сложнее хеллоууорлда... :о)
Записан
Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #140 : Июля 18, 2005, 11:51:09 am »

Ну что ж, видать - никакого настроя? Всё - "на шесть часов"?
Записан
s_kSubj
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #141 : Июля 18, 2005, 03:24:44 pm »

А я вот так и не смог импортировать функцию in8 и ей подобные.
Вполне законный вопрос возник, хотя к данной тематике это не имее отношения, казалось бы, но мысля глубже, еще как имеет.
Если я сам напишу некую функцию на С, свою, то как ее импортировать в Ада програму? То есть как организовать исходные файлы, где что прописать, чтобы "Pragma Import" сработал?
Допустим есть файла: f.c, в нем есть функция:
int myf(){
return 5;
}
и хочу, чтобы в Ада программе она работала, примерно так:
with ada.Text_IO;
use ada.Text_IO;
procedure t is
function c_fync return Integer;
pragma import( C, c_fync, "myf" );
i:integer;
begin
i:=c_fync;
ada.Text_IO.Put_Line(integer'image(i));
end t;
Где, что и как нужно доделать/доработать?
Пытался сделать через extern int myf(); , но чтот ни в какую...
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #142 : Июля 18, 2005, 07:38:19 pm »

Вот пример как импортировать функцию на С в Ада програму.

--- imported_function.c ----
#include <stdio.h>
imported_function ()
{
  printf ("
I am now in the imported function

";
}

--- use_of_import.adb ---
procedure Use_Of_Import is
 procedure Imported_Function;
 pragma Import (C, Imported_Function, imported_function";
begin
 Imported_Function;
end Use_Of_Import;

сначала нада
gcc -c -o imported_function.o imported_function.c
а потом
gnatmake use_of_import -cargs -O2 -largs imported_function.o
и получаем
./use_of_import
I am now in the imported function
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #143 : Июля 18, 2005, 09:02:54 pm »

А вот состояние дел по данной теме следующие:
на сегодня имеем трее линии компилятора gcc -  gcc 3.4, gcc 4.0 и gcc 4.1.
Последние стабилные версии это gcc 3.4.4, gcc 4.0.1. В линии gcc 4.1 пока нет стабилной версии.
Об gcc 4.0.0 лучше забыть. Я собрал все компиляторы стабилные gnat 3.4.4, gnat 4.0.1 и нестабилный gnat 4.1.
С точки зрения Ады gnat 3.4.4 и следующий gnat 3.4.5 не изменяеться.
gnat 4.0.1 а прежде всего gnat 4.1 имееть много изменений. Гороздо улучшена обработка ошыбок во время компилации.
Вводяться новые языковые конструкции с  Ada 2005. Но имееться определенные трудности связанные с проблемой оптимализации.
И так надо осторожно проверять как будеть вести себе програма если будемь компилировать используя -О2 или -О3.
Программа может вести себя иначе в зависимости от того используем -О0, -О1 или -О2. К стати gnat 4.1 помогаеть обнаруживать
такие опасные места в программе и выдаеть сообшения как их обойти.
Мне удалось тоже скомпилировать ASIS используя gnat 3.4.5, он должен работать тоже с gnat 3.4.4.
Я сегодня или завтра должен положыть ASIS и gnat 4.1 на http://www.ajam.republika.pl. Там можна взять gnat 3.4.4 и gnat 4.0.1.
Ко мне обратились с германии и испании, в связи с использованнем Ады в QNX, к сожалении как обстоить дело на сегодня мне
не известно. А я пока практически занимаюсь только самим компилятором.
Записан
s_kSubj
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #144 : Июля 19, 2005, 01:17:17 pm »

bbceler
Вот пример как импортировать функцию на С в Ада програму....

Я был близок
Можно в качестве проекта, того что по сложнее хеллоуворлда, написать библиотеку, то есть оболочку к функциям API QNX. Здесь правда важнее шаблон сообразить наверное будет...
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #145 : Сентября 26, 2005, 09:04:48 pm »

"Вышла новая публичная версия компилятора GNAT: GNAT GPL Edition. Компилятор поддерживает некоторые возможности из грядущего стандарта Ада 2005. В комплекте с компилятором идут новые версии GPS, AWS, PolyORB и другого ПО. Отличительной особенностью данной версии является поставка библиотек под лицензией GPL. Это налагает запрет на компилирование программ под лицензией, отличной от GPL."
Я это взял с сайта http://www.ada-ru.org/ ( чтобы было быстрее ).
Новый компилатор gnat-gpl-2005 базируеть на gcc 3.4.5, но он очень отличаетсья от компилатора gnat 3.4.5 в котором нет вообше
никаких элементов стандарта  Ада 2005. С первого взгляда видно, что gnat 4.1.0 имееть много обшего с gnat-gpl-2005. Достаточно
сказать что в источниках gnat-gpl-2005 нет одного файла и я его нашел в источниках gnat 4.1.0.
Я собрал gnat-gpl-2005 используя сами последние сорсы - gcc-3.4-20050920. Компилятор проходить тесты acats 2.5 с результатом
               === acats tests === ( -O2 )
                === acats Summary ===
   # of expected passes            2318
   # of unexpected failures        4
   *** FAILURES: c352001 c52103x cxb3006 cxb3012
сам gnat 3.4.5 проходить эти тесты без ошибок, так что думаю что надо тшательно просмотреть эти тесты и сравнить библетеки
gnat-gpl-2005 с gnat 4.1.0.  Пока не известно какая будеть стратегия Ada Core в отношени к gnat-gpl-2005.  Изменения будуть доступные
или так как в случае gnat 3.15  надо было ждать три года.
С gnat-gpl-2005 доступне очень интересные программы примеры которые показывають новые возможности языка.
Компилятор gnat-gpl-2005 можно скачать с http://www.ajam.republika.pl а сам gnat-gpl-2005 смотрите на https://libre2.adacore.com/GNAT
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #146 : Марта 27, 2006, 12:20:06 am »

Привет всем.
На сегодня имеем следуюшие компилаторы gnat для QNX 6.3.
1. gnat-GPL2005 основан на gcc3.4.5 или gcc3.4.6 - gnat3.4.5/gnat3.4.6.
     К стати кажется что на gcc3.4.6 окончилась линия gcc3.4*.
2. gnat4.0.3 - эта версия практически не поддерживаеть ada 2005
3. gnat4.1.0 - эта версия очень похожа на gnat-GPL2005 но во первых
    gnat4.1.0 проходить тесты acats но только с ключом -O0. Но если взять -O2 или -O3
    то некоторые тесты не проходят. Тоже самое происходить с gnat4.1.1.
    Этого нет с gnat-GPL2005 который проходить тесты acats с -O3.
    Во вторых с gnat-GPL2005 есть много примеров относящихся к новому стандарту
    ada 2005.  gnat3.4.5/gnat3.4.6 компилируеть все эти примеры, а gnat4.1.0 и gnat4.1.1
    нет.
4. gnat4.2.0 - к сожалени у меня эсть только одна версия которую удалось скомпилировать.
    Похожие проблемы были с gnat4.1 - не удается пройти вторую стадию постройки
    компилятора.
Тепер компилаторы для QNX 6.3 доступны под http://www.ajam.org.pl
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #147 : Марта 27, 2006, 12:38:17 am »

И еще одно. Теперь gnat3.4.6 и gnat4.1.0 работають с addr2line, gprof и gnatmem.
Эсли хотите использовать gdb, то лучше вместо -g использовать -gstabs.
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #148 : Июля 10, 2006, 02:58:55 pm »

Новая публичная версия компилятора GNAT: GNAT GPL 2006 уже доступна на
сайте http://www.ajam.org.pl/ - gnat-GPL2006-x86-qnx6.3.tar.bz2.
Там я поместил тоже новый gdb6.4-GnatGPL2006-qnx6.3.
Он даеть возможность вести debugging задач языка ада.
И думаю очень важно что тепер компилятор gcc даеть правилную информацию
для gdb. К примеру так выглядить работа с дебаггером
==========================================================
 prg4.adb
......................................
WITH Ada.Text_IO;
PROCEDURE Start_Buttons IS
------------------------------------------------------------------------
--| Show the declaration of a simple task type and three
--| variables of that type. The tasks use DELAYs to cooperate.
--| "Start button" entries are used to to control starting order.
--| Author: Michael B. Feldman, The George Washington University
--| Last Modified: December 1995                                    
------------------------------------------------------------------------
  TASK TYPE SimpleTask (Message: Character; HowMany: Positive) IS
    -- This specification provides a "start button" entry.
       ENTRY StartRunning;
  END SimpleTask;

  TASK BODY SimpleTask IS

  BEGIN -- SimpleTask
        -- The task will "block" at the ACCEPT, waiting for the "button"
        -- to be "pushed" (called from another task, Main in this case).
       ACCEPT StartRunning;
       FOR Count IN 1..HowMany LOOP
             Ada.Text_IO.Put(Item => "Hello from Task " & Message);
             Ada.Text_IO.New_Line;
             DELAY 0.1;            -- lets another task have the CPU
   END LOOP;
  END SimpleTask;  

  -- Now we declare three variables of the type
  Task_A: SimpleTask(Message => 'A', HowMany => 5);
  Task_B: SimpleTask(Message => 'B', HowMany => 7);
  Task_C: SimpleTask(Message => 'C', HowMany => 4);

BEGIN -- Start_Buttons
-- Tasks will all start executing as soon as control
-- reaches this point, but each will block on its ACCEPT
-- until the entry is called. In this way we control the starting
-- order of the tasks.
  Task_B.StartRunning;
  Task_A.StartRunning;
  Task_C.StartRunning;
END Start_Buttons;
...........................................
#gnatmake -g prg4
#gdb prg4

GNU gdb 6.4 for GNAT Pro 2006 (20060522)
Copyright 2005 Free Software Foundation, Inc.
Ada Core Technologies version of GDB for GNAT Professional
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
This GDB was configured as "i386-pc-nto-qnx6.3.0"...
(gdb) start
Breakpoint 1 at 0x80517df: file prg4.adb, line 2.
Starting program: /src/Temp/prg4
start_buttons () at prg4.adb:2
2   PROCEDURE Start_Buttons IS
(gdb) info tasks
  ID       TID P-ID Pri State                  Name
  1   808f020    0  31 Runnable               main_task
(gdb) info threads
  1 process 1921107  start_buttons () at prg4.adb:2
(gdb) l
2   PROCEDURE Start_Buttons IS
3   ------------------------------------------------------------------------
4   --| Show the declaration of a simple task type and three
5   --| variables of that type. The tasks use DELAYs to cooperate.
6   --| "Start button" entries are used to to control starting order.
7   --| Author: Michael B. Feldman, The George Washington University
8   --| Last Modified: December 1995                                    
9   ------------------------------------------------------------------------
10   
11     TASK TYPE SimpleTask (Message: Character; HowMany: Positive) IS
(gdb) n
11     TASK TYPE SimpleTask (Message: Character; HowMany: Positive) IS
(gdb)
18     TASK BODY SimpleTask IS
(gdb)
35     Task_A: SimpleTask(Message => 'A', HowMany => 5);
(gdb)
36     Task_B: SimpleTask(Message => 'B', HowMany => 7);
(gdb)
37     Task_C: SimpleTask(Message => 'C', HowMany => 4);
(gdb)
2   PROCEDURE Start_Buttons IS
(gdb)
46     Task_B.StartRunning;
(gdb) info threads
  4 process 1921107  0xb032e9f9 in SyncCondvarWait_r ()
   from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
  3 process 1921107  0xb032e9f9 in SyncCondvarWait_r ()
   from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
  2 process 1921107  0xb032e9f9 in SyncCondvarWait_r ()
   from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
  1 process 1921107  start_buttons () at prg4.adb:46
(gdb) info tasks
  ID       TID P-ID Pri State                  Name
  1   808f020    0  31 Runnable               main_task
  2   808e6f8    1  31 Accept Statement       task_a
  3   808b7c0    1  31 Accept Statement       task_b
  4   808b0a0    1  31 Accept Statement       task_c
(gdb) n
47     Task_A.StartRunning;
(gdb) info tasks
  ID       TID P-ID Pri State                  Name
  1   808f020    0  31 Runnable               main_task
  2   808e6f8    1  31 Accept Statement       task_a
  3   808b7c0    1  31 Runnable               task_b
  4   808b0a0    1  31 Accept Statement       task_c
(gdb) info hreads
  4 process 1921107  0xb032e9f9 in SyncCondvarWait_r ()
   from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
  3 process 1921107  0xb031ade2 in pthread_mutex_unlock ()
   from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
  2 process 1921107  0xb032e9f9 in SyncCondvarWait_r ()
   from /usr/qnx630/target/qnx6/x86/lib/libc.so.2
  1 process 1921107  start_buttons () at prg4.adb:47
(gdb) n
48     Task_C.StartRunning;
(gdb)
50   END Start_Buttons;
(gdb)
Hello from Task A
Hello from Task C
Hello from Task B
.................
Hello from Task A
Hello from Task B
Hello from Task B
Hello from Task B
main (argc=1, argv=(system.address) 0x8047a0c, envp=(system.address) 0x8047a14)
    at b~prg4.adb:199
199         Do_Finalize;
(gdb) info threads
  1 process 1921107  main (argc=1, argv=(system.address) 0x8047a0c,
    envp=(system.address) 0x8047a14) at b~prg4.adb:199
(gdb) info tasks
  ID       TID P-ID Pri State                  Name
  1   808f020    0  31 Runnable               main_task
(gdb) n
200         Finalize;
(gdb)
201         return (gnat_exit_status);
(gdb)
.................................
Program exited normally.
(gdb) q
Записан
mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #149 : Июля 10, 2006, 03:04:42 pm »

bbceler ваши сборки из любви к искусству или для реальных проектов?
Записан
Страниц: 1 ... 8 9 [10] 11 12
  Печать  
 
Перейти в: