Цитата
(ПАВ @ Feb 9 2007, 22:46)
DataLbk.Isto = 0x00; //без volatile компилятор выбрасывает эти действия
Где именно написана эта строчка?
Строчка написана в качестве примера в main(), реально несколько другие действия. Суть - без volatile компилятор выбрасывает эти действия при оптимизации. Вообще долгое время писал на ASM и С использовал только для реализации математики, сам отслеживал что выбрасывать, а что нет. Мое мнение - компилятор не должен вмешиваться в алгоритмию (даже при оптимизации), написано где либо изменение произвольной глобальной переменной (например, tmp++

- значит так надо! Иначе можно зайти очень далеко, как у меня и получилось - писал и отлаживал без оптимизации протокол обмена. Отладился, для повышения эффективности необходимо было уменьшить время прерываний. Включил оптимизацию - все перестало работать. Выяснил часть кода выброшена! Хороша оптимизация!
Цитата
Неявное приведение типов никогда не отменяет volatile и const. Если есть желание - их нужно снимать явно.
Если можно чуть подробнее, никогда не пользовался!