[an error occurred while processing this directive] [an error occurred while processing this directive]
Как лучше работать с массивами "flash char" в AVR IAR C?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Vadim_SCH 29 января 2002 г. 11:58

Нужно сравнить строчку в буфере со многими образцами строчек. AVR8535, ОЗУ маловато, и памяти программ маловато.
Пишу:
flash char Str_ABC[3] = {'A','B','C'}; //Это пример.
...(ещё строчки)
flash char Str_KLM[3] = {'K','L','M'};
Объявляю массивы:
char InBuf[80], CmpBuf[10];
Заполняю массив для сравнения: (unsigned char i,n, Test; - переменные):
n=3; for (i=0;iи вызываю подпрограмму сравнения двух строк (несущественно, как написана):
Test=CompareBuf(&InBuf[0],&CmpBuf[0],n);
...И так много раз. И каждый раз заполняю массив:
n=3; for (i=0;iВОПРОC ВОТ В ЧЁМ: а есть ли способ написать подпрограмму, работающую каждый раз с разными массивами, что-то вроде:
FillBuf(&CmpBuf[0],(flash*) & Str_KLM[0],n); //ЭТО НЕ РАБОТАЕТ.
Должна быть подпрограмма FillBuf, которой надо задать только адреса двух массивов, один из которых - в флеш-памяти программ. А то очень уж неэкономно, если компилятор генерит каждый раз новый код для каждого цикла вида:
n=3; for (i=0;iВидимо, придётся писать ассемблерную подпрограмму? А как получить в IAR C и передать в вызове адрес ссылки на массив Str_KLM[0]? Как объявить в IAR C пременную типа pointer на флеш-массив? Может, у кого такая подпрограмма уже есть готовая? Или, если это уже обсуждали, ссылкой на подобное обсуждение в Конференции помогите.
На ассемблере то всё просто и понятно, а в IAR C не знаю, как объявить указатель на флеш-массив.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru