3
votes

Générateur de nombres aléatoires pour Ada sur BBC MicroBit

Travailler sur un petit jeu pour le BBC Microbit.

avec Ada.Numerics.Discrete_Random rapporte "Ada.Numerics" n'est pas une unité de bibliothèque prédéfinie.

Ada fournit-il un autre moyen de générer des nombres aléatoires sur le BBC MicroBit? arch / ARM / Nordic / svd / nrf51 / nrf51_svd-rng définit un enregistrement de générateur de nombres aléatoires RNG_Peripheral. Est-ce ce que je recherche ou utilisé uniquement avec Bluetooth?

with Ada.Numerics.Discrete_Random;

package body Flip_A_Coin is

   package Random_Coin is new Ada.Numerics.Discrete_Random(Coin);

   G: Random_Coin.Generator;

   ------------------
   --  Reset       --
   ------------------

   procedure Reset is

   begin

      Random_Coin.Reset(G);

   end Reset;

   ------------------
   --  Flip        --
   ------------------

   function Flip
     return Coin is

   begin

      return Random_Coin.Random(G);

   end Flip;

begin

   Reset;

end Flip_A_Coin;

Mon code:

GPS 2018 (20180528) hosted on x86_64-pc-linux-gnu
GNAT Community 2018 (20180524-73)

Active toolchain: arm-eabi

the GNAT Programming Studio

(c) 2001-2018 AdaCore


1 commentaires

Vous avez nommé une variable G ?? !!


3 Réponses :


1
votes

Si vous disposez de nombres à virgule flottante, vous pouvez utiliser U_Rand disponible @ Mathpaqs .


0 commentaires

4
votes

Si vous construisez en utilisant

--RTS=ravenscar-full-microbit

dans votre projet ou

for Runtime ("ada") use "ravenscar-full-microbit";

sur la ligne de commande, vous trouverez les RNG Ada standard.

/ p>

Vous pouvez également essayer, comme vous le suggérez, d'utiliser le NRF51_SVD.RNG de Ada Drivers Library , ce qui devrait faire l'affaire.


7 commentaires

Êtes-vous en train de dire que Ada.Numerics n'est pas disponible sur le Microbit? Pouvez-vous expliquer pourquoi? Je rencontre le même problème mais concernant Sqrt et Arctan.


Utiliser le runtime ravenscar-full-microbit comme vous le suggérez me donne une foule d'erreurs, à commencer par "erreur:" s-stalib.adb "doit être compilé" et incluant beaucoup de messages sur les fichiers obsolètes et en lecture seule.


La discussion dans (ce numéro) [ github.com/AdaCore/Ada_Drivers_Library/issues/91] < / a> semble être à peu près le même problème sous-jacent - le runtime Microbit_ZFP ne donne pas accès aux bibliothèques Ada régulières.


Ada.Numerics. * est un ensemble de fichiers ( a-numeri.ads etc, ne vous inquiétez pas) qui sont inclus dans le runtime ravenscar-full mais pas dans le runtime zfp (zfp => zéro empreinte). Il serait possible de les copier dans le runtime zfp et de le reconstruire ... pas pour les timides. En ce qui concerne vos erreurs de compilation, la première chose à faire est de nettoyer tous les fichiers .o , .ali de votre build et réessayer.


Merci Simon. J'ai trouvé guide expliquant spécifiquement comment ajouter Ada.Numerics. * à la bibliothèque ZFP.


Bien! (a) il n'y a pas de répertoire math pour les versions CE, regardez dans gnat , (b) vous devrez peut-être ajuster le runtime.xml pour inclure -lm , -lc , -lgcc etc. dans le package Linker - comparer avec le ravenscar -version complète-


Les RNG Ada.Numerics sont assez lourds (une tâche simple utilisant le RNG discret nécessitait 4k de pile), ce qui pourrait être un inconvénient, en particulier sur un microbit avec 16k de SRAM.



1
votes

Un certain nombre de RNG sont disponibles dans les composants réutilisables PragmAda. Peut-être que l'un d'eux vous conviendra.

PragmARC


0 commentaires