Bonjour à tous
J'ai un problème avec une S-fonction qui a en entrée un bus.
ENVIRONNEMENT
Je travaille sur MATLAB/Simulink (R2008b soit la 7.7) sous environement Linux, Red Hat version 5.
Mes S-fonctions sont développées en C (C-MEX files).
Remarque : Je sais que la R2009a a une Sfonction Builder permettant d'avoir directement en entrée (et aussi en sortie) des bus, mais moi je travaille sur la R2008b et je ne peux pas changer de version. J'ai essayé sous WindowsXP et... ça marche, le problème ne se présente que sous Linux. mais la même remarque je suis obligé de travailler sous Linux.
Sur la R2008b les Sfonction builder ne peuvent avoir de bus en entrée, donc je passe par un Sfonction.
DESCRIPTION DU MODELE
Mon modèle se compose d'une Sfonction, de constantes (scalaires, vecteurs et matrices) et de 2 bus creator.
http://uploads.imagup.com/10/1245337476_modele.JPG
sMyBus ( l’ entrée In1 de la S Function LM_UDP_Gen) est “reproduit” dans une structure « Bus » en C, accessible par la S Function LM_UDP_Gen.
Le but de la S_Function est de copier l’entrée In1 dans une variable de type Bus et de vérifier que celle ci a bien pris les valeurs d’entrée ( scal, vect, etc...).
MON PROBLEME
Problème1
Lorsque je fais une simulation du modèle, j’observe que les variables avant scal_st s’affichent correctement, et que celles d’après , non.
Pour comprendre la provenance du problème j’effectue la copie de * sMyBus (via un memcpy) dans la variable « tableau » de type char *.
J’affiche chaque octet de la variable « tableau ». J’observe qu’entre le dernier champs de matrix et le premier de scal_st, se sont immiscés 4 octets de valeur 0x00.
J’ai d’abord pensé que cela était dû au phénomène de « bourrage », MATLAB procédant à un alignement forcé de la mémoire en la bourrant ( la mémoire ) pour obtenir des champs de taille multiple de 64 bits.
Cependant, ceci ne semble pas expliquer le problème rencontré :
Problème2
En effet lorsque je positionne matrix en premier élément de mon bus (matrix précédant scal), je n’observe plus exactement le même phénomène :
Dans la variable « tableau » après le dernier champs de matrix j’observe, comme prévu, le champs correspondant à scal, mais après scal se sont immiscés 4 octets de valeur 0x00.
Problème3
Lorsque la variable matrix est définie en [4x4] d’uint32, c’est à dire 16 éléments de 4 octets chacun, on observe quand même un « bourrage » alors que ce dernier ne devrait pas avoir lieu (car la taille obtenu est un multiple de 64 bits).
Si l’un d’entre vous connaît l’origine de ce problème, n’hésitez pas à apporter votre contribution car j’ai vraiment besoin d’aide.
Merci d'avance
Partager