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

 
 
> ARM, Keil, C/C++ - программирование, Как разместить константу во флеше?
Dreamer
сообщение Jul 22 2009, 14:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Здравствуйте.

Перехожу на программирование ARM -микроконтроллеров, компилятор Keil.
До этого работал с аналогичным компилятором, но для 51 контроллеров.

Собственно, вопрос. Хочу объявить константу так, чтобы она размещалась в самом коде программы.
В компилторе для 51 процессоров это делалось так:

char code MyText[7]= "Hellow";

В компиляторе для ARM это не прокатывает.
Модификатор const тоже не помогает - константа все равно размещается в оперативке.
А как разместить ее в коде аналогично вышеуказанному примеру?

Спасибо.


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dreamer
сообщение Jul 23 2009, 09:52
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 13-01-06
Из: Санкт-Петербург
Пользователь №: 13 154



Цитата
У вас скорее всего работает оптимизатор, и выкидывает нафиг вашу переменную.

Да, вы правы. Усложнил код - параметр RO-data стал меняться на 500 байт.

Код
#define AR_SIZE 500
const char ar[AR_SIZE]={1};
char ar2[AR_SIZE];
void main()
{
    int i;
    for(i=0;i<sizeof(ar2);i++)
        if(i&1)
            ar2[i]=ar[i];

}


Цитата
Кроме того, для приведенного фрагмента кода слишком много, наверняка что-то еще компилируется. Сделайте ваши эксперименты в отдельном файле, порулите размером массива, чтобы понять, куда он у вас попадает.

Ага, при создании проекта средой добавлен достаточно большой файл startap.s. Если его не добавить, то "голый проект" с одним лишь моим файлом не компилируется.

Цитата
Если не поможет, попробуйте volatile const char ar[AR_SIZE]; - это точно должно сработать.

Вот объявление массива как const volatile как раз оставляет RO-data= 0. Зато на 500 увеличивается RW-data.

Сообщение отредактировал Dreamer - Jul 23 2009, 09:54


--------------------
Все врут (с) /M.D.House/
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dreamer   ARM, Keil, C/C++ - программирование   Jul 22 2009, 14:51
- - aaarrr   Кодconst char text[6] = "Hello"; ...   Jul 22 2009, 15:06
- - sonycman   Можно ещё добавить static: Кодstatic const char te...   Jul 22 2009, 20:09
|- - Andy Mozzhevilov   Цитата(sonycman @ Jul 23 2009, 00:09) Мож...   Jul 23 2009, 04:41
- - Dreamer   Вариант 1: Код#define AR_SIZE 500 char ar[AR_...   Jul 23 2009, 08:10
|- - Andy Mozzhevilov   Цитата(Dreamer @ Jul 23 2009, 12:10) Исхо...   Jul 23 2009, 08:41
|- - aaarrr   Цитата(Dreamer @ Jul 23 2009, 12:10) Разм...   Jul 23 2009, 09:03
- - Dreamer   ЦитатаЕсли вы объявили переменную как const и попы...   Jul 23 2009, 09:24
|- - Andy Mozzhevilov   Цитата(Dreamer @ Jul 23 2009, 13:18) Зато...   Jul 23 2009, 09:24
|- - Сергей Борщ   Цитата(Dreamer @ Jul 23 2009, 12:24) Зато...   Jul 23 2009, 09:33
- - Dreamer   ЦитатаReadOnly data - сюда должны попадать перемен...   Jul 23 2009, 09:30
- - Andy Mozzhevilov   У вас скорее всего работает оптимизатор, и выкидыв...   Jul 23 2009, 09:31
- - Andy Mozzhevilov   В IAR ваш код выглядит вот так: Кодchar ar[AR_...   Jul 23 2009, 09:35
- - Dreamer   ЦитатаReadOnly data - сюда должны попадать перемен...   Jul 23 2009, 15:18
|- - aaarrr   Цитата(Dreamer @ Jul 23 2009, 19:18) Что-...   Jul 23 2009, 15:32
- - Dreamer   aaarrr, большое спасибо, галка действительно стоит...   Jul 24 2009, 07:50


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

 


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


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