|
Разместить массив во Flash STM32, IAR ARM v6.21 |
|
|
|
 |
Ответов
|
May 17 2012, 11:30
|
Частый гость
 
Группа: Свой
Сообщений: 88
Регистрация: 9-04-12
Пользователь №: 71 256

|
Цитата(SergeyL @ May 17 2012, 05:46)  Так должно получиться static const uint8_t Cmd [] = {3,2,1}; Неее! Модификатор static не для этого! static переменная все равно будет расположена в RAM, но только инициализироваться до main() и др. Пробовал модификаторы @ и pragma, но пока не получается :-( Неужели никто не знает как разместить массив в ROM (FLASH)?
|
|
|
|
|
May 17 2012, 11:55
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 24-11-07
Пользователь №: 32 633

|
Цитата(bingo @ May 17 2012, 15:30)  Неее! Модификатор static не для этого! Ключевое слово здесь не static, а const.
--------------------
Если друг оказался вдруг и не друг и не враг, а - JTAG.
|
|
|
|
|
May 18 2012, 01:01
|
Частый гость
 
Группа: Свой
Сообщений: 88
Регистрация: 9-04-12
Пользователь №: 71 256

|
Цитата(demiurg_spb @ May 17 2012, 20:51)  +1 Этого должно хватать для того чтобы данные разместились во флеше, при условии что они глобальные (вне функции обявлены). К сожелению и это не правильно. Вот цитата из документации ("EWARM Development Guide" с.288): "If you declare a volatile object const, it will be write-protected but it will still be stored in RAM memory as the C standard specifies. To store the object in read-only memory instead, but still make it possible to access it as a const volatile object, define the variable like this: const volatile int x @ "FLASH"; " Да, так работает. Но мне нужен инициализированный массив (типа Cmd [] = {3,2,1} ). А это уже не компилируется Кстати, и без volatile - тоже массив будет в RAM! А точнее, в RAM и еще код для его создания в ROM (т.к.начальный код для создания структуры массива в RAM все равно работает из FLASH). Т.е. не рационально и избыточно. Возможность разместить неизменяемые большие массивы в ROM-FLASH (которого существенно больше чем RAM) очень полезна.
Сообщение отредактировал bingo - May 18 2012, 01:03
|
|
|
|
|
May 18 2012, 01:41
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(bingo @ May 18 2012, 04:01)  Вот цитата из документации ("EWARM Development Guide" с.288):
"If you declare a volatile object const, it will be write-protected but it will still be stored in RAM memory as the C standard specifies. To store the object in read-only memory instead, but still make it possible to access it as a const volatile object, define the variable like this: const volatile int x @ "FLASH"; "
Да, так работает. Но мне нужен инициализированный массив (типа Cmd [] = {3,2,1} ). А это уже не компилируется Может где-то не там смотрите... Причина может быть в настройках проекта или ещё в чём-нибудь . Создал массив по адресу(__root - запрет сооптимизировать): Код __root const unsigned char Test[3]@0x1005={ 1,2,3 };
Массив по адресу 0x1005 - что есть FLASH.
|
|
|
|
Сообщений в этой теме
bingo Разместить массив во Flash STM32 May 17 2012, 02:16   haker_fox QUOTE (PheeL @ May 17 2012, 19:55) Ключев... May 17 2012, 15:05    PheeL Цитата(haker_fox @ May 17 2012, 19:05) co... May 17 2012, 16:51 bingo Цитата(_Артём_ @ May 18 2012, 04:41) Може... May 18 2012, 01:56 Dog Pawlowa Цитата(bingo @ May 18 2012, 04:56) ...
А ... May 18 2012, 02:24  bingo Цитата(Dog Pawlowa @ May 18 2012, 05:24) ... May 18 2012, 04:57   Dog Pawlowa Цитата(bingo @ May 18 2012, 07:57) Я же п... May 18 2012, 06:43    PheeL Цитата(Dog Pawlowa @ May 18 2012, 10:43) ... May 18 2012, 06:58    bingo Цитата(Dog Pawlowa @ May 18 2012, 10:43) ... May 18 2012, 10:40     Dog Pawlowa Цитата(bingo @ May 18 2012, 13:40) Так ка... May 18 2012, 13:51 _Артём_ Цитата(bingo @ May 18 2012, 04:56) Верно,... May 18 2012, 02:28 derstik Цитата(bingo @ May 17 2012, 08:16) Здравс... May 24 2012, 04:37 ViKo Я поддерживаю сообщение №2. Нужно описывать в виде... May 24 2012, 05:20 muravei Цитата(ViKo @ May 24 2012, 09:20) Нужно о... Aug 17 2013, 09:45
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|