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

Raspberry Pi Discussion :

Mini tuto : compiler un programme assembleur avec le pi pico rp2350 risk V sous vscode windows.


Sujet :

Raspberry Pi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut Mini tuto : compiler un programme assembleur avec le pi pico rp2350 risk V sous vscode windows.
    bonjour j'ai un fichier makefile et je souhaite le modifier pour qu'il soit compatible windows avec vscode:
    https://github.com/metebalci/rp2350-...uild/tree/main
    ou celui là:
    https://smist08.wordpress.com/2024/1...rry-pi-pico-2/
    Avec le plugin pi pico2 pour vscode il simple de compiler un projet.
    il y a t'il moyen de créer un projet avec le pico2 rp2350 sous ce plugin et de l'adapter en y mettant le makefile ? et le faire compiler par vscode pour pouvoir
    récupérer le uf2?

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Salut,

    The application can be built with Arm GNU Toolchain without using the Pico SDK build system
    Le plugin VSCode pour Pi Pico est le plugin officiel de la Fondation RPi, prévu pour les applications utilisant le SDK C/C++ officiel (ou MicroPython).
    Tu ne dois pas utiliser ce plugin, mais la chaîne Arm GNU comme indiqué. Il y a un lien Using a Pico 2 RP2350 without the Pico SDK Build System à suivre.

    Pourquoi n'utilises-tu pas le kit officiel ?

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    merci de ta réponse, j'ai voulu essayer directement le bouton "compile" pour obtenir le uf2 mais sous vscode windows il a plein d'erreur et de dépendance manquant.
    le git que j'ai mis est du linux et pas pour windows les commandes sont par les même j'ai du réinstaller vscode et la chaine sous debian.

    maintenant une fois installé je test un exemple avec le langage C, je bloc sur un problème de permission d'accès au tty
    Nom : Capture d’écran du 2024-11-01 17-02-37.png
Affichages : 323
Taille : 38,6 Ko

    une fois que j'aurais réussi à faire obtenir un hello word en affichant sur la console, je testerais si je peux à l'aide de vscode directement produire un uf2 du lien que j'ai mis.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Il y a des messages sur BOOTSEL, tu es bien en mode BOOTSEL ?

    Il faut débrancher le câble USB, le rebrancher tout en appuyant sur le bouton BOOTSEL de la carte pour rentrer dans ce mode.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    oui je suis en boot sel car dans l'explorateur de fichier on voit le dossier "RP2", sur windows ca fonctionnen assez bien mais dès qu'on passe par linux il y a toujours des soucie à réglé ...
    j'ai donc essayer pour le moment de compiler directement sans le SDK puisque je suis sur linux, j'ai donc le makefile comme ceci:
    Code make : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    // Copyright 2024 Mete Balci
    //
    // SPDX-License-Identifier: GPL-3.0-or-later
    
    #include <stdbool.h>
    
    #include "RP2350.h"
    #include "core_cm33.h"
    
    // On Pico2, LED is connected to GPIO25
    
    // defined in CMSIS as __StackTop
    extern uint32_t __INITIAL_SP;
    
    extern __NO_RETURN void _start(void);
    
    void Default_Handler(void);
    __NO_RETURN void Reset_Handler(void);
    void NMI_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void HardFault_Handler(void) __attribute__ ((weak));
    void MemManage_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void BusFault_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void UsageFault_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void SecureFault_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void SVC_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void DebugMon_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void PendSV_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    void SysTick_Handler(void) __attribute__ ((weak, alias("Default_Handler")));
    
    // defined in system_RP2350.h
    typedef void(*VECTOR_TABLE_Type)(void);
    // __VECTOR_TABLE is __Vectors (m-profile/cmsis_gcc.h)
    extern const VECTOR_TABLE_Type __VECTOR_TABLE[496];
    // attribute is defined as (used, section(".vectors"))
    const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = {
      (VECTOR_TABLE_Type)(&__INITIAL_SP),
      Reset_Handler,
      NMI_Handler,
      HardFault_Handler,
      MemManage_Handler,
      BusFault_Handler,
      UsageFault_Handler,
      SecureFault_Handler,
      0,
      0,
      0,
      SVC_Handler,
      DebugMon_Handler,
      0,
      PendSV_Handler,
      SysTick_Handler
    };
    
    void Default_Handler(void)
    {
      while (1);
    }
    
    __NO_RETURN void Reset_Handler(void)
    {
      // defined in CMSIS as __StackLimit
      extern uint32_t __STACK_LIMIT;
    
      __set_PSP((uint32_t)(&__INITIAL_SP));
      __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
      __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
    
      // copy data section from FLASH to RAM
      extern uint32_t* __data_start__;
      extern uint32_t* __data_end__;
      extern uint32_t* __data_source__;
    
      uint32_t* p = __data_start__;
      uint32_t* q = __data_source__;
    
      while (p < __data_end__)
      {
        *p++ = *q++;
      }
    
      // start newlib._start in newlib/libc/sys/arm/crt0.S
      _start();
    }
    
    void HardFault_Handler(void)
    {
      while (1);
    }
    
    __STATIC_FORCEINLINE void configure_led()
    {
      // function 5 = SIO 
      IO_BANK0->GPIO25_CTRL = 0x05;
      PADS_BANK0->GPIO25 = 0x34;
      // enable output
      SIO->GPIO_OE_SET = 0x01U << 25;
    }
    
    __STATIC_FORCEINLINE void turn_led_on()
    {
      SIO->GPIO_OUT_SET = 0x01U << 25;
    }
    
    __STATIC_FORCEINLINE void turn_led_off()
    {
      SIO->GPIO_OUT_CLR = 0x01U << 25;
    }
    
    __STATIC_FORCEINLINE void flip_led()
    {
      SIO->GPIO_OUT_XOR = 0x01U << 25;
    }
    
    int main(void) 
    {
      configure_led();
      turn_led_on();
      
      while (1) {
        for (int i = 0; i < 1000000; i++) __NOP();
        flip_led();
      }
    
      return 0;
    }

    j'ai donc fait un make all,, j'obtient un programme.elf, problème c'est qu'il me fait un .uf2 j'ai convertir un .elf en uf2 avec cette application:

    git clone https://github.com/rej696/elf2uf2.git

    j'ai converti mon elf en uf2 mais rien ne se passe je n'ai pas de led qui clignote ni de disparation du dossier rp? je vais voir si je passe par la compilation de visual studio ça passe ...

    Avec le script en C "hello word", j'ai tenté de lire le message mais sous linux il n'arrive pas à se connecter alors qu'avec windows vscode il fonctionne très bien:

    Nom : Capture d’écran du 2024-11-01 18-17-27.png
Affichages : 328
Taille : 37,3 Ko

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Sous Linux, il faut donner la permission pour accéder au port USB.

    Essaie avec sudo usermod -aG dialout $USER.

    Je crois qu'il faut se déconnecter et reconnecter pour valider les changements.

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

Discussions similaires

  1. Débuter dans la programmation Assembleur avec le Terminal Mac OS X
    Par Hugo2297 dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 23/06/2013, 20h03
  2. Réponses: 2
    Dernier message: 09/02/2010, 16h01
  3. Compiler un programme C avec VC++ 2008
    Par ymasur dans le forum Windows
    Réponses: 8
    Dernier message: 11/10/2008, 23h08
  4. compiler un programme TC avec code::blocks ou un autre compilateur
    Par acacia dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 24/01/2008, 18h07
  5. Compiler du code Assembleur avec Visual C++
    Par maria_0009 dans le forum Visual C++
    Réponses: 1
    Dernier message: 14/01/2007, 13h29

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