реклама на сайте
подробности

 
 
> IAR AVR функция strstr, не могу разобраться
SZ0
сообщение Jul 22 2010, 18:02
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Код
u8 str_buff[100];
c8 __flash *OKin = "OK";

if(strstr((const c8 *)str_buff,(const c8 *)OKin)return 0;


strstr всегда выдаёт указатель на начало буфера, даже если ОК там нет. Т.е. в начале буфера могут быть любые символы, а потом ОК. Как я понимаю, не правильно преобразовываю. Но не могу понять, как правильно преобразовать типы. Сам массив в озу, а строки в нём ищутся из flash.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SZ0
сообщение Jul 23 2010, 06:02
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Строки пришлось определить так:
Код
const c8 OKin[] = "OK";

Строки находятся теперь и в flash и в озу, куда копируются при инициализации. Т.к. проц толстый и кол-во искомых строк немного, то не напрягает. Но вот если у проца озу маленькое, как тогда быть? К выбору другого проца пока не прибегаем smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 23 2010, 06:18
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (SZ0 @ Jul 23 2010, 09:02) *
Но вот если у проца озу маленькое, как тогда быть?

Писать свои функции. Можно по мотивам библиотечных.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 23 2010, 06:46
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(zltigo @ Jul 23 2010, 09:18) *
Писать свои функции. Можно по мотивам библиотечных.


+1
Столкнулся с подобной проблемой когда из-за излишнего применения const было съедено много оперативки для константных строк.
По аналогии с библиотечной strstr написал свою ф-ию для поиска подстроки в строке с различными комбинациями типов строк ((sram, sram), (sram, flash), (sram, eeprom)) - пользуюсь уже в 4м проекте.

Код
/***************************************************************************/
//поиск подстроки в строке с ограничением по длине поиска
signed int my_strstr(unsigned char *pData, unsigned char __flash *pComp, unsigned int len)
{
  signed int result=-1;

  for( unsigned int i=0; i<len; i++)
  {
    result=1;
    for( unsigned int j=0; *(pComp+j); j++)
    {
      if( ( *(pData+i+j) != *(pComp+j))  || ( !*(pComp+j)) )
      {
        result=-1;
        break;
      }
    }

    if(result == 1)
    {
      return i; //возвращаем позицию начала подстроки в строке
    }
  }

  return -1;
}
/******************************************************************/

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SZ0   IAR AVR функция strstr   Jul 22 2010, 18:02
- - Xenia   Цитата(SZ0 @ Jul 22 2010, 21:02) Как я по...   Jul 22 2010, 18:36
|- - zltigo   QUOTE (Xenia @ Jul 22 2010, 21:36) Таковы...   Jul 22 2010, 19:10
||- - Xenia   Цитата(zltigo @ Jul 22 2010, 22:10) ....в...   Jul 22 2010, 20:52
||- - _Bill   Цитата(Xenia @ Jul 23 2010, 00:52) Ну вот...   Jul 23 2010, 03:36
||- - zltigo   QUOTE (Xenia @ Jul 22 2010, 23:52) Ну вот...   Jul 23 2010, 05:27
|- - SZ0   Спасибо за разъяснение. Придётся искомые строки в ...   Jul 23 2010, 02:32
|||- - _Bill   Цитата(mempfis_ @ Jul 23 2010, 10:46) +1 ...   Jul 23 2010, 16:28
|||- - _Bill   Я думаю, вашу функцию можно чуть-чуть эффективней ...   Jul 23 2010, 19:29
||- - IgorKossak   QUOTE (zltigo @ Jul 23 2010, 09:18) Писат...   Jul 23 2010, 06:50
|- - Xenia   Цитата(SZ0 @ Jul 23 2010, 09:02) Строки п...   Jul 23 2010, 11:10
|- - mempfis_   КодЗнаю два варианта решения вашей проблемы: ...   Jul 23 2010, 12:55
- - Xenia   _Bill, похоже на то, что ваш алгоритм даст неправи...   Jul 23 2010, 20:14
|- - _Bill   Цитата(Xenia @ Jul 24 2010, 00:14) _Bill,...   Jul 24 2010, 05:04
- - zltigo   Классический, писанный на 'C', strstr() CO...   Jul 24 2010, 06:16
- - desh   Я использую функцию которая работает одновременно ...   Aug 3 2010, 12:48


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 09:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016