Bonjour à tous
J'ai un petit problème avec le passage par adresse dans une fonction écrite en langage C (pour microcontrôleur PIC 8 bits (Ça reste du C, sauf que les short sont sur 8 bits)).
Je désire (à ma fonction) lui passer différent types: entier signés 16 bits, entier signés 8 bits pour qu'elle modifie la valeur.
Voici un exemple tout bête :
A la compil j'ai un "suspicious pointer conversion" pour Ma_fonction(&b);Code:void Ma_fonction(int* _x) // Ajoute 10 à la valeur passée en argument { *_x = *_x + 10 ; } void main(void) { int a = 20; // Entier codé sur 16 bits short b = 30; // Entier codé sur 8 bits Ma_fonction(&a); Ma_fonction(&b); Afficher a; Afficher b; }
...Qui peut être supprimé en remplaçant la ligne par: Ma_fonction((int*)&b);
Mais j'ai un comportement erratique: la fonction marche bien pour les appels de Ma_fonction(&a);
mais pas pour les appels de Ma_fonction(&b); Ça marchouille genre symptômes écrasements mémoire
Pourquoi ? Car pour moi, la taille des pointeurs est la même, quel que soit leur type (char*, int*...) car une adresse reste une adresse
Et comment résoudre ce problème, sans créer une seconde fonction pour traiter les shorts... et sans modifier toutes mes déclarations de variables short en int... (mémoire ROM et EEPROM limitée pour stocker plus de 50 paramètres)
Merci pour vos lumières !!
Matthieu
-----