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 :

Créer une librairie langage C


Sujet :

C

  1. #21
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 15
    Points
    15
    Par défaut
    Essayé mais toujours le même soucis.. je dois faire une erreur quelque part mais où..

  2. #22
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    As-tu bien tout recompiler dans C::B ?

    Peux-tu enlever les options -ffreestanding -flto de C::B et -ffunction-sections -fdata-sections de Kinetis ?

  3. #23
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 15
    Points
    15
    Par défaut
    Great! C'était le -flto qui causait le problème. Merci beaucoup!

    Avant de clore j'en profite d'avoir quelqu'un du métier pour poser 2-3 dernières questions sur les directives de compilation.

    -Est-ce que la directive définissant le processeur -mcpu=cortex-m0plus a une réelle importance ? parce que j'ai essayé en retirant cette directive et ça fonctionne également.
    -Est-ce que le niveau d'optimisation a une importance également ? (-O0, -O1, -O2...) ? est-ce que ça peut poser problème si au niveau de la compilation ce n'est pas en adéquation avec le compilateur qui va utiliser la librairie ?
    - Même question avec le niveau de debug (-g1, -g, -g3..) ?

    En tout cas encore merci pour l'aide apportée, je n'avais jamais travaillé avec des librairies de langage C, et du coup j'ai appris des choses.

  4. #24
    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 136
    Points
    10 136
    Par défaut
    Citation Envoyé par SamPirate62 Voir le message
    -Est-ce que le niveau d'optimisation a une importance également ? (-O0, -O1, -O2...) ? est-ce que ça peut poser problème si au niveau de la compilation ce n'est pas en adéquation avec le compilateur qui va utiliser la librairie ?
    L'optimisation ne change en rien les conventions d'appels , donc ça doit marcher , mais néanmoins si tu met du code asm cela peut arriver d'avoir quelque souci avec les optimisations du compilateur.
    Les optimisations ne donne aucune incompatibilité , c'est juste ce que tu aurais fait si tu codais en asm en mode full optimisation donc optimiser l’accès a la mémoire cache , déplier les boucles , éviter les calcul superflus/precalculer , utilisation des instructions SIMD ,inliner les fonctions etc etc.

  5. #25
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SamPirate62 Voir le message
    Great! C'était le -flto qui causait le problème. Merci beaucoup!
    Je suis un peu désolé car dés que tu avais posté ta table de symboles, je m'étais dit "tiens, les symboles contiennent lto, ça doit pas être bon ça..." mais je m'étais dit que tu n'avais pas du mettre cette option exotique sans raison...

    Citation Envoyé par SamPirate62 Voir le message
    Avant de clore j'en profite d'avoir quelqu'un du métier pour poser 2-3 dernières questions sur les directives de compilation.

    -Est-ce que la directive définissant le processeur -mcpu=cortex-m0plus a une réelle importance ? parce que j'ai essayé en retirant cette directive et ça fonctionne également.
    -Est-ce que le niveau d'optimisation a une importance également ? (-O0, -O1, -O2...) ? est-ce que ça peut poser problème si au niveau de la compilation ce n'est pas en adéquation avec le compilateur qui va utiliser la librairie ?
    - Même question avec le niveau de debug (-g1, -g, -g3..) ?
    Kanngi t'a déjà pas mal répondu sur ce sujet.

    Je n'ai pas trop de retour d'expérience à partager là-dedans mais je ne vois pas l'intérêt de rajouter des infos de debug (-g ou -g1/2/3) pour une bibliothèque binaire. On n'a pas les sources, il n'y aura pas grand chose à déboguer. Et même pire : si tu veux vraiment cacher ton code, ça risque de laisser des informations utiles au reverse engineering, comme les noms des fonctions. Tu peux essayer en compilant différemment ta bibliothèque et en la déassemblant avec arm-none-eabi-objdump -d malib.a > dis.txt.

    En première approche, je compilerais en -O2 (voir https://gcc.gnu.org/onlinedocs/gcc/O...e-Options.html pour des détails) sans -g (voir https://gcc.gnu.org/onlinedocs/gcc/D...g-Options.html).

    L'option -mcpu=cortex-m0plus a une importance puisqu'elle indique le CPU et donc le jeu d'instruction assembleur autorisé. Voir https://gcc.gnu.org/onlinedocs/gcc-4...M-Options.html :
    -mcpu=name
    This specifies the name of the target ARM processor. GCC uses this name to determine what kind of instructions it can emit when generating assembly code. Permissible names are: `arm2', `arm250', `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t', `strongarm', `strongarm110', `strongarm1100', `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5', `cortex-a7', `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-r5', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', `xscale', `iwmmxt', `iwmmxt2', `ep9312', `fa526', `fa626', `fa606te', `fa626te', `fmp626', `fa726te'.
    -mcpu=generic-arch is also permissible, and is equivalent to -march=arch -mtune=generic-arch. See -mtune for more information.
    Je pense que dans ton cas ça marche car tu as l'option -mthumb qui lui fait générer de l'assembleur correct. Tu as juste de la chance que ton code soit suffisamment simple (ou parce que -mthumb est suffisamment restrictive) pour que le code généré ne contienne que des mnémoniques compatibles Cortex-M0. Essaye de mettre m3 ou m4 et tu risques d'avoir un code non compatible, car avec des instructions assembleur non supportées, qui t'emmèneront directement dans un Usage Fault (ou plutôt un Hardfault sur M0, voir http://infocenter.arm.com/help/index.../Babcefea.html).

    Pour rappel, M0 possède le plus petit subset assembleur de la famille Cortex-M. Ainsi, un code pour M0 tourne sur M3 / M4 / M7 mais la réciproque n'est pas vrai. Ca dépendra des programmes. Plus de détails ici https://community.arm.com/processors...t-arm-cortex-m

    Nom : 2021.ISA.png
Affichages : 171
Taille : 558,2 Ko


    Citation Envoyé par SamPirate62 Voir le message
    En tout cas encore merci pour l'aide apportée, je n'avais jamais travaillé avec des librairies de langage C, et du coup j'ai appris des choses.
    Ca n'a pas été facile ah ah ! Content d'avoir pu aidé


    PS : pense à cliquer sur le bouton RESOLU en bas de page !

  6. #26
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Novembre 2016
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Novembre 2016
    Messages : 39
    Points : 15
    Points
    15
    Par défaut
    Merci pour toutes les infos.

    Justement je crois que j'avais ajouté le -lto et le -freeunderstand car ils étaient dans le programme Kinetis mais je ne retrouve plus...

    A une prochaine fois !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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