IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Types incompatibles dans rpi-hal [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Types incompatibles dans rpi-hal
    Bonjour à toutes et à tous,

    J'utilise l'unité "rpi_hal" pour gérer les GPIO sur mon Raspberry Pi 3B+ qui est un environnement 64 bits. Ce dernier a pour OS raspian Stretch et j'y utilise Lazarus 1.6.2

    Dans cet environnement, la ligne suivante ne me produit aucune erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          BeginThread(@isr_handler,@isr,isr.ThreadId);  // http://www.freepascal.org/docs-html/prog/progse43.html
    Maintenant sur mon PC 64 bits avec Ubuntu 18.0.4 et Lazarus 2.0.6, cela me produit l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rpi_hal.pas(15793,31) Error: Incompatible type for arg no. 1: Got "<address of function(Pointer):LongInt;Register>", expected "<procedure variable type of function(Pointer):Int64;Register>"
    La fonction "isr_handler est définie comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function isr_handler(p:pointer):longint; // (void *isr)
    Si, sur mon PC, je remplace longint par int64, ça compile, mais alors, ça provoque l'erreur sur mon Raspberry.

    Dois-je comprendre que Lazarus 1.6.2 attend des pointeurs 32 bits (bien que fonctionnant dans un environnement 64 bits) alors que Lazarus 2.0.6 attend des pointeurs 64 bits ?

    Quelle balise de compilation employer pour faire cette différence.

    Cordialement.

    Pierre.

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut Pierre c'est surement du au fait que les versions de Lazarus ne sont pas les même (la déclaration de BeginThread à changer entre les 2), il peut aussi s'agir que la déclaration ne soit pas les même d'un processeur à l'autre "arm vs intel/amd" mais j'en doute vu que tes 2 environnement tournent en 64 bits. Ou bien il faudrait que ton unité ai besoin d'une petite mise à jour.

    sous ton raspi peux tu cliquer sur longint et regarder la déclaration de celui-ci et comparer avec ubuntu ?

    peut-être juste en rajoutant une commande préprocesseur dans l'unité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      {$if lcl_fullversion > 1062000} //1080000 faudrait regarder à partir de quelle version le changement s'opère exactement
          {$IFDEF cpux86_64}
             function isr_handler(p : Pointer): Int64;
          {$ELSE}
             function isr_handler(p : Pointer): Longint;
          {$ENDIF}
      {$else}
            // a voir si une autre commande suivant le cpu est nécessaire ici
            function isr_handler(p : Pointer): Longint;
      {$ifend}
    A+

    Jérôme

    EDIT : Petites questions : la version 1.6.2 de Lazarus elle en 32 ou 64 bits ? car d'après cette page seul les CPU ARM 32 bits sont détectés. Es tu sure que ta Raspian Stretch est une version 64 bits ?
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... EDIT : Petites questions : la version 1.6.2 de Lazarus elle en 32 ou 64 bits ? car d'après cette page seul les CPU ARM 32 bits sont détectés. Es tu sure que ta Raspian Stretch est une version 64 bits ?
    Merci pour le type de directive permettant de séparer les processeurs.

    Le Raspberry Pi 3B+ est bien muni d'un processeur 64 bits, mais je n'y avais pas pris garde, L'OS Raspbian Strecth est bien en 32 bits lui.

    Cordialement.

    Pierre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] [SQL] Type incompatible dans le critère
    Par alex.a dans le forum Access
    Réponses: 13
    Dernier message: 19/01/2008, 11h19
  2. Type incompatible dans une requête
    Par tleboukaka dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/10/2007, 11h59
  3. Réponses: 9
    Dernier message: 05/10/2006, 08h31
  4. [VBA] [SQL] Type incompatible dans le critere
    Par mimi1 dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/05/2006, 21h18
  5. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo