Armcc optimise-t-il les variables non volatiles avec -O0?

int* Register = 0x00FF0000; // Address of micro-seconds timer while(*Register != 0); 

Dois-je déclarer *Register tant que volatile lors de l’utilisation du compilateur armcc et de l’optimisation -O0?

En d’autres termes: l’optimisation -O0 nécessite-t-elle de qualifier ce type de variables de volatile ? (ce qui est probablement nécessaire dans l’optimisation -O2)

Il me semble que vous devriez déclarer Register comme étant volatile , car il est volatile. Il n’y a aucun mal à le marquer volatile , étant donné que vous dépendez du compilateur pour ne pas optimiser les access via le pointeur.

 int volatile* Register = (int*) 0x00FF0000; 

Vous ne devriez pas dépendre des parameters d’optimisation du compilateur pour espérer que cela sera compilé correctement. J’imagine que le fait d’oublier de marquer correctement volatile éléments volatile est l’une des principales raisons pour lesquelles l’optimisation du code C embarqué entraîne souvent une rupture des choses.