[an error occurred while processing this directive]
|
все операторы, инвариантные циклу. Т.е. он выполняет такие операторы перед входом в цикл. При этом возможна такая ситуация, когда содержимое переменной, которая должна меняться по прерываниям, просто в копируется в какой-либо регистр. Далее, в цикле, анализируется состояние этого регистра, которое в цикле уже не будет меняться и программа просто "зависнет".
Квалификатор volatile говорит компилятору о том, что данная переменная может быть изменена инынм, неизвестным компилятору, путем (например, по прерываниям). В этом случае компилятор уже будет проверять в цикле содержимое данной переменной, которое уже не будет инвариантным по отношению к циклу.
E-mail: info@telesys.ru