Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 14.09.2009, 22:08   #1
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию копируем массив

Код:
int znak=2;
int znak1=77;

char *adres2;
char *adres3;

//void regim_ustavka (void);
//void inicializacia(void);

flash char lcd1[] = {"osn"}; //тоже рамещение во флеш
flash char lcd2[] = {" menu"};
flash char lcd3[] = {" rabota"};
//flash char lcd4[] = {"nastoika"};
//массив будет очень большой

void indi (void) { //выводим инфомацию на экран LCD 

lcd_gotoxy(0,0); //верхняя строка
sprintf(lcd_biffer,"r=%-s %-s",*adres2,*adres3);
lcd_puts (lcd_biffer);

lcd_gotoxy(0,1); //нижняя строка
sprintf(lcd_biffer,"j=%s %i %i",*adres2,znak,znak1); //%s-слово sram, %i-число,
lcd_puts (lcd_biffer); //n-перенос строки
}


void main (void) {
inicializacia();

strcpyf(adres2,lcd2); //функция копирует сроку из flash в sdram
strcpyf(adres3,lcd3); //в библиотеке "string.h"

while(1){
indi ();
}
}
После нескольких мытарств исползовал стандартную функцию копирования и вроде как все нормально без ошибок компилируется
но в симуляторе на ЖК какаето каша выходит
то вобще теряет слова,
весь смысл этой затеи в очень большом массиве и разместить его в SDRAM неполучится, flash вполне подходит но при копировании что то не так
симулятор использую ПРОТЭУС 7.4 SP3
Реклама:

Последний раз редактировалось dosikus; 14.09.2009 в 22:18. Причина: Оформляем код как положено!
vvkka вне форума  
Непрочитано 14.09.2009, 23:50   #2
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: копируем массив

Сообщение от vvkka Посмотреть сообщение
Код:
strcpyf(adres2,lcd2); //функция копирует сроку из flash в sdram
strcpyf(adres3,lcd3); //в библиотеке "string.h"
После нескольких мытарств исползовал стандартную функцию копирования и вроде как все нормально без ошибок компилируется но в симуляторе на ЖК какаето каша выходит
то вобще теряет слова, весь смысл этой затеи в очень большом массиве и разместить его в SDRAM неполучится, flash вполне подходит но при копировании что то не так
симулятор использую ПРОТЭУС 7.4 SP3
чё то как то замудрёно.. а напрямую из Флеши в ЛЦД низя?

Последний раз редактировалось picavr; 15.09.2009 в 00:01.
picavr вне форума  
Непрочитано 15.09.2009, 08:21   #3
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: копируем массив

насчет замудрено - точно...
Используете указатели, так используйте массив указателей, что-то типа
Цитата:
char flash *lsd[3]={"123","456","789"};
char buffer[10];
char *adres=buffer;
void copy_buf(char *in,flash char *out)
{
do{
*in++=*out++;
}while(*out);
}
//------------------------
//вызываем
copy_buf(adres,lsd[0]);

Последний раз редактировалось urry; 15.09.2009 в 08:25. Причина: скобку пропустил
urry вне форума  
Непрочитано 15.09.2009, 08:59   #4
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: копируем массив

Единственное, что - после первого же вызова функции копирования значение указателя в оперативке будет сбито. Чтобы каждый раз не писать *adres=buffer;
кинем это внутрь функции копирования
Цитата:
void copy_buf(char *in,flash char *out)
{
*in= buffer;
do{
*in++=*out++;
}while(*out);
}
Естественно, buffer при этом - глобальная переменная.
urry вне форума  
Непрочитано 15.09.2009, 17:41   #5
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию Re: копируем массив

чем плоха функция
strcpyf(adres2,lcd2); //функция копирует сроку из flash в sdram
из стандартной библиотеки string.h
делает тоже самое посимвольное копирование что и здесь

void copy_buf(char *in,flash char *out)
{
*in= buffer;
do{
*in++=*out++;

возврат укозатель *adres2 что и char *in

кстати такой формат я тоже пробывал получается примерно тоже самое
и что интиресно такое происходит с со строчными массивами , массивы данных int работают более коректно
vvkka вне форума  
Непрочитано 15.09.2009, 18:26   #6
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: копируем массив

строку нужно заканчивать нулевым символом
не flash char lcd1[] = {"osn"}; //тоже рамещение во флеш
а

flash char lcd1[] = {"osn\0"}; //тоже рамещение во флеш

Последний раз редактировалось urry; 16.09.2009 в 18:02.
urry вне форума  
Непрочитано 15.09.2009, 18:28   #7
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: копируем массив

Успехов...

Последний раз редактировалось urry; 15.09.2009 в 18:31. Причина: дубль
urry вне форума  
Непрочитано 16.09.2009, 17:26   #8
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию Re: копируем массив

flash char lcd1[] = {"osn\0"}; //тоже рамещение во флеш

проставить знак \0 в конце строки абсолютно ничего не меняет, компилятор и так его проставит
уважаемый URRY вам как великому специолисту по массивам и указателям, тут проблема проблема скорее всего нестыковки указателейй расположеных SDRAM (они там всегда) с массивами во flash
постоянно поисходит потеря укозателем адреса массива (именно когда он хронится выше указаной памяти) при обращению к другому укозателю, возможно это глюк компилятора CVAVR, пробывал даже прошить реальный микроконтр... тоже что и в протеусе (сначало на него грешил) так что исправить пока неудалось
vvkka вне форума  
Непрочитано 16.09.2009, 17:53   #9
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: копируем массив

Сообщение от vvkka Посмотреть сообщение
возможно это глюк компилятора CVAVR, пробывал даже прошить реальный микроконтр... тоже что и в протеусе (сначало на него грешил) так что исправить пока неудалось
А Ваш контроллер имеет 64КБ флеша и более?
kison вне форума  
Непрочитано 16.09.2009, 18:18   #10
vvkka
Прописка
 
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
vvkka на пути к лучшему
По умолчанию Re: копируем массив

вобще то будет mega128 ,а тестирую на mega8535 но и массив пока маленький 5 строк
vvkka вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертер(редактор) графики в массив. Kabron Микроконтроллеры, АЦП, память и т.д 7 19.10.2008 22:18
как записать строку в массив? dimonbest Микроконтроллеры, АЦП, память и т.д 8 27.02.2008 12:18
как записать массив 50 на 16 в еепром atmega128& sma-etu Микроконтроллеры, АЦП, память и т.д 0 15.02.2007 16:05
массив в качестве аргумента функции maxNTF Микроконтроллеры, АЦП, память и т.д 2 16.10.2006 16:50


Часовой пояс GMT +4, время: 06:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot