Цитата(Tarbal @ Jan 17 2014, 02:06)

Поскольку параметры функции не будут оптимизироваться подобным образом, то писать volatile для параметра не обязательно.
Сам параметр (в этой дискуссии - указатель на переменную) меняться не будет, безусловно. И поэтому не "необязательно", а "не нужно совсем" - чтобы не плодить большие медленные программы. А вот та переменная, на которую указатель указывает (в этой дискуссии - регистр специального назначения, SFR), измениться может. И об этом компилятору надо сообщить. Поэтому такой параметр должен быть указателем на volatile-переменную.
Цитата(Rst7 @ Jan 17 2014, 12:09)

Например регистр, содержащий адрес пересылки DMA, и есть такой volatile-указатель.
Но в Си такой регистр нельзя передать как параметр в функцию. Можно или передать его значение на момент вызова функции, либо указатель на него. При этом такой указатель будет все время указывать на регистр адреса пересылки DMA, т.е. не изменится. В Си с плюсами регистр можно передать в функцию в виде ссылки и вот тут да, это будет чистый и честный volatile-указатель. Однако в плюсах компилятор не даст потерять volatile при объявлении ссылки, то есть предмет споров пропадает.