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

 
 
> ОЗУ у f1611
CAHTA_1939
сообщение Nov 1 2007, 20:46
Сообщение #1


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

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



не подскажете, как можно узнать, сколько программа ест ОЗУ?
а то я сейчас пишу на этом контроллере с граф. индикатором менюшку, и у меня такое ошушение что оператива вот вот кончится.... иногда заливаться не хочет.

Сообщение отредактировал CAHTA_1939 - Nov 1 2007, 20:55
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Nov 2 2007, 01:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



В плюсах я к сожалению не силен sad.gif Так, помаленьку в plain C кодирую. Так что пусть кто-то другой, более сведующий в C++ совет даст.
Go to the top of the page
 
+Quote Post
CAHTA_1939
сообщение Nov 2 2007, 01:55
Сообщение #3


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

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



эм... да я на С пишу. сам удивился при чем там класс , если я структуру юзаю
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 2 2007, 08:20
Сообщение #4


Гуру
******

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



Цитата(CAHTA_1939 @ Nov 2 2007, 04:55) *
эм... да я на С пишу. сам удивился при чем там класс , если я структуру юзаю
Возможно, у вас в настройках компилятора включен режим С++. Но это не страшно. Смотрите внимательно:
Код
struct _window_   {
                   const  struct sMENU_WIN _win[20];
                  };
Вы объявили новый тип _window_, в котором есть константный член. С точки зрения С, константный - это значит "только для чтения". В то время как сами структуры типа _window_ могут быть объявлены как неконстантные. Компилятор предупреждает: а как, собственно, вы будете инициализировать члены read-only? Вам надо объявить члены без const, а const указать именно для каждой объявляемой переменной типа _window_:
Код
struct _window_  
{
    sMENU_WIN _win[20];
};
_window_ const Win1 =
{
    {.....},  // _win[0]
    {     },  // _win[1]
};
В режиме С вы должны получить примерно аналогичные предупреждения. И еще - если вы пишете на С, лучше использовать запись typedef struct { fields } my_type; в С++ - или такую же с typedef или ее эквивалент struct mytype { fields };, таким образом вы заводите новый самостоятельный тип, и в дальнейшем вам достаточно писать просто mytype variable, вместо struct mytype variable.

Еще раз про const: стандарт С про флеш-память не знает. Его задача - положить константные данные в сегмент констант. На архитектурах с одним адресным пространством (MSP, ARM) можно разместить сегмент констант непосредственно по адресам флеш. Для архитектур с разными адресными пространствами (AVR) приходится вводить дополнительные расширения (__flash), чтобы указать что данные располагаются во флеш и что для доступа к ним нужны другие ассемблерные команды.
для MSP имеем:
обычная глобальная переменная (int i;)- расположена в ОЗУ, ее можно читать и писать. Компилятор группирует все такие переменные в сегмент DATA_Z и перед запуском main() одним циклом записывает 0x00 во все ячейки сегмента. Таким образом все глобальные переменные оказываются обнулены.
обычная глобальная переменная, объявленная с квалификатором __no_init (__no_init int i;)- расположена в ОЗУ, ее можно читать и писать. Компилятор группирует все такие переменные в сегмент DATA_N. Этот сегмент перед стартом main() не трогается.
обычная глобальная переменная, инициализированная значением ( int i = 0; )- расположена в ОЗУ, ее можно читать и писать. Компилятор группирует все такие переменные в сегмент DATA_I. Все начальные значения компилятор группирует в том же порядке в сегмент DATA_ID. Перед запуском main(), одним циклом содержимое DATA_ID копируется в DATA_I. Таким образом сразу инициализируются все инициализированные глобальные переменные. Именно такая переменная у вас получится, если вы объявите неконстантную структуру, у которой часть членов будет константной.
глобальная константная проинициализированная переменная ( int const i = 0; ) - ее можно только читать. Все такие переменные компилятор группирует в сегмент DATA_C. Для MSP вы можете в файле линкера указать размещение этого сегмента во флеш (и так и сделано в файлах, которые идут с компилятором). Для AVR сегмент DATA_C будет расположен в ОЗУ, при старте в него будут скопированы из флеш начальные значения (как и в варианте с парой DATA_I, DATA_ID) и компилятор будет следить, чтобы вы не попытались изменить эти значения. Если на AVR вы хотите, чтобы данные располагались только во флеш и брались сразу оттуда - надо использовать расширение компилятора - ключевое слово __flash. Сделано так потому, что согласно стандарту вы можете указателю на константный тип присвоить указатель на неконстантный такой же тип, и это будет говорить лишь о том, что данные через этот указатель нельзя изменить.
Несколько сумбурно, но, надеюсь, понятно.


--------------------
На любой вопрос даю любой ответ
"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
CAHTA_1939
сообщение Nov 2 2007, 22:33
Сообщение #5


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

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



нее. это издевательство. пишу const перед переменной. а из логов всеравно видно, что в озу пишется.
DATA memory увеличивается а CONST остается неизменной.
и потом. у мен после DATA memory написанно (+ 19 absolute ) , это что такое?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- CAHTA_1939   ОЗУ у f1611   Nov 1 2007, 20:46
- - rezident   Какой компилятор используете? Если IAR, то он резу...   Nov 1 2007, 21:53
|- - CAHTA_1939   прошу прошения. забыл написать. да, я использую IA...   Nov 1 2007, 22:04
|- - Сергей Борщ   Цитата(CAHTA_1939 @ Nov 2 2007, 01:04) не...   Nov 1 2007, 22:29
|- - rezident   Цитата(CAHTA_1939 @ Nov 2 2007, 03:04) не...   Nov 1 2007, 23:44
|- - CAHTA_1939   спасибо за информацию. но всеже у меня просто данн...   Nov 2 2007, 00:01
|- - rezident   Цитата(CAHTA_1939 @ Nov 2 2007, 05:01) сп...   Nov 2 2007, 00:29
|- - CAHTA_1939   почитал про _low_level_init ... занятно. но вот пр...   Nov 2 2007, 01:33
- - CAHTA_1939   и вот еше. у меня есть большая структура... точне ...   Nov 1 2007, 23:26
- - SSerge   Посмотрите установки в IDE Tools->Options-...   Nov 1 2007, 23:26
|- - Сергей Борщ   Цитата(CAHTA_1939 @ Nov 3 2007, 00:33) не...   Nov 3 2007, 11:16
- - CAHTA_1939   помогите. возникла проблема при выделении динамиче...   Nov 7 2007, 13:10
- - Сергей Борщ   Цитата(CAHTA_1939 @ Nov 7 2007, 15:10) пр...   Nov 7 2007, 14:34
- - CAHTA_1939   угу, уже посмотрел. там по стандаргу выделенно что...   Nov 7 2007, 14:42
- - Сергей Борщ   Цитата(CAHTA_1939 @ Nov 7 2007, 16:42) уг...   Nov 7 2007, 17:09


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

 


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


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