Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.09.2009, 22:08
|
#1
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
копируем массив
Код:
|
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.
Причина: Оформляем код как положено!
|
|
|
|
14.09.2009, 23:50
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: копируем массив
Сообщение от vvkka
|
Код:
|
strcpyf(adres2,lcd2); //функция копирует сроку из flash в sdram
strcpyf(adres3,lcd3); //в библиотеке "string.h" |
После нескольких мытарств исползовал стандартную функцию копирования и вроде как все нормально без ошибок компилируется но в симуляторе на ЖК какаето каша выходит
то вобще теряет слова, весь смысл этой затеи в очень большом массиве и разместить его в SDRAM неполучится, flash вполне подходит но при копировании что то не так
симулятор использую ПРОТЭУС 7.4 SP3
|
чё то как то замудрёно.. а напрямую из Флеши в ЛЦД низя?
Последний раз редактировалось picavr; 15.09.2009 в 00:01.
|
|
|
|
15.09.2009, 08:21
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
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.
Причина: скобку пропустил
|
|
|
|
15.09.2009, 08:59
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: копируем массив
Единственное, что - после первого же вызова функции копирования значение указателя в оперативке будет сбито. Чтобы каждый раз не писать *adres=buffer;
кинем это внутрь функции копирования
Цитата:
|
void copy_buf(char *in,flash char *out)
{
*in= buffer;
do{
*in++=*out++;
}while(*out);
}
|
Естественно, buffer при этом - глобальная переменная.
|
|
|
|
15.09.2009, 17:41
|
#5
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
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 работают более коректно
|
|
|
|
15.09.2009, 18:26
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: копируем массив
строку нужно заканчивать нулевым символом
не flash char lcd1[] = {"osn"}; //тоже рамещение во флеш
а
flash char lcd1[] = {"osn\0"}; //тоже рамещение во флеш
Последний раз редактировалось urry; 16.09.2009 в 18:02.
|
|
|
|
15.09.2009, 18:28
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: копируем массив
Успехов...
Последний раз редактировалось urry; 15.09.2009 в 18:31.
Причина: дубль
|
|
|
|
16.09.2009, 17:26
|
#8
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: копируем массив
flash char lcd1[] = {"osn\0"}; //тоже рамещение во флеш
проставить знак \0 в конце строки абсолютно ничего не меняет, компилятор и так его проставит
уважаемый URRY вам как великому специолисту по массивам и указателям, тут проблема проблема скорее всего нестыковки указателейй расположеных SDRAM (они там всегда) с массивами во flash
постоянно поисходит потеря укозателем адреса массива (именно когда он хронится выше указаной памяти) при обращению к другому укозателю, возможно это глюк компилятора CVAVR, пробывал даже прошить реальный микроконтр... тоже что и в протеусе (сначало на него грешил) так что исправить пока неудалось
|
|
|
|
16.09.2009, 17:53
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: копируем массив
Сообщение от vvkka
|
возможно это глюк компилятора CVAVR, пробывал даже прошить реальный микроконтр... тоже что и в протеусе (сначало на него грешил) так что исправить пока неудалось
|
А Ваш контроллер имеет 64КБ флеша и более?
|
|
|
|
16.09.2009, 18:18
|
#10
|
Прописка
Регистрация: 24.08.2005
Сообщений: 139
Сказал спасибо: 18
Сказали Спасибо 16 раз(а) в 15 сообщении(ях)
|
Re: копируем массив
вобще то будет mega128 ,а тестирую на mega8535 но и массив пока маленький 5 строк
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:32.
|
|