массив const char * не отображается во флэш - PullRequest
1 голос
/ 05 февраля 2020

Я знаю, если мы хотим отобразить константную строку в данных fla sh, мы можем написать:

static const char example[] = "map_in_flash";

Мы можем найти ее в памяти fla sh в 0x08xxxxxx;

Но я хочу отобразить массив константных строк в fla sh и написать:

static const char * example_array[10] = {"abc","def","ddd","fff"};

Он отображается в оперативной памяти.

                0x20018ae4       0x28 Src/main.o
 .data.example_array
                0x20018b0c       0x28 Src/main.o

Как отобразить массив константных строк в данных fla sh?

Ответы [ 2 ]

3 голосов
/ 05 февраля 2020

«Если сомневаетесь, добавьте больше const» - другими словами, ваш массив содержит значения типа «pointer to const char», что означает, что сами строки не могут быть изменены, но элементы массива все еще могут быть изменен так, чтобы указывать на разные строки!

Вы можете использовать const char * const, чтобы указатели не могли быть изменены, и они могут находиться во флаге sh.

2 голосов
/ 05 февраля 2020

Неконстантные указатели являются изменяемыми. Сделайте указатели постоянными.

static const char * const example_array[10] = {"abc","def","ddd","fff"};

Если вы используете g cc и вы действительно хотите заставить свой компилятор помещать данные в часть памяти, предназначенную только для чтения, вы можете поместить их в секцию .rodata с спецификатор компилятора c спецификатор атрибута раздела, такой как __attribute__((__section__(".rodata"))).

...