IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

FreeRTOS et xHandleTask


Sujet :

Embarqué

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut FreeRTOS et xHandleTask
    Bonjour,

    FreeRTOS possède une gestion des tâches grâce à des handles définis ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void * xTaskHandle;
    Certaines fonctions renvoient des xTaskHandle, comme xTaskGetCurrentTaskHandle().

    Faut-il faire un free() sur ces pointeurs car ils correspondent à des zones allouées spécialement pour le retour de la fonction ou est-ce l'adresse de données gérées par l'OS à ne surtout pas modifier ?

    Merci d'avance !

  2. #2
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 431
    Points
    1 431
    Par défaut
    Salut,

    Aucune idée...
    Et je pense que tu n'as pas trouvé de doc à propos.
    Si j'étais toi je ferais un mallinfo avant et après xTaskGetCurrentTaskHandle()
    pourvoir ce qui ce passe au niveau de l'allocation mémoire.

    A première vue je pense que la mémoire associée à la tache est allouée une seule fois quand tu fais "taskCreate/pthreadcreate/ ou équivalent".

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    A première vue je pense que la mémoire associée à la tache est allouée une seule fois quand tu fais "taskCreate/pthreadcreate/ ou équivalent".
    J'ai parcouru le code source pour avoir une réponse à ce sujet et j'ai trouvé un comportement qui semble correspondre à ça.

    Voici l'implémentation de la fonction en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	xTaskHandle xTaskGetCurrentTaskHandle( void )
    	{
    	xTaskHandle xReturn;
    
    		/* A critical section is not required as this is not called from
    		an interrupt and the current TCB will always be the same for any
    		individual execution thread. */
    		xReturn = pxCurrentTCB;
    
    		return xReturn;
    	}
    Il est donc évident qu'elle ne fait pas d'allocation juste pour nous.

    Dans le même fichier task.c, à la ligne 148 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PRIVILEGED_DATA tskTCB * volatile pxCurrentTCB = NULL;
    A la ligne 214 de l'en-tête task.h, on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
    On repart donc dans le fichier d'implémentation, ligne 486 pour voir comment cette fonction fonctionne. On regarde rapidement l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xNewTCB = prvAllocateTCBAndStack( usStackDepth, puxStackBuffer );
    On arrive au final à la ligne 2396 et on trouve la fonction prvAllocateTCBAndStack(), qui fait des allocations, notamment avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pxNewTCB = ( tskTCB * ) pvPortMalloc( sizeof( tskTCB ) );
    La fonction pvPortMalloc() est définie dans les fichiers du dossier MemMang. Je pense que son nom est clair ^^

    En conclusion, je dirais qu'il n'y a pas besoin de faire un free() et même qu'il ne faudrait mieux pas essayer d'en faire un ^^

    PS : qu'elle est le nom exact de la fonction pour mallinfo stp ? Est-ce que cela serait xPortGetFreeHeapSize() ?

  4. #4
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 431
    Points
    1 431
    Par défaut
    Je parle de mallinfo() de la libC disponible avec malloc.h

    http://man7.org/linux/man-pages/man3/mallinfo.3.html

    Ca renvoie une structure qui représente l’état de l'allocateur mémoire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. FreeRtos avec pic18f4550
    Par EspritTelecom dans le forum Embarqué
    Réponses: 3
    Dernier message: 08/11/2013, 00h53
  2. un simulateur pour FreeRTOS
    Par ifdo7a dans le forum Embarqué
    Réponses: 0
    Dernier message: 12/03/2013, 14h27
  3. problème de simulation de FreeRTOS sous Windows
    Par ifdo7a dans le forum Embarqué
    Réponses: 2
    Dernier message: 09/03/2013, 10h44
  4. [FreeRTOS] Pile IP
    Par boboss123 dans le forum Embarqué
    Réponses: 8
    Dernier message: 06/12/2012, 15h35
  5. Recherche projets basés sur PIC32 et / ou FreeRTOS
    Par magicdim dans le forum Embarqué
    Réponses: 3
    Dernier message: 27/11/2012, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo