Forums - Tous les messages
Forums - Tous les messages
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 
   Tous les messages

 Bas   Précédent   Suivant

(1) 2 3 4 ... 1529 »


Re: Compilateur Loop est optimisation
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1918
Hors Ligne
Mais comme on est bons !!

Posté le : 10/12 18:19
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Compilateur Loop est optimisation
Accro
Inscrit:
06/07/2007 09:17
Messages: 694
Hors Ligne
Bon re et fin de sujet XD

J'ai trouvé mon problème.

Comme je fais de l'attente active sur un périphérique, j'utilise un compteur timeout.
Dans mon cas il était mal configuré, donc je quitter mon exécution avec que le périphérique lève son flag...

En Bon Mauvais codeur, je me suis fait avoir sur la description du bit "Transfert complet".
Il faut vraiment être vigilent par rapport au comportement HW et les optimisation compilo.
Rappel: sans optimisation, l’exécution se faisait sans problème...

while(SPI0SR_SPTEF == 0U){ /* !Add timeout! */};
/** write a byte */
SPI0DRL data;
/** wait for completed byte reception */
while((SPI0SR_SPIF == 0U) && (u16Timeout 0U))
{
    
/** Decrement timeout counter */
    
u16Timeout--;
}



Posté le : 10/12 17:04
Transférer la contribution vers d'autres applications Transférer


Re: Compilateur Loop est optimisation
Accro
Inscrit:
06/07/2007 09:17
Messages: 694
Hors Ligne
première réponse à moi-même

en mode optimisé, l'execution est 5 à 6 fois plus rapide.
Dans le code présenté, je ne regardais pas le flag de buffer empty avant d'écrire...
...
while(
SPI0SR_SPTEF == 0U){};
/** write a byte */
SPI0DRL data;
...


bon en ajoutant le check avant d'écrire, il me manque toujours un byte sur le bus...
je devrais avoir [12][0]; [12][1]; [12][2]; [12][3];
et jai           [12]   ; [12][1]; [12][2]; [12][3];


Posté le : 10/12 16:29
Transférer la contribution vers d'autres applications Transférer


Compilateur Loop est optimisation
Accro
Inscrit:
06/07/2007 09:17
Messages: 694
Hors Ligne
Salut à tous

J'ai des problèmes d’exécution quand j'active les optimisation compilo (O3).
L'ordre d'envoi des data sur le SPI est perturbé...

Dans main.c
// variable globale
U1 u1ReturnState U1_FALSE;
U8 TxTab[2] = {0};
U8 RxTab[2] = {0};
...
//dans le main
for (Cptr1 0Cptr1<4Cptr1++)
  {
      
TxTab[1]=Cptr2;
      
u1ReturnState u1MAL_SPI_SyncExchange(TxTab,RxTab,2U);
      
Cptr2++;
  }
...


Dans Spi.c
U1 u1MAL_SPI_SyncExchange(
        
U8 au8TxData[],    /**<        array of data to send        */
        
U8 au8RxData[],            /**<[out]    array of data to received    */
        
U8 u8DataSize)    /**<        number of byte to proceed    */
{
    
/** Variable used to hold return status */
    
U1 u1ReturnStatus;
    
/** Variable used as buffer index */
    
U8 u8Index 0U;
    
/** Variable used as timeout for spi byte exchange */
    
U16 u16Timeout;
    
    
/** Reject command if Data size is null or above buffer size limit */
    
if ((u8DataSize == 0x00U) || (u8DataSize U8_MAL_SPI_MAX_BUFFER_SIZE))
    {
        
/** Set return status */
        
u1ReturnStatus U1_TRUE;
    }
    
/** Reject command if Rx or Tx buffer address are NULL */
    
else if ((au8TxData == NULL) || (au8RxData == NULL))
    {
        
/** Set return status */
        
u1ReturnStatus U1_TRUE;
    }
    
/** Reject command if there is any running exchange */
    
else if (u1SPIIsExchangeInProgress == U1_FALSE)
    {
        
/** Lock Spi Exchange process */
        
u1SPIIsExchangeInProgress U1_TRUE;
        
        
/** handle buffer transmission */
        //for (u8Index = 0U; u8Index < u8DataSize; u8Index++)
        
u8Index 0U;
        
        while (
u8Index u8DataSize)
        {
            
/** Reset timeout */
            
u16Timeout U16_MAL_SPI_TIMEOUT_VALUE_TICKS;
            
/** write a byte */
            
SPI0DRL au8TxData[u8Index];
            
/** wait for completed byte reception */
            
while((SPI0SR_SPIF == 0U) && (u16Timeout 0U))
            {
                
/** Decrement timeout counter */
                
u16Timeout--;
            }
            
            if (
u16Timeout == 0U)
            {
                
/** Set return status */
                
u1ReturnStatus U1_TRUE;
                
au8RxData[u8Index] = 0x00U;
                
/** leave for loop */
                
break;
            }
            else
            {
                
/** read a byte */
                
au8RxData[u8Index] = SPI0DRL;
            }
            
u8Index++;
        }
        
/** Unlock Spi Exchange process */
        
u1SPIIsExchangeInProgress U1_FALSE;
    }
    else
    {
        
/** Set return status */
        
u1ReturnStatus U1_TRUE;
    }
    return (
u1ReturnStatus);
}


Si vous regardez bien, j'ai testé les 2 type de boucles (for ou while).

En O0 et O1, l'envoie est dans le bon ordre: TxTab[0]TxTab[1], puis TxTab[0]TxTab[1]...
Mais en O2 et O3, l'envoie est dans le désordre: TxTab[0]TxTab[0], puis TxTab[1]TxTab[1]...

hors cpu dépendant, je peux comprendre mais là...

Avez vous une idée?
(ca doit être liée à une parallélisation mais j'avoue ne pas savoir... je cherche)

Posté le : 10/12 15:15
Transférer la contribution vers d'autres applications Transférer


Re: Pourquoi ? pour Où ?
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1918
Hors Ligne
Salut david !

Ça faisait fort longtemps que l'on ne t'avait pas lu il me semble !

C'est pas la techno qui avance vite, ce sont nos vies pleines de projets et de changements
Pour ma part je fait un peu joujou avec Arduino pour de la domotique sur des trucs qui me passionnent pas plus que ça et je suis toujours sur les Kinetis de ex Freescale devenu NXP mais je vais bientôt avoir un nouveau projet à lancer et je me demande si je ne vais pas en profiter pour tester les STM32 juste pour voir à quel point c'est dur de changer.

Ce que j'observe c'est que l’écosystème des µC s'est beaucoup "informatisé", de moins en moins de gens doivent jouer du registre bas niveau comme on aimait tant le faire avec nos 8 bits, la plupart programment comme sur pc à grand coup de librairies, finalement comme du Arduino avec des outils beaucoup plus performants.

Pour l'avenir du site j'en ai parlé avec petitours qui pense comme moi : il n'en a pas (d'avenir) mais de temps en temps il aide ou passe une info alors tant que ça marche... il y a un domaine en .fr à payer tous les ans pour le reste c'est hébergé avec autre chose. Là où ça posera problème c'est le jour où le système actuel, très vieillissant deviendra obsolète et qu'il faudra migrer le site sur des systèmes récents.

Posté le : 27/10/2018 16:13
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Pourquoi ? pour Où ?
Pilier de la communauté
Inscrit:
27/09/2005 14:27
De Toulouse
Messages: 898
Hors Ligne
Salut a tous

je reviens de temps en temps voir ce qu'il se passe même si par changement de rythme de vie a la maison, j'ai un peu laissé tombé le S08.
Je me suis aperçu qu'il n'existe plus depuis quelques mois pour dire...
de mon coté, par fainéantise et manque de temps, je suis passé sur les arduino chinois qui font presque tout avec des outils assez simple mais si l'on est loin du C ou assembleur. et tout cela a un prix dérisoire ....
quand je vois les nouveaux cpu avec les changements qu'il y a, je n'ai pas trop envie de m'investir personnellement.
Je comprends tout à fait ton point de vue Charly .... la technologie avance plus vite que nous

Posté le : 27/10/2018 15:42
Ce n'est pas parce que les choses sont difficiles qu'il ne faut pas oser, c'est parce que l'on n'ose pas que les choses sont difficiles.
Transférer la contribution vers d'autres applications Transférer


Re: Delta Sigma ADC
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1918
Hors Ligne
si ton adc accepte électriquement des tensions de 0 à 5v aucune de ses entrées ne pourra être au delà. par contre tu en as qui accepteront d'avoir la ref par exemple ente 0 et 2v alors que la mesure est entre 2 et 3v, par exemple.

Posté le : 24/10/2018 22:32
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Delta Sigma ADC
Accro
Inscrit:
06/07/2007 09:17
Messages: 694
Hors Ligne
J'avoue que cela me choque un peu :)
J'ai toujours en tête les problèmes lié au dépassement des tensions de saturation des aop ^^

Posté le : 24/10/2018 22:29
Transférer la contribution vers d'autres applications Transférer


Re: Delta Sigma ADC
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1918
Hors Ligne
Salut

Si les plages de tension que tu indiques sont ok pour l'adc alors oui ça fonctionne (la tension mesurée est décalée en tension par rapport à la référence) mais je ne pense pas que ce soit le cas sur tous les adc delta sigma. La techno le permet mais je ne pense pas que ce soit un caractéristique de tous les adc delta sigma.

Posté le : 24/10/2018 21:20
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Delta Sigma ADC
Accro
Inscrit:
06/07/2007 09:17
Messages: 694
Hors Ligne
Merci pour ce retour :)
malheureusement, je n'ai pas le choix des techno :(
Nous allons avoir un NTC 100k +-5 @ 25°C (B=3955+-3)

J'ai une question techno sur les delta sigma.
J'ai bien comprit les 2 entrées SI pour une mesure différentiel.
J'ai bien comprit les 2 entrées VR pour la tension de référence.
+-DeltaSI doit être comprit dans le DeltaVR.
Mais que ce passe-t-il dans le cas suivant:
VR+ = 5V ; VR- =0V => DeltaVR = 5V
SI+ = 9V ; SI- =7V => DelaSI = 2V... le delta est bon mais les entrées sont out pour moi..

Merci d'avance pour cet éclaircissement :)

Posté le : 24/10/2018 20:49
Transférer la contribution vers d'autres applications Transférer



 Haut
(1) 2 3 4 ... 1529 »




Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Forums - Tous les messages