Bonjour à tous,
J'ai commencé à travailler dans une société qui developpé du logiciel embarqué (embedded software). On m'a demandé de faire un outil capable de retrouver des bouts de code et de le formaliser dans un seul fichier header (.h). Je fait appelle à vous pour savoir si un outil est capable de faire cela.
L'application de base s'appelle ASCET. Cela sert à faire des modèles (tels que Matlab/Simulink) pour simuler le comportement des composant de voiture. Or nous travaillons exclusivement avec Matlab donc il est obligatoire d'y faire rentrer ASCET. L'idée est de générer le code C du modèle ASCET (avec un code-generator) et de l’introduire en Simulink (en mode s-function).
Le problème : Le code C généré contient des fonctions propres à ASCET (code optimisé). Le code C ne présente pas des #include de library ou header. Résultat le code ne marche pas sur Simulink.
Un exemple: une multiplication (petite bloque qui multiplie une var. a et une var. b) dans le modèle va générer un code-c avec un appel sur une fonction propre à ASCET pour la multiplication:
Je répète : Pas de #include dans le fichier de sortie. Donc pas de header ou library associée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Mul_s16s16(a, b) ;
Je cherche (avec Notepad ++) et je trouve le mot de la fonction dans le dossier d’installation d’ASCET dans un header (system.h). Donc on trouve la fonction dans une macro (#define):
On a maintenant une nouvelle fonction, Mul_LimitSint16Sint16(uint16,uint16), qui va reparaître dans une autre macro (#define) d’un autre header. Cela continue plusieurs fois jusqu'à tomber sur la vraie opération arithmétique:
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define (sint16)Mul_LimitSint16Sint16(uint16,uint16) Mul_s16s16(uint16, uint16)
Si j'arrive à faire sortir tous ces appels dans une seul fichier header (.h) j'aurais fini ma tache. Connaissez vous un outil capable de faire cela?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 sint16 Mul_limit(uint16 oper1, uint16 oper2) { return oper1*oper2; }
Partager