voici le code qui appelle ce header :
/** \file Display.c * \brief Ce fichier contient toutes les fonctions pour l'affichage * \author Simon BRIZARD * \version 1.0 * \date 25/03/04 * * L'affichage comprend les LEDS et le petit écran LCD * Au démarrage, il faut utiliser la fonction Display_Init pour * configurer l'écran LCD. * Pour tout ce qui est assignation des ports, il suffit de modifier * les #define contenus dans le fichier Display.h. */ #include ".\Sources\St72324.h" #define EXT_DISPLAY #include ".\Sources\Display.h" #include ".\Sources\Display_LCD_Carac.h"
/** \def PORT_DR_I2C * * L'adresse du registre de donnée du port supportant l'I2C */ #define PORT_DR_I2C &PADR
/** \def PORT_DDR_I2C * * L'adresse du registre de direction du port supportant l'I2C */ #define PORT_DDR_I2C &PADDR
/** \def PORT_OR_I2C * * L'adresse du registre d'option du port supportant l'I2C */ #define PORT_OR_I2C &PAOR
/** \fn ECTrame_I2C_Driver * \brief Envoi de données pour le driver * \version 1.0 * \pre Lancement de la fonction Display_Init * \param <B>ByteCount</B> : Nombres d'octets contenus dans le tableau MTAMPON * \param <B>MTAMPON</B> : Données à transferer par l'I2C * \todo Voir le passage de PxDR_I2C_PORT, PxDDR_I2C_PORT et PxOR_I2C_PORT * par #define plutot que par variable * * Cette fonction envoie les données passées en paramètre par l'I2C. * L'adresse et la sous adresse du driver sont envoyées directement * (il n'y a pas besoin de les passer dans le tableau MTAMPON). * * <B>Historique : </B> * - 25/03/04 : Ajout de tout le code assembleur écrit par Eloi * Adresse et sous-adresse du driver définit par #define * - 23/03/04 : Création de la fonction (en assembleur et en C) car la fonction en assembleur ne fonctionnait pas * - 22/03/04 : Création de la fonction (tout en assembleur) */ void ECTrame_I2C_Driver(byte ByteCount, byte* MTAMPON) { byte Txbuf; byte I2C_Registre; byte Datai; byte BitCount; PxDR_I2C_PORT = PORT_DR_I2C; PxDDR_I2C_PORT = PORT_DDR_I2C; PxOR_I2C_PORT = PORT_OR_I2C; SPICSR = 0x1; PFOR = 0x2; }
|
Il n'est pas complet mais ca suffit pour comprendre mon problème.
Il faut d'abord savoir que la zone mémoire DEF_PERIPH se trouve de l'adresse 0x0 à 0x80. Donc, si le code fonctionnerait, il devrait etre écrit 0x1 à l'adresse 0x23 et 0x2 à l'adresse 0x11.
Mais le compilateur supprime toutes les variables définies entre PAOR et PFOR et toutes les variables entre PFOR et SPICSR car elles ne sont pas utilisées.
Au final, à l'exécution du code, il y a 0x2 à l'adresse 0x3 et 0x1 à l'adresse 0x4.
Est ce que qqun aurait une idée pour que toutes ces variables soient définies meme si elles ne sont pas utilisées ?
Sur un conseil, j'ai essayé de mettre volatile devant chaque variable mais ca ne marche pas...
