Optimisation de code [Forums - HC12 et S12]
Optimisation de code [Forums - HC12 et S12]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes





Optimisation de code
Nouveau
Inscrit:
30/07/2013 11:34
Messages: 8
Hors Ligne
Bonjour,

Je suis tombé sur une étrangeté lors du debug de mon code.

Ayant paramétré mon compilateur pour avoir le moins d'optimisation possible je me suis retrouvé en lancant le débugger avec des appels à des fonctions qui me sont inconnues.

_BSHRU par exemple.

Elle semble provenir d'un des librairies intégrées à CW.

J'ai étudié le .lst de la source en question et il semblerait que cela provienne d'un optimisation faites lors de la compilation.

En C j'ai un octet constitué de plusieurs bits décallés de 1 à 7 fois vers la gauche.

Par exemple:

unsigned char temp;
temp =
a |
b << 1 |
c << 2 |
d << 3 |
e << 4 |
f << 5 |
g << 6 |
h << 7;

(a,b,c,d,e,f,g,h vallant 0 ou 1 et correspondant à certaines broches du micro)

En langage assembleur "traduit", lorsque moins de 6 décalages binaires sont nécessaires, ils sont faits "à la main".
Etrangement à partir de 6 décallages, j'ai des jsr _BSHRU qui apparaissent.

J'aimerai savoir comment empêcher ces optimisations si c'est possible.




Posté le : 27/08/2013 15:05
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1924
Hors Ligne
Salut

faute de pouvoir aider sur ce point pointu, je suis intrigué :

Quel est l’intérêt d’empêcher les optimisations du compilateur ?
Il me semblait que soit on veut exécuter quelquechose de très précis et on met de l'asm, soit on trouve plutôt bienvenues les optimisations du compilateur pour un gain de performance appréciable (en taille ou en rapidité)

Merci de m'aider à me coucher moins idiot



Posté le : 27/08/2013 20:38
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Pilier de la communauté
Inscrit:
09/10/2006 11:47
De Cambridge, Angleterre & Glasgow, Ecosse
Messages: 858
Hors Ligne
Bonsoir,
JSR est Jump to Sub Routine.
N'est-il pas possible que le compilateur ait vu que les memes instructions etaient executées et, au lieu de les garder les memes instructions au kilometre, il en ait fait un sous programme?

Posté le : 27/08/2013 21:45
Alban Rampon / 冉昂理 - blog
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1162
Hors Ligne
Salut

il y a moyen de dire au compilateur de ne pas optimiser les JSR à du code redondant. Car en effet il vient créer une subroutine qu'il appelle plusieurs fois.
Il peut y avoir un intérêt de désactiver les optimisations du compilateur, par exemple pour faciliter le debug, ou en cas d'optimisation sauvage qui restent courantes avec CW. C'est à dire des optimisations qui à la fin rendent le code non fonctionnel... Ca arrive.

Stéphane

Posté le : 27/08/2013 22:35
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Nouveau
Inscrit:
30/07/2013 11:34
Messages: 8
Hors Ligne
Le code source produit doit respecter certaines contraintes/normes/standards pour mon projet.

Le fait que certaines instructions à priori transparentes en C font appel à des librairies non prévues lors de ces optimisations pose un problème de testabilité pour moi.

J'ai une liste de n modules déclarés avec chacun une batterie de tests de conformité prévus, cependant je me rends compte qu'il y a n+1 modules au final. D'autant plus que le +1 en question est une librairie de fonctions assez conséquente dont la plupart n'ont aucun intéret pour le projet en question.

Je me suis aussi rendu compte que les opérations de manipulations sur des variables 32 bits engendrent aussi ce genre de conséquences.

Posté le : 28/08/2013 09:03
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1162
Hors Ligne
Salut,

Quelles sont tes contraintes normatives pour le code ?
Aujourd'hui cela serait un non sens d'utiliser un compilateur C sans ses librairies. Autant programmer en assembleur autrement.

Cependant, si par exemple tu es assujetti à ISO15288 ou équivalent, cela n'interdit pas d'utiliser du code que tu n'as pas produit et concernant la testabilité, tu peux tester tes fonctions C. Le code des librairies sera testé à l'intérieur de tes tests.

Dans certains cas, par exemple comme les niveaux SIL 4 de la norme ISO 15288 que l'on retrouve en automobile sur les dispositifs de sécurité et en aéronautique (si je ne me trompe pas sur les numéros), alors la norme t'impose même que ce soit un outil qui génère le code à ta place ! Toi tu ne peux quasiment plus écrire du code.... (berk!)
Dans ces cas là, il faut donc utiliser des outils de génération de code (compilateurs entre autre) qui soit certifiés selon ces normes (par exemple Rational Rose, etc...). Je crains que CodeWarrior qui utilise GCC ne soit pas certifié pour ces niveaux de sécurité mais c'est à vérifier.

Si tes contraintes normatives t'imposent simplement une couverture totale de test du code alors tu peux :

- le faire à la main et ne pas tester l'intérieur des fonctions en librairies (supposées correctes). Autrement dit, en général, on teste le contenu de sa fonction et pas des fonctions en librairies (qui peuvent cependant comporter des bugs). S'il y a bug dans la librairie, tu le verras dans ta fonction puisque la fonction en lib y sera incluse. Cette méthode, qui je pense est la plus largement employée permet couvrir tous les cas de figure autres que ceux qui sont assujettis à des normes spécifique de sécurité logicielle.

- utiliser des outils de couverture de code third party : il y a deux types au moins à la connaissance, les outils d'analyse statique comme Lint et les outils de couverture dynamique comme Polyspace. Ces derniers sont fabuleux, j'ai eu l'opportunité de les utiliser. A noter que l'on peut avantageusement utiliser ces outils, même si on n'a pas de contrainte normative. On trouve des faiblesses et des bugs en quantité ! surtout avec polyspace...

A noter que si ton dispositif doit répondre à des normes de sécurité, alors il n'y a pas que le test du code à produire, mais également une documentation exemplaire, une gestion de révision du code avec synchro de la documentation, une AMDEC sur le code (et le matériel bien sûr), les plans de test, etc etc etc. ce qui impose déjà de suivre un processus de développement.
Voir cet article ici : http://www.68hc08.net/uploads/publish ... eveloppement_logiciel.pdf

C'est la raison pour laquelle dans ces applications, on utilise généralement des suites logicielle où l'on décrit le comportement avec des langage type UML ou machine d'état, l'outil traduit ça en spécification, puis génère le code, les plans de test, la documentation, la gestion des révisions, l'archivage, etc etc etc.... c'est affreusement lourd ! Je ne pense pas que tu en sois là...

C'est toujours une problématique les librairies. Dans certaines applications de sécurité, médicales, aéronautique, militaire, etc, il est généralement choisi des compilateurs/processeurs qui sont déjà qualifié pour le domaine.

Cordialement
Stéphane


Posté le : 28/08/2013 20:31
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Nouveau
Inscrit:
30/07/2013 11:34
Messages: 8
Hors Ligne
Je développe selon la DO-178B et mon C doit être conforme aux règles de la MISRA.

Lors de la création d'un projet sous ma version de CW, j'ai le choix entre C/C++/Assembleur. Chaque possibilité incluant une librairie propre ajoutée automatiquement aux fichiers du projet. J'ai pu tracer chaque optimisation "non voulue" en supprimant cette fameuse librairie (ce qui a généré des messages d'erreur à la compilation pour chaque optimisation) puis en adaptant mon code source.

Posté le : 29/08/2013 15:13
Transférer la contribution vers d'autres applications Transférer


Re: Optimisation de code
Pilier de la communauté
Inscrit:
13/10/2005 10:06
De haute-savoie (74)
Messages: 1162
Hors Ligne
Tu peux tout à fait écrire du code compatible MISRA avec codewarrior tout en utilisant les librairies de codewarrior.

Si tu dois être conforme à la DO-178B alors tu devras utiliser un outils de test du code pour MISRA. Il en existe plein.
Ces outils viennent lire le code C uniquement l'assembleur n'est pas couvert. Ca m'a toujours fait rire ça car tu peux écrire du C super propre compatible MISRA et faire toute les bêtises que tu veux dans des routines en ASM !!!

MISRA ne t'impose pas de désactiver les librairies de ton compilateur, heureusement. Si celles-ci sont inclues en C alors elles seront testées par les outils de test MISRA au même titre que du code applicatif, et si elles sont inclues en ASM, alors elle ne sont pas couvertes par MISRA !
magic non ?

un document qui devrait t'intéresser : http://cache.freescale.com/files/soft ... Compliance_Exceptions.pdf

La DO178b est une norme relative au logiciel embarqué en aéronautique... Donc t'es pas sorti de l'auberge car les processus de développement et de test du code sont incontournables.
En particulier, non seulement tu devras coder en respectant MISRA ce qui n'est pas tragique, mais tu devras je pense assurer que la documentation est parfaitement à jour et complète, que toutes les étapes du processus de développement (en V) sont couvertes et à jour, les plans de test établis, fiches de recette, gestion de révision et d'archivage, etc etc ... bref tout ce que je te décrivais auparavant. Aussi tu ne couperas pas à l'AMDEC sur ton logiciel (et bien sûr sur le matériel)

Pour en revenir à Codewarrior, tu peux tout à fait l'utiliser et utiliser les lib standard de codewarrior. Par contre il faut que tu ais d'autres logiciels dans ta chaine de développement pour le test du code : au minimum PC-lint et un outil spécifique de couverture MISRA. Un outil comme polyspace est un plus indéniable (pour rappel c'est le logiciel qui a été conçu après le crash de la première ariane 5). Il te faudra aussi utiliser un outil de génération de documentation comme doxygen afin de garantir que ta doc sera toujours synchronisées à ton code.
Il te faudra utiliser également un outils de gestion de révision / archivage de type RVS, RCVS, etc...

Si tu es dans une grosse boite qui a déjà fait des développement pour l'aéro alors va voir ton responsable qualité. Si c'est une nouvelle application et que ta boite n'a jamais mis les pieds la dedans alors préparez vous à beaucoup de paperasse pour mettre en place les processus et les faire certifier....

Stéphane




Posté le : 29/08/2013 17:37
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Optimisation de code [Forums - HC12 et S12]