Article View: fr.comp.lang.ada
Article #77Re: Ada for Automation
From: slos
Date: Thu, 31 Jan 2013 21:37
Date: Thu, 31 Jan 2013 21:37
82 lines
3980 bytes
3980 bytes
Le mercredi 30 janvier 2013 19:04:36 UTC+1, Ludovic Brenta a écrit :
> Je suppose que nous sommes tous trop occupés à préparer
>
> le FOSDEM pour répondre en détail...
>
>
>
> En quelques mots très rapides:
>
>
>
> - n'utilise pas System.Address mais un type accès
>
> vers le record. Ajoute pragma Convention (C) au
>
> type accès.
>
>
>
> - pour les tableaux qui sont dans le record, utilise
>
> des instances de Interfaces.C.Pointers (ARM B.3.2).
>
> Dans le record, chaque "int" deviendra un
>
> Interfaces.C.ptrdiff_t et chaque pointeur vers
>
> tableau deviendra un Interfaces.C.Pointers.Pointer.
>
>
>
> Autre solution: les 4 longueurs peuvent devenir 4
>
> discriminants du record, les 4 tableaux étant contraints
>
> par ces discriminants. Je ne suis pas sûr que ça
>
> marcherait mais ça vaut peut-être le coup d'essayer.
>
>
>
> --
>
> Ludovic Brenta.
J'ai essayé avec les discriminants :
type Modbus_Mapping_Type1
(Bits_Number : Integer;
Input_Bits_Number : Integer;
Input_Registers_Number : Integer;
Registers_Number : Integer
) is
record
nb_bits : C.int := C.int(Bits_Number);
nb_input_bits : C.int := C.int(Input_Bits_Number);
nb_input_registers : C.int := C.int(Input_Registers_Number);
nb_registers : C.int := C.int(Registers_Number);
tab_bits : Byte_Array (0..Bits_Number);
tab_input_bits : Byte_Array (0..Input_Bits_Number);
tab_input_registers : Word_Array (0..Input_Registers_Number);
tab_registers : Word_Array (0..Registers_Number);
end record;
pragma Convention (C, Modbus_Mapping_Type1);
Ici j'obtiens un warning : variant record as no direct equivalent in C
type Modbus_Mapping_Type2 is
record
nb_bits : C.int := 0;
nb_input_bits : C.int := 0;
nb_input_registers : C.int := 10;
nb_registers : C.int := 20;
tab_bits : Byte_Array (0..0);
tab_input_bits : Byte_Array (0..0);
tab_input_registers : Word_Array (0..10);
tab_registers : Word_Array (0..20);
end record;
pragma Convention (C, Modbus_Mapping_Type2);
Là ça compile, ce qui ne veut pas dire que ça marche.
Mais ça fige la taille de la structure pour de bon.
Technical Details
Message-ID:
<14d62379-e11c-46e6-a616-2b48c8685915@googlegroups.com>Path:
arc1-ca.pugleaf.net!k2ni3907qap.0!nntp.google.com!p13no7551810qai.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<4e7e5467-fe89-4d55-8b46-80e3cd8af9f8@googlegroups.com> <ce90c01c-2d8c-4a0c-83d7-1a8d8bab8e7f@googlegroups.com> <044ae18c-9854-4f47-9b8e-b740dffe20f8@googlegroups.com>Show Full Headers
Complete Article Headers
X-Google-Thread: 43d0c745c,3ec9ea2623601032
X-Google-Attributes: gid43d0c745c,public,usenet
X-Google-NewGroupId: yes
X-Google-Language: FRENCH,ASCII
X-Received: by 10.224.175.65 with SMTP id w1mr5096330qaz.7.1359668241010;
Thu, 31 Jan 2013 13:37:21 -0800 (PST)
X-Received: by 10.49.15.38 with SMTP id u6mr1005131qec.8.1359668240936; Thu,
31 Jan 2013 13:37:20 -0800 (PST)
Path: arc1-ca.pugleaf.net!k2ni3907qap.0!nntp.google.com!p13no7551810qai.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: fr.comp.lang.ada
Date: Thu, 31 Jan 2013 13:37:20 -0800 (PST)
In-Reply-To: <044ae18c-9854-4f47-9b8e-b740dffe20f8@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.119.168.166;
posting-account=O3LyFwoAAACc1uh60ZcOUmAGdDmGsEcV
NNTP-Posting-Host: 80.119.168.166
References: <4e7e5467-fe89-4d55-8b46-80e3cd8af9f8@googlegroups.com>
<ce90c01c-2d8c-4a0c-83d7-1a8d8bab8e7f@googlegroups.com> <044ae18c-9854-4f47-9b8e-b740dffe20f8@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <14d62379-e11c-46e6-a616-2b48c8685915@googlegroups.com>
Subject: Re: Ada for Automation
From: slos <new.stephane.los@gmail.com>
Injection-Date: Thu, 31 Jan 2013 21:37:20 +0000
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable