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
3 Réponses :
Si vous disposez de nombres à virgule flottante, vous pouvez utiliser U_Rand disponible @ Mathpaqs . p >
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.
Ê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.
Un certain nombre de RNG sont disponibles dans les composants réutilisables PragmAda. Peut-être que l'un d'eux vous conviendra.
Vous avez nommé une variable
G
?? !!