prévenir la concurrence malheureuse en multithread
Je n'ai pas cette problématique : c'est du développement sur microcontroleur AVR donc pas de multithread.
prévenir une optimisation malheureuse d'accès à la mémoire vive.
C'est surtout cet aspect qui m'intéresse aujourd'hui.
volatile ne permet d'éviter que les optimisations malheureuses d'accès à la mémoire vive.
Ca tombe bien, c'est ce que je cherche à faire ;)
Par contre, cela ne concerne que la variable en question...
C'est ce qui m'a semblé également, mais j'avais un doute d'ou mes questions.
dans le traitement de ce buffer, il y a typiquement un pointeur propre de parcourt initialisé avec le buff de ta structure
dans le traitement de ce buffer, il y a typiquement un pointeur propre de parcourt initialisé avec le buff de ta structure
Dans le parcours, j'accède de façon indirecte via *(buff + head) ou *(buff + tail).
et si volatile, toujours par une lecture de la mémoire vive, même si pour l'optimisateur un registre contient toujours la valeur)
Est-ce à dire que même si buff e ne bouge jamais (initialisé tout au début du code), j'ai intérêt à le déclarer volatile quand même ?
mais ensuite, que se passera-t-il ?
C'est ce que j'aimerais savoir ...
Comme son nom l'indique, une interruption est susceptible d'interrompre le fil d'exécution où qu'il en soit
(il y a peut-être possibilité de protéger un petit groupe d'instructions, à la manière "atomique", mais je suis pas sûr...).
Dans ce cas précis, une interruption ne peut pas être interrompue. Mais malhereusement, il n'y a pas possibilité de générer une interruption logicielle (sauf à passer par un petit hack que je souhaite éviter), sinon, je pourrais passer par une interruption pour protéger le code en question. Mais je vois l'idée.
En tout cas, merci d'avoir pris un peu de temps pour répondre
[^] # Re: multithread et optimisation
Posté par totof2000 . En réponse au message Volatile, struct et interruptions.. Évalué à 2. Dernière modification le 14 janvier 2016 à 13:57.
Je n'ai pas cette problématique : c'est du développement sur microcontroleur AVR donc pas de multithread.
C'est surtout cet aspect qui m'intéresse aujourd'hui.
Ca tombe bien, c'est ce que je cherche à faire ;)
C'est ce qui m'a semblé également, mais j'avais un doute d'ou mes questions.
Dans le parcours, j'accède de façon indirecte via *(buff + head) ou *(buff + tail).
Est-ce à dire que même si buff e ne bouge jamais (initialisé tout au début du code), j'ai intérêt à le déclarer volatile quand même ?
C'est ce que j'aimerais savoir ...
Dans ce cas précis, une interruption ne peut pas être interrompue. Mais malhereusement, il n'y a pas possibilité de générer une interruption logicielle (sauf à passer par un petit hack que je souhaite éviter), sinon, je pourrais passer par une interruption pour protéger le code en question. Mais je vois l'idée.
En tout cas, merci d'avoir pris un peu de temps pour répondre