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

C Discussion :

Ecriture du code dans la RAM


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut Ecriture du code dans la RAM
    Bonjour,

    Je ne trouve pas d'informations à ce sujet : est-il possible d'écrire son programme pour la RAM ?
    Je ne parle pas des variables, mais d'un bout de code, une méthode entière par exemple ? A l'aide de pragma ? Ajouter une option de compilation ?

    D'avance merci.

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    C'est possible, ça se fait dans l'embarqué avec par exemple des pragma comme tu l'as écrit. Dans ces cas on distingue les diverses sections à utiliser.

    Par contre sur des processeurs plus gros et des systèmes d'exploitations (Windows, Linux, ...) le code est de toute façon toujours en RAM. Mais il est est mis des sections garanties comme étant inaccessibles en écriture pendant le déroulement du programme; le système et l'antivirus vont prendre ce type d'action pour une attaque.

    Donc tout dépend.

  3. #3
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    Dans mon cas c'est bien de l'embarqué, je souhaite faire cela pour gagner en rapidité (j'utilise un STM32).
    J'imagine qu'on trouve ces sections dans le fichier .ld? Mais je ne vois pas exactement à quoi ça correspond.

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Bonjour,
    J'ai eu une discussion avec un membre ici https://www.developpez.net/forums/d1...tion-code-ram/ peut être que tu cherches à faire la même chose ?

    Cette personne ne m'a jamais fait de retour, je ne sais donc pas si ça a fonctionné. A l'occasion il faudrait que j'essaie, il doit me rester un STM32F303RE
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    A première vu, ça ressemble beaucoup a ce que j'essaye de faire .
    Merci beaucoup. Si je pars sur cette solution, je te fais un retour.

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Ça serait sympa
    Merci


    Initialement j'avais choisi un tel micro pour une application qui nécessitait un peu de traitement du signal. L'idée était donc de mettre ces fonctions dans cette CCM RAM afin d'aller le plus vite possible.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  7. #7
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    Mon premier test n'est pas concluant...

    Pour compiler, j'ai remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MaFonction (int x, int y) __attribute__ ((section, (".ccmram")));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void MaFonction (int x, int y) __attribute__ ((section(".ccmram")));
    Je ne pense pas que debugger une fonction dans la RAM soit possible avec Eclipse. En testant, j'observe avec le debugger que je ne rentre pas dans la fonction.

    Est-il possible ne vérifier que les liens sont bien fait ? Si oui, comment ?

    Merci

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonjour à tous

    Pour en avoir fait une fois aux études il y a plus de 15ans, il y a un point qui n'est pas mentionné ici.
    Il faut faire deux choses pour exécuter un programme en RAM :
    - Mettre la directive qui indique au linker que le code sera en RAM, mais qui compile le code quelque part en mémoire non volatile (la Flash), c'est ce qui est indiqué plus haut
    - Faire une copie du bout de mémoire concerné entre la Flash et la RAM en début de programme, sinon l'appel à la fonction pointe vers une mémoire sans code.

    Mais je l'ai fait sur du DSP Texas Instrument et par conséquence, je ne sais pas comment cela ce passe sur STM, mais on devrait logiquement retrouver ces deux étapes.

    Bizarrement dans l'autre discussion indiquée par Vincent, c'est supposé de devoir le faire, mais jamais expliqué comment.

    Bonne suite

    Delias

  9. #9
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Pour ma part ce n'est pas comme cela qu'on écrit dans la RAM
    La tu indiquerai où se trouvera ton code (qui ne se trouve clairement pas dans la section de la RAM mais dans la ROM).

    Il faut juste pointer sur la RAM (et ça dépend de ta memorry map donc j'ai pas d'adresse à te donné là).
    Mais je suis un peu étonné de la question normalement un compilo est configurer pour taper dans la RAM (rien que pour le SP) et la section .bss (pour les variables global).

  10. #10
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    - Faire une copie du bout de mémoire concerné entre la Flash et la RAM en début de programme, sinon l'appel à la fonction pointe vers une mémoire sans code.
    Pour ma part ce n'est pas cpmme cela qu'on écrit dans la RAM
    Si je ne me trompe pas, c'est ce qui est fait dans le fichier startup qui copie de la flash vers la RAM. Voir étape 3 de la discussion indiquée par Vincent.

    Nom : ccmram.jpg
Affichages : 427
Taille : 105,1 Ko

Discussions similaires

  1. Ecriture du code dans jQuery
    Par J88988 dans le forum jQuery
    Réponses: 5
    Dernier message: 15/05/2017, 14h14
  2. Comment forcer l'ecriture en majuscule dans un champs en code ?
    Par PDelph7 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 02/11/2007, 13h41
  3. Ecriture de code html issu d'un tag dans un pop-up ?
    Par ouioui2000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/09/2005, 11h34
  4. code html en ram -> TWebBrowser pour affichage
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/04/2003, 22h55
  5. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

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