vpv.vpv (19.10.2015 20:57, просмотров: 302) ответил Точка опоры на ЧЯДНТ с Си?
Я не знаю, как конкретно работает GCC, но если IAR увидит, что если в переменную что-то пишется, но в данном месте потом не используется (при уровне оптимизации, отличном от нуля), то он её выкидывает не задумываясь. Какой смысл _вот здесь_ её инициализировать, если она _вот здесь_ после никому не нужна. Только волятилить. А в П/П другая картина, при операциях с волятилями, компилятор постоянно их читает из памяти. Так что приходится добавлять локальные переменные, копировать волятили в них, работать с ними, и после сохранять. Мы-то знаем, что переменные в П/П не поменяются, а компилятор - нет. )) Если, например, хочется зарезервировать какой-то адрес в ЕЕпроме (для будущих применений), приходится тоже явно просить компилятор, чтобы он его не выкидывал.
__eeprom volatile char cBlank @ 0x00;
#pragma required = cBlank // пустой байт по адресу 0х00
Я не знаю, как это все соотносится с "духом Си", "чистотой языка Си" и пр., я с IAR'ом навоевался в своё время, и теперь придерживаюсь принципа "все неопределённости трактуются в пользу компилятора".