реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Доступ к строковому массиву в памяти программы, при вызове в двух разных файлах
gte
сообщение Sep 17 2011, 19:20
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613



Привет Всем.

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


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

ru_error.h

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

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

Используется AVR Studio и WinAVR.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 18 2011, 02:54
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



const char ru_error_3[] PROGMEM =
расположить в любом С файле. В каком-нибудь h файле прописать
extern const char ru_error_3[] PROGMEM =
Подключить этот хедер к тем с файлам, в которых хочется обращаться к массиву
Go to the top of the page
 
+Quote Post
gte
сообщение Sep 18 2011, 06:04
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613



Цитата(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 и инициализации.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 18 2011, 09:59
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(gte @ Sep 18 2011, 09:04) *
Код
extern const char ru_error_3[];

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

Без PROGMEM не получится, т. к. компилятор должен знать какие инструкции обращения к Вашему массиву генерировать.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 18 2011, 17:08
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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

В avr-gcc этим занимается программистsm.gif
А extern с PROGMEM действительно не работает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
gte
сообщение Sep 18 2011, 20:13
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613



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

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

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

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

WinAVR 20071221
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016