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

 
 
> 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:24
Сообщение #2


Участник
*

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



Цитата
Если вы объявили переменную как const и попытались ее модифицировать, компилятор выругается.

Это и не подвергалось сомнению wink.gif
У меня нет вопросов по самому языку С и С ++.
Вопросы именно касаемо тонкостей их понимания компилятором Keil для ARM.

Как вы сказали:
Цитата
При этом гарантий того, что const будет размещено именно во flash - нет.


А мне нужна. Наверняка, это можно сделать явным образом так же, как и в Keil51.
Цитата
Нужно смотреть в документацию компилятора для уточнения деталей.

Посмотрел. Немного потормозил. Снова посмотрел. Все еще не нашел wink.gif

Покомпилировал пример с разными длинами массивов - 5, 50, и 5000.
Параметр Code при комментировании/раскоментировании модификатора const меняется не всегда.
Зато меняются параметры RO-data, RW-data и ZI-data.
Где можно прочитать, что каждый из параметров означает?

Цитата(aaarrr @ Jul 23 2009, 13:03) *
Нет, просто ваша константа была выброшена за ненадобностью. Задействуйте ее где-нибудь и сравните результаты.


Делаем.
Вариант 1:
Код
#define AR_SIZE 500
const char ar[AR_SIZE];
void main()
{
    if(ar[AR_SIZE-1]);
}


Цитата
Program Size: Code=1108 RO-data=16 RW-data=0 ZI-data=1256


Вариант2:

Код
#define AR_SIZE 500
/*const*/ char ar[AR_SIZE];
void main()
{
    if(ar[AR_SIZE-1]);
}


Цитата
Program Size: Code=1108 RO-data=16 RW-data=0 ZI-data=1256


--------------------
Все врут (с) /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
|- - 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   ЦитатаУ вас скорее всего работает оптимизатор, и в...   Jul 23 2009, 09:52
- - 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 Текстовая версия Сейчас: 22nd July 2025 - 13:21
Рейтинг@Mail.ru


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