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

 
 
 
Reply to this topicStart new topic
> Как поместить массив строк в нужную секцию.
stapleman
сообщение Feb 29 2012, 07:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Здравсвуйте.
При решении задачи появилясь потребность использовать массив структур. Чтобы все они хранились во flash, одно из полей являлось строкой.
Задача обычная и вот так, вполне, работает:

Код
typedef struct{
  uint8_r byte;
  char const *string;
}my_struct;

const my_struct string_mas[] = {
    {1,"string1"},
    {2,"string2"},
};


Загвоздка заключается в том, что весь этот массив должен хранится в определенной секции программы.
Я сделал так:
Код
#define APP_SEC_CONST _Pragma("location=\"APP_SECTION_CONST\"")

typedef struct{
  uint8_r byte;
  char const *string;
}my_struct;

APP_SEC_CONST const my_struct string_mas[] = {
    {1,"string1"},
    {2,"string2"},
};


НО, компилятор в нужную секцию помещает только массив указателей на строки, а сами строки помещают в свою по-умолчанию.
Вопрос заключается в том, как сказать компилятору, чтобы строки он тоже помещал в нужную секцию.

Спасибо.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Feb 29 2012, 13:06
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(stapleman @ Feb 29 2012, 10:03) *
Код
typedef struct{
  uint8_r byte;
  char const *string;
}my_struct;

const my_struct string_mas[] = {
    {1,"string1"},
    {2,"string2"},
};



НО, компилятор в нужную секцию помещает только массив указателей на строки, а сами строки помещают в свою по-умолчанию.
Вопрос заключается в том, как сказать компилятору, чтобы строки он тоже помещал в нужную секцию.

Спасибо.


В вашей структуре
Код
char const *string;

Линкер скорее всего размещает структуру в том виде, в котором вы её задали в заданную секцию.
Не пробовали заменить на
Код
char const string[32];
и проверить результат?


Другой варинт решения проблемы:
Код
const char str_1[] = "string1";
const char str_2[] = "string2";
const my_struct string_mas[] = {
    {1,str_1},
    {2,str_2},
};


сами строки str_1, str_2 тоже разместить в требуемой секции - но сами понимаете в чём сдесь будет неудобство...

Сообщение отредактировал mempfis_ - Feb 29 2012, 13:16
Go to the top of the page
 
+Quote Post
stapleman
сообщение Feb 29 2012, 13:25
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 9-11-08
Пользователь №: 41 482



Цитата(mempfis_ @ Feb 29 2012, 17:06) *
В вашей структуре
Код
char const *string;

Линкер скорее всего размещает структуру в том виде, в котором вы её задали в заданную секцию.
Не пробовали заменить на
Код
char const string[32];
и проверить результат?


Другой варинт решения проблемы:
Код
const char str_1[] = "string1";
const char str_2[] = "string2";
const my_struct string_mas[] = {
    {1,str_1},
    {2,str_2},
};


сами строки str_1, str_2 тоже разместить в требуемой секции - но сами понимаете в чём сдесь будет неудобство...


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

Вторым вариантам пользуюсь сейчас. Это действительно весьма неудобно. Поэтому и ищу совета у более опытных камрадов.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 19:52
Рейтинг@Mail.ru


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