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

  1. #1
    Membre confirmé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 220
    Points : 624
    Points
    624
    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
    12 898
    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 : 12 898
    Points : 58 653
    Points
    58 653
    Billets dans le blog
    46
    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 confirmé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 220
    Points : 624
    Points
    624
    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 : 105
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
    12 898
    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 : 12 898
    Points : 58 653
    Points
    58 653
    Billets dans le blog
    46
    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 confirmé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 220
    Points : 624
    Points
    624
    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 : 103
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
    12 898
    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 : 12 898
    Points : 58 653
    Points
    58 653
    Billets dans le blog
    46
    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.

  7. #7
    Membre confirmé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 220
    Points : 624
    Points
    624
    Par défaut
    j'ai tenter la commande mais toujours le même problème ... j'ai aussi redemarer le pc aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    but:
    
    Device at bus 1, address 4 appears to be a RP2040 device in BOOTSEL mode, but
        picotool was unable to connect. Maybe try 'sudo' or check your
        permissions.
    
     *  The terminal process "/home/oek/.pico-sdk/picotool/2.0.0/picotool/picotool 'load', '/home/oek/clignote/build/clignote.elf', '-fx'" failed to launch (exit code: 249). 
     *  Terminal will be reused by tasks, press any key to close it.
    je sais pas si c'est une compréhension de confusion entre le tty , l'usb, avec windows j'utilise que le port usb pour avoir le hello world et que peut être ici c'est de lire directement le port rs232 ? et pas le ports USB, quand je choisi de se connecter au pico2 sous windows je sélectionne "port COM3" à travers le port usb , mais est ce que vscode sous linux il s'attend à un port rs232 ?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 898
    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 : 12 898
    Points : 58 653
    Points
    58 653
    Billets dans le blog
    46
    Par défaut
    Il faut que le système puisse exécuter picotool sans utiliser sudo.

    Dans le dossier /etc/udev/rules.d, tu créées un fichier 99-picotool.rules avec le contenu :
    SUBSYSTEM=="usb", ATTR{idVendor}=="2e8a", ATTR{idProduct}=="0003", MODE="660", GROUP="plugdev"
    Et tu recharges les règles udev
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo udevadm control --reload-rules

    Edit : voir Uploading Sketches with Picotool

  9. #9
    Membre confirmé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 220
    Points : 624
    Points
    624
    Par défaut
    J'ai réussi à faire ce que je voulais avec windows et pas linux mais cela fonctionne je vais pouvoir compiiler correctement le pico2

    petit tuto pour ce qu'il veulent essayer:

    1 - installer vscode sous windows
    2 - installer le plugin raspberry pi pico
    3 - créer un projet avec cliquant sur risk
    4 - laisser pour la première fois installer les chaine de compilation tool
    5 - une fois le projet créer
    6 - aller sur le site https://smist08.wordpress.com/2024/1...rry-pi-pico-2/
    7 - modifier le fichier dans mon exemple j'ai mis le projet qui s'appelle risk donc risk.c
    8 - vider risk.c en y mettant les instructions assembleur:
    Code assembleur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .global main      # Provide program starting address to linker
    main:   jal   stdio_init_all
            mv    s0, x0
    loop:   la    a0, helloworld # load address of helloworld
            addi  s0, s0, 1
            mv    a1, s0        # counter        
            jal   printf
            j     loop
    .data
    helloworld:      .asciz "Hello RISC-V World %d\n"
    9 - modifier le fichier risk.c en risk.S
    10 - aller dans le fichier cmakeList.txt en y remplacement risk.c en risk.S
    Code make : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # Add executable. Default name is the project name, version 0.1
    add_executable(risk risk.c )
    add_executable(risk risk.S )
    11 - appuyer le boot sel pour y voir le volume RP2
    12 - sur vscode cliquer sur run
    a la fin vous y verrez "=========..." c'est qu'il a réussi a compiler et flasher le pico2
    13 - debrancher le pi pico2 et le rebrancher
    14 -dans l'onglet serial monitor cliquer sur start monitoring
    on voit que cela affiche bien un hello world.

    quelque images pour illustrer le mini tuto:
    Nom : vscode_risk.png
Affichages : 85
Taille : 107,2 Ko

    Sous débian je suis pas arriver à compiler correctement à cause des permission, si quelqu'un arrive à faire la même chose merci d'avance de poster la solution .

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 898
    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 : 12 898
    Points : 58 653
    Points
    58 653
    Billets dans le blog
    46
    Par défaut
    Citation Envoyé par keokaz Voir le message
    Sous débian je suis pas arriver à compiler correctement à cause des permission, si quelqu'un arrive à faire la même chose merci d'avance de poster la solution .
    J'ai essayé...

  11. #11
    Membre confirmé

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

    Informations forums :
    Inscription : Août 2008
    Messages : 1 220
    Points : 624
    Points
    624
    Par défaut
    J'ai réssayé avec un autre pc (c'était un dell), j'ai mis un rapsberry pi 5 et un noobs bookworm cela à fonctionner comme des roulettes pas de problème de permission ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Hello RISC-V World 850104
    Hello RISC-V World 850105
    Hello RISC-V World 850106
    Hello RISC---- Closed the serial port /dev/ttyACM0 ----
    par curiosité je suis allé sur le fichier 99-picotool.rules et rechercher une ligne 003 mais je ne l'ai pas trouvé:
    Code : 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
    SUBSYSTEM=="input", GROUP="input", MODE="0660"
    SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
    SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
    SUBSYSTEM=="*gpiomem*", GROUP="gpio", MODE="0660"
    SUBSYSTEM=="rpivid-*", GROUP="video", MODE="0660"
    
    SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
    SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chgrp -R gpio /sys/class/gpio && chmod -R g=u /sys/clas>
    SUBSYSTEM=="gpio", ACTION=="add", PROGRAM="/bin/sh -c 'chgrp -R gpio /sys%p && chmod -R g=u /sys%p'"
    
    # PWM export results in a "change" action on the pwmchip device (not "add" of a new device), so match actions other than "remove".
    SUBSYSTEM=="pwm", ACTION!="remove", PROGRAM="/bin/sh -c 'chgrp -R gpio /sys%p && chmod -R g=u /sys%p'"
    
    KERNEL=="ttyAMA[0-9]*|ttyS[0-9]*", PROGRAM="/bin/sh -c '\
            ALIASES=/proc/device-tree/aliases; \
            TTYNODE=$$(readlink /sys/class/tty/%k/device/of_node | sed 's/base/:/' | cut -d: -f2); \
            if [ -e $$ALIASES/console ]; then \
                if [ $$TTYNODE = $$(strings $$ALIASES/console) ]; then \
                    echo 0; \
                elif [ -e $$ALIASES/bluetooth ] && [ $$TTYNODE/bluetooth = $$(strings $$ALIASES/bluetooth) ]; then \
                    echo 1; \
                else \
                    exit 1; \
                fi \
            elif [ $$TTYNODE = $$(strings $$ALIASES/serial0) ]; then \
                echo 0; \
            elif [ $$TTYNODE = $$(strings $$ALIASES/serial1) ]; then \
                echo 1; \
            else \
                exit 1; \
            fi \
    '", SYMLINK+="serial%c"
    
    ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon1", RUN+="/bin/sh -c '\
            if echo RPi-Sense FB | cmp -s /sys/class/graphics/fb0/name; then \
                    echo 0 > /sys$devpath/bind; \
            fi; \
    '"
    Quand à mon dell le disque ne démarre plus il a rendu l'âme

    Sinon je n'avais pas vu qu'il était possible sans passer par une carte debug de flasher sans retoucher le bouton bootsel:
    avec ce tuto rapide


    il faut juste installer l'outil picotool
    modifier le fichier cmakefile en ajoutant avant extra outpout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pico_enable_stdio_usb(clignote 1)
    pico_add_extra_outputs(clignote)
    et à chaque fois qu'on compillera avec le bouton run de vscode, il va charger de suite le uf2.

+ 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, 21h03
  2. Réponses: 2
    Dernier message: 09/02/2010, 17h01
  3. Compiler un programme C avec VC++ 2008
    Par ymasur dans le forum Windows
    Réponses: 8
    Dernier message: 12/10/2008, 00h08
  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, 19h07
  5. Compiler du code Assembleur avec Visual C++
    Par maria_0009 dans le forum Visual C++
    Réponses: 1
    Dernier message: 14/01/2007, 14h29

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