Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Доступ к строковому массиву в памяти программы
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
gte
Привет Всем.

Есть набор строковых массивов размещенных в памяти программ, типа
Код
const char ru_error_3[]  PROGMEM =


Строковые массивы сейчас находятся в отдельном файле

ru_error.h

При этом, эти разные массивы используются в функции вывода в качестве аргумента.
Но вот незадача. Вызовы этой функции хотелось бы иметь в разных файлах проекта.

Вопрос в том, можно ли как то определить эти массивы, что бы они были доступны в разных файлах?
Или придется обеспечить вызовы в одном файле?

Используется AVR Studio и WinAVR.
jorikdima
const char ru_error_3[] PROGMEM =
расположить в любом С файле. В каком-нибудь h файле прописать
extern const char ru_error_3[] PROGMEM =
Подключить этот хедер к тем с файлам, в которых хочется обращаться к массиву
gte
Цитата(jorikdima @ Sep 18 2011, 05:54) *
const char ru_error_3[] PROGMEM =
расположить в любом С файле. В каком-нибудь h файле прописать
extern const char ru_error_3[] PROGMEM =
Подключить этот хедер к тем с файлам, в которых хочется обращаться к массиву

Спасибо.
Проблема была в том, что я указывал именно
Код
extern const char ru_error_3[]  PROGMEM = xxx;
или
extern const char ru_error_3[]  PROGMEM;

а надо было во втором включаемом файле указывать
Код
extern const char ru_error_3[];

т.е. без PROGMEM и инициализации.
IgorKossak
Цитата(gte @ Sep 18 2011, 09:04) *
Код
extern const char ru_error_3[];

т.е. без PROGMEM и инициализации.

Без PROGMEM не получится, т. к. компилятор должен знать какие инструкции обращения к Вашему массиву генерировать.
AHTOXA
Цитата(IgorKossak @ Sep 18 2011, 15:59) *
Без PROGMEM не получится, т. к. компилятор должен знать какие инструкции обращения к Вашему массиву генерировать.

В avr-gcc этим занимается программистsm.gif
А extern с PROGMEM действительно не работает.
gte
Цитата(IgorKossak @ Sep 18 2011, 12:59) *
Без PROGMEM не получится, т. к. компилятор должен знать какие инструкции обращения к Вашему массиву генерировать.

Тем не менее.
Если сделать как я написал, то строки ложатся в
Код
.progmem.data

и при использовании в файле, в котором указано
Код
extern const char ru_error_3[];

компилятор это понимает.

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