Опять всё по кругу...
Цитата(vlad_new @ Jan 17 2012, 01:35)

К стате почему эту строчку оптемизатор отбрасывает - понятно. Поскольку Buf_RS485[0] нигде далее не используется, она, типа, и не нужна!
Абсолютно верно.
Цитата(vlad_new @ Jan 17 2012, 01:35)

А то что это нужно прерыванию компелятор в упор не видит. А зря.
Компилятор вообще много чего не видит и не должен видеть. Вы как будто пытаетесь ему приписать роль этакого телепата-волшебника, угадывающего намерения программиста. А программист на что?
Цитата(vlad_new @ Jan 17 2012, 01:35)

Вот и приходится либо где нибудь влепить холостую дурь типа k=Buf_RS485[0];
либо терять скорость на куче volatile.
Лепить холостую дурь не надо.
А вот одно из применений volatile - для переменных, используемых как в основном потоке, так и в прерывании. Действительно, каждый доступ к volatile потенциально замедляет программу. Поэтому число таких доступов уменьшают до минимального необходимого уровня. Есть как минимум несколько способов это сделать.
Цитата(vlad_new @ Jan 17 2012, 01:35)

Но вопрос то стоял не почему оптимизатор в Keil-е дурной

, а как в библиотеке подмену на volatile сделать. Хотя может это и не возможно, поскольку
библиотека уже оптимизирована на регистровые операции и заставить библиотечные ф-ции сбрасывать регистровые переменные в ОЗУ вряд ли возможно.
Вопрос ставится некорректно. Стандартная библиотека описана в стандарте языка Си. То, что Вы предлагаете, по сути меняет семантику библиотечных функций, то есть это будет уже не стандартная библиотека. Ну и флаг Вам в руки: напишите свою библиотеку и используйте её.
Цитата(vlad_new @ Jan 17 2012, 01:35)

А может я и ошибаюсь. Собственно я это и хотел выяснить.
Вы ошибаетесь :-)
Налицо все признаки ужасно структурированной программы. Отсюда и лезут все эти косяки. По неопытности бывает, конечно. У меня в начале тоже программы были не фонтан.