Цитата(SZ0 @ Jul 23 2010, 09:02)

Строки пришлось определить так:
Код
const c8 OKin[] = "OK";
Строки находятся теперь и в flash и в озу, куда копируются при инициализации. Т.к. проц толстый и кол-во искомых строк немного, то не напрягает. Но вот если у проца озу маленькое, как тогда быть? К выбору другого проца пока не прибегаем.
Знаю два варианта решения вашей проблемы:
1) Завести себе в ОЗУ "мусорную" строку, которая будет использоваться сразу под множество целей. Тогда не "OK" там постоянно будет лежать, а разные вещи, по мере надобности. Или скажем sprintf() на эту строку будет работать. Или чтобы какие-то сообщения там формировать. Короче говоря, создаете себе буфер на вывод, а используете его не всегда по назначению, но и для ОЗУвления ПЗУшных констант

.
2) Более элегантный метод, в котором необходимое для дела место в ОЗУ
временно занимается у стека. Для этого создайте блок и заводите в нем место для временной строки:
Код
c8 __flash *OKin = "OK";
.............
main()
{
.............
{ // открываем блок
char ozu[3]; // создаем локальный массив на стеке, принадлежащий ОЗУ
strcpy_P( ozu, OKin); // копируем строковую константу из ПЗУ в ОЗУ
result = strstr( str_buff, ozu); // выполняем функцию strstr() полностью на ОЗУшных аргументах
} // закрываем блок, в результате чего локальный массив ozu[] исчезнет, вернув свою память стеку
............
}