Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как поместить массив строк в нужную секцию.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
stapleman
Здравсвуйте.
При решении задачи появилясь потребность использовать массив структур. Чтобы все они хранились во 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"},
};


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

Спасибо.
mempfis_
Цитата(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 тоже разместить в требуемой секции - но сами понимаете в чём сдесь будет неудобство...
stapleman
Цитата(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 тоже разместить в требуемой секции - но сами понимаете в чём сдесь будет неудобство...


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

Вторым вариантам пользуюсь сейчас. Это действительно весьма неудобно. Поэтому и ищу совета у более опытных камрадов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.