Brunni > tu parles de mon post ? Pourquoi tu peux pas cliquer ?
—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboVerdict (Adopté/Rejeté) ADOPTE
marrant le hardware encodeur de télémétrie, ca doit être un bonheur de faire le driver.
C'était quoi ça ? un extrait d'amicalement vôtre ?
Tiens, je me serais attendu à ce que tu utilises illegal pour ça ^^
—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboOk, merci du tip, mais j'aimerais bien comprendre.
J'éspère que ça va marcher, j'aimerais bien éviter de mettre le nez dans l'assembleur généré pour vérifier, sinon je vais encore abandonner le projet...
C'est une lib pour faire des guili-guili ?
—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboinformParentAboutReallocation
Pourquoi ? De quel droit se permet-il de dégager une écriture en RAM ? C'est clairement un bug. Bonsoir quand tu fais du baremetal et que t'écris ici ou là au boot...
Non c'est pas un bug, par contre c'est un piège vicieux et courant.
Tu es censé utiliser volatile si tu veux que les accès mémoire soient effectués de manière stricte, par exemple pour les registres hardware, les variables accédées à la fois par ton programme principal et une interruption, ou partagées entre plusieurs threads, etc. Dans le cas contraire, le compilateur a le droit de supprimer les accès mémoire qui n'ont pas d'effets de bord visibles. Tout le subtilité est dans le "visible", parce que ce n'est pas forcément évident pour le compilo. Théoriquement c'est gênant, en pratique c'est le prix à payer pour pouvoir faire des optimisations même basiques (sinon, même un simple index de boucle for ne pourrait pas être mis en cache dans un registre).
—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboJe comprends pas. J'utilise pas une variable, mais une adresse directement.
- si je l'utilisais en lecture, je comprendrais le volatile, pour forcer la lecture à chaque boucle de for par exemple. En effet, ça pourrait être modifié par une interruption
- mais si je l'utilise en écriture comme ici, pourquoi devoir mettre un volatile ? Sinon, dans quel cas un volatile pourrait être inutile dans ce cas-là ??
La variable d'une boucle for c'est autre chose, ok je l'écris, mais je la lis aussi, pour connaitre la valeur de mon compteur. C'est donc important de savoir si elle n'est pas accédée par une autre variable, afin de pouvoir la mettre en cache dans un registre comme tu dis (ce qui serait impossible si la vériable était accédée de l'extérieur, en effet).
Que le volatile soit explicite dans un tel cas parait normal.
Mais peux-tu me donner un exemple ou une écriture en RAM pourrait foirer si elle n'était pas déclarée volatile ?