Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с FLASH памятью МК
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
koluna
Здравствуйте!

Помогите, пожалуйста, разобраться!
Необходимо определить в FLASH-памяти строку.
И добраться до неё из программы.
Ниже приведённый код не работает. Почему?

Код
...

prog_uchar x[] = "!!!Test String!!!";

...

Chr = pgm_read_byte(&x[i]);

...


WinAVR 20090313.
Раньше работало (определял через PROGMEM).

Благодарю заранее.
777777
Цитата(n_bogoyavlensky @ Sep 9 2009, 02:13) *
Раньше работало (определял через PROGMEM).

Очевидно, и сейчас надо определять через PROGMEM smile.gif

Код
const prog_uchar x[] PROGMEM= "!!!Test String!!!";

...

Chr = pgm_read_byte(&x[i]);
koluna
Совсем неочевидно...
Потому что я сначала так и делал... Но компилятор ругался, типа progmem проигнорирован...
После этого обратился к avr-libc и сделал как там рекомендовано.
Компилятор ругаться перестал.
Но программа работать не начала!
И, о, чудо! Пришёл на работу и скомпилировал на версии WinAVR 20071221 приведённый выше код - работает!!!
Как это объяснить? smile.gif

Кучу времени убил...

Кстати, почему x должна быть глобальной?
Как вообще при определении этой переменной работает компилятор?
mdmitry
Посмотрите внимательно avr-lib FAQ: How do I put an array of strings completely in ROM?
Код
const char test_str[] PROGMEM = "test";
koluna
Почитал. Спасибо.
Кстати, там статья есть приличная в юзер мануале по этому поводу...

Вот чего вычитал, ещё один способ:
Код
...
USART.WriteStringFromFLASH2(PSTR("as1, as2, as3"));
...


Очень удобно, только вот если подобные строки в исходниках дублируются, то в исполняемом файле они тоже дублируются... не очень экономично получается...

Кстати, при применении выше указанного кода (Вами и позже мной) выдаётся сообщение:
Цитата
main.cpp|15|warning: only initialized variables can be placed into program memory area|


Не пойму, к чему бы это...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.