Перейти к содержанию
    

Работа с FLASH памятью МК

Здравствуйте!

 

Помогите, пожалуйста, разобраться!

Необходимо определить в FLASH-памяти строку.

И добраться до неё из программы.

Ниже приведённый код не работает. Почему?

 

...

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

...

Chr = pgm_read_byte(&x[i]);

...

 

WinAVR 20090313.

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

 

Благодарю заранее.

Изменено пользователем n_bogoyavlensky

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

...

Chr = pgm_read_byte(&x[i]);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Совсем неочевидно...

Потому что я сначала так и делал... Но компилятор ругался, типа progmem проигнорирован...

После этого обратился к avr-libc и сделал как там рекомендовано.

Компилятор ругаться перестал.

Но программа работать не начала!

И, о, чудо! Пришёл на работу и скомпилировал на версии WinAVR 20071221 приведённый выше код - работает!!!

Как это объяснить? :)

 

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

 

Кстати, почему x должна быть глобальной?

Как вообще при определении этой переменной работает компилятор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите внимательно avr-lib FAQ: How do I put an array of strings completely in ROM?

const char test_str[] PROGMEM = "test";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал. Спасибо.

Кстати, там статья есть приличная в юзер мануале по этому поводу...

 

Вот чего вычитал, ещё один способ:

...
USART.WriteStringFromFLASH2(PSTR("as1, as2, as3"));
...

 

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

 

Кстати, при применении выше указанного кода (Вами и позже мной) выдаётся сообщение:

main.cpp|15|warning: only initialized variables can be placed into program memory area|

 

Не пойму, к чему бы это...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...