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

 
 
> Снова про const, не получается переползти с С на СРР
Aprox
сообщение Jan 10 2011, 06:05
Сообщение #1


Местный
***

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



Искал свою проблему в форуме, но не нашел решения. Проблема в следующем. Имеется готовый проект на С для IAR-430A, кристаллы ARM ST91х. Использую структуры, состоящие из данных-констант вида:
Код
typedef struct{
  const Tsome_type  some_data1;
  const Tsome_type  some_data2;
  // ...etc
} Tsome_info;

Затем в коде на С создаю эти структуры с уже конкретными константами в полях
Код
const Tsome_info info1={,,,,,};
const Tsome_info info2={,,,,,};
const Tsome_info info3={,,,,,};
//..etc

На С все прекрасно живет, компилятор помещает мои структуры в сегмент CONST, а линкер- в ROM. Но, тот же самый код на СPP приводит к размещению структур в сегменте CSTACK вместе с другими объектами. В результате куча констант хранится в RAM, которой и так мало! Я в шоке. wacko.gif Можно ли как-то победить эту проблему? Или придется перелопачивать идеологию проекта?


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Jan 10 2011, 08:05
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



В общем случае надо явно компилятору/линкеру сообщить, какие данные в каком именно сегменте вы хотите расположить, а не просто использовать размещение по умолчанию. Синтаксис таких команд сильно зависит от применяемой связки компилятор/линкер. Почитайте документацию, это не очень сложно.
Go to the top of the page
 
+Quote Post
Aprox
сообщение Jan 10 2011, 16:44
Сообщение #3


Местный
***

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



Цитата(sergeeff @ Jan 10 2011, 14:05) *
В общем случае надо явно компилятору/линкеру сообщить, какие данные в каком именно сегменте вы хотите расположить, а не просто использовать размещение по умолчанию. Синтаксис таких команд сильно зависит от применяемой связки компилятор/линкер. Почитайте документацию, это не очень сложно.
Понимаете, я хотел получить упрощение написания программ за счет перехода на обьектное программирование, а получается, надо разбираться в куче дополнительных подробностей, которые сводят на нет преимущества СРР. Понятно, что директивами pragma можно рулить сегментами. Но зачем эти сложности и лишний раз тыкать в клавиатуру? В кодах на "С" все нужное происходит автоматом.
Кроме того, я четко видел в мануале- объекты и структуры помещаются в один сегмент данных. И тут, наверное, уже никакими ухищрениями их не разъединить.


Цитата(Сергей Борщ @ Jan 10 2011, 14:58) *
Уже несколько лет пользуюсь ИАРом 4.30, пишу на C++, и он все константы прекрасно располагает во флеше:

Вот мой участок кода, который структуру из констант размещает в RAM. Тестовая программа в файле с расширением .cpp, т.е. будет работать СРР компилятор.
Код
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

typedef struct{
   const char* row[2];
} TFormInfo;


int main()
{
  const TFormInfo form_info ={
   "row1",
   "row2"
  };

  return 0;
}
Пробежав симулятором от main до return, открываем структуру в QuickWatch и видим- она размещена в RAM.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 10 2011, 20:11
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Aprox @ Jan 10 2011, 21:44) *
Вот мой участок кода, который структуру из констант размещает в RAM.
Никто не дает гарантии, что С-компилятор разместит эту структуру во флеше. Локальные автоматические переменные компилятор размещает в регистрах или на стеке. Квалификатор const запрещает обращение на запись к такой переменной, не более. И лишь объявление локальной переменной с квалификатором static делает такую переменную неавтоматической и позволяет разместить ее в сегменте DATA_C. Добавьте static к своей переменной и в С и С++ программе - переменная ляжет во флешь.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Aprox
сообщение Jan 11 2011, 00:36
Сообщение #5


Местный
***

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



Спасибо огромное! Действительно, попробовал поместить структуру констант в область глобальных переменных и она легла во флешь. Еще раз спасибо, что помогли распутать ситуацию. rolleyes.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Aprox   Снова про const   Jan 10 2011, 06:05
- - Сергей Борщ   QUOTE (Aprox @ Jan 10 2011, 11:05) На С в...   Jan 10 2011, 06:41
- - sergeeff   Ну и оставьте свои Кодconst Tsome_info info1={,,,...   Jan 10 2011, 06:46
|- - Aprox   Спасибо за идею! Действительно, проект можно с...   Jan 10 2011, 07:55
|- - Сергей Борщ   QUOTE (Aprox @ Jan 10 2011, 12:55) Чисто ...   Jan 10 2011, 08:58
|- - Сергей Борщ   QUOTE (Aprox @ Jan 11 2011, 05:36) Действ...   Jan 11 2011, 03:36
|- - Aprox   Цитата(Сергей Борщ @ Jan 11 2011, 09:36) ...   Jan 11 2011, 05:55
- - dimka76   А если IAR посвежее взять может там что-то изменил...   Jan 10 2011, 08:24
- - sergeeff   Вы должны четко понять, что С и С++ это разные ком...   Jan 10 2011, 16:58
- - Oldring   Цитата(Aprox @ Jan 10 2011, 12:05) Я в шо...   Jan 10 2011, 17:15
|- - dxp   Цитата(Oldring @ Jan 11 2011, 02:15) В пл...   Jan 11 2011, 08:53
|- - Oldring   Цитата(dxp @ Jan 11 2011, 14:53) Это как ...   Jan 11 2011, 09:25
|- - Aprox   А все-таки, посоветуйте новичку в "плюсах...   Jan 11 2011, 16:04
||- - sergeeff   Цитата(Aprox @ Jan 11 2011, 23:04) А все-...   Jan 11 2011, 17:23
||- - AHTOXA   Цитата(Aprox @ Jan 12 2011, 00:04) как в ...   Jan 11 2011, 18:52
|||- - Aprox   Цитата(AHTOXA @ Jan 12 2011, 00:52) Ну вы...   Jan 13 2011, 06:05
|||- - AHTOXA   Цитата(Aprox @ Jan 13 2011, 14:05) Мне ка...   Jan 13 2011, 06:29
|||- - Aprox   Цитата(AHTOXA @ Jan 13 2011, 12:29) А с ш...   Jan 13 2011, 08:23
|||- - Сергей Борщ   QUOTE (Aprox @ Jan 13 2011, 13:23) Я тут ...   Jan 13 2011, 08:36
|||- - AHTOXA   Цитата(Aprox @ Jan 13 2011, 16:23) Я про ...   Jan 13 2011, 15:40
|||- - Aprox   Цитата(AHTOXA @ Jan 13 2011, 21:40) Может...   Jan 14 2011, 07:52
|||- - AHTOXA   А как иначе? Ну или можно скомпилировать оба вари...   Jan 14 2011, 08:39
|||- - Aprox   Цитата(AHTOXA @ Jan 14 2011, 11:39) А как...   Jan 19 2011, 18:50
|||- - AHTOXA   Цитата(Aprox @ Jan 19 2011, 23:50) По иде...   Jan 19 2011, 19:44
|||- - Aprox   Цитата(AHTOXA @ Jan 19 2011, 22:44) До не...   Jan 19 2011, 20:37
|||- - Aprox   И еще вдогонку вопрос. Как я понимаю, тот массив с...   Jan 20 2011, 06:46
|||- - Сергей Борщ   QUOTE (Aprox @ Jan 20 2011, 08:46) Потому...   Jan 20 2011, 07:51
|||- - Aprox   Цитата(Сергей Борщ @ Jan 20 2011, 10:51) ...   Jan 21 2011, 07:49
|||- - jorikdima   Цитата(Aprox @ Jan 21 2011, 10:49) Что эт...   Jan 21 2011, 08:10
|||- - Aprox   Цитата(jorikdima @ Jan 21 2011, 11:10) Во...   Jan 21 2011, 11:00
|||- - Сергей Борщ   QUOTE (Aprox @ Jan 21 2011, 13:00) но упо...   Jan 21 2011, 11:09
||||- - Aprox   Цитата(Сергей Борщ @ Jan 21 2011, 14:09) ...   Jan 21 2011, 12:39
|||- - ReAl   Цитата(Aprox @ Jan 21 2011, 13:00) К сожа...   Jan 21 2011, 13:59
|||- - jorikdima   Цитата(ReAl @ Jan 21 2011, 16:59) Что-то ...   Jan 21 2011, 14:18
|||- - Aprox   Цитата(ReAl @ Jan 21 2011, 16:59) Кодobje...   Jan 21 2011, 15:12
||- - Oldring   Цитата(Aprox @ Jan 11 2011, 22:04) А все-...   Jan 11 2011, 20:40
|- - dxp   Цитата(Oldring @ Jan 11 2011, 18:25) В го...   Jan 12 2011, 05:12
|- - Oldring   Цитата(dxp @ Jan 12 2011, 11:12) Такие да...   Jan 12 2011, 05:29
|- - jorikdima   Цитата(dxp @ Jan 12 2011, 11:12) Такие да...   Jan 12 2011, 09:34
|- - dxp   Цитата(jorikdima @ Jan 12 2011, 18:34) co...   Jan 13 2011, 02:47
- - ReAl   const_cast<> цяця-ляля, но до тех пор, пока ...   Jan 12 2011, 17:23
- - Oldring   Цитата(ReAl @ Jan 12 2011, 23:23) А когда...   Jan 13 2011, 06:54


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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 05:41
Рейтинг@Mail.ru


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