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

 
 
> Разместить массив во Flash STM32, IAR ARM v6.21
bingo
сообщение May 17 2012, 02:16
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 9-04-12
Пользователь №: 71 256



Здравствуйте
Есть большой набор не изменяемых массивов байт (целевые команды). Размещать из в RAM- не рационально.
Подскажите пожалуйста как объявить в IAR ARM С инициализированный массив , так чтобы он был расположен во FLASH, а не в RAM. Естественно, массив только для чтения.

Ранее для IAR AVR я делал так:
__flash char* num1 = "58749455350";

Для IAR ARM v6.21 это не проходит.
Но и такие объявления не получаются:
uint8_t Cmd [] = {3,2,1} @ "FLASH";

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SergeyL
сообщение May 17 2012, 02:46
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 98
Регистрация: 28-06-04
Пользователь №: 199



Так должно получиться
static const uint8_t Cmd [] = {3,2,1};
Go to the top of the page
 
+Quote Post
bingo
сообщение May 17 2012, 11:30
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 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)?
Go to the top of the page
 
+Quote Post
PheeL
сообщение May 17 2012, 11:55
Сообщение #4


Участник
*

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



Цитата(bingo @ May 17 2012, 15:30) *
Неее!
Модификатор static не для этого!

Ключевое слово здесь не static, а const.


--------------------
Если друг оказался вдруг и не друг и не враг, а - JTAG.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 17 2012, 17:51
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(PheeL @ May 17 2012, 14:55) *
Ключевое слово здесь не static, а const.

+1
Этого должно хватать для того чтобы данные разместились во флеше, при условии что они глобальные (вне функции обявлены).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
bingo
сообщение May 18 2012, 01:01
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 88
Регистрация: 9-04-12
Пользователь №: 71 256



Цитата(demiurg_spb @ May 17 2012, 20:51) *
+1
Этого должно хватать для того чтобы данные разместились во флеше, при условии что они глобальные (вне функции обявлены).


К сожелению и это не правильно. crying.gif
Вот цитата из документации ("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
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 18 2012, 01:41
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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