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

 
 
> Экономия RAM.
Jenya7
сообщение Mar 8 2016, 07:38
Сообщение #1


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Камень STM32f107VC. получил неприятный сюрприз – закончился RAM. а я еще даже не начал писать.
в связи с этим хотел задать несколько вопросов.
1. если я объявил глобальную переменную uint8_t под нее все равно выделиться регистр?
2. если я засунул стринг или какую нибудь переменную во флэш - при обращении к нему он копируется в RAM или я обращаюсь в область text?
3. может есть какие нибудь трюки позволяющие экономить RAM?

Сообщение отредактировал Jenya7 - Mar 8 2016, 11:13
Go to the top of the page
 
+Quote Post
6 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 84)
aaarrr
сообщение Mar 8 2016, 11:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Mar 8 2016, 10:38) *
1. если я объявил глобальную переменную uint8_t под нее все равно выделиться регистр?

Какой же регистр для глобальной переменной? Если речь о количестве выделенной памяти, то для такой переменной оно составит 1 байт.

Цитата(Jenya7 @ Mar 8 2016, 10:38) *
2. если я засунул стринг или какую нибудь переменную во флэш - при обращении к нему он копируется в RAM или я обращаюсь в область text?

Нет, ничего никуда копироваться не будет. Если есть сомнения, проконтролируйте размещение по map-файлу.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 11:46
Сообщение #3


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(aaarrr @ Mar 8 2016, 17:19) *
Какой же регистр для глобальной переменной? Если речь о количестве выделенной памяти, то для такой переменной оно составит 1 байт.


Нет, ничего никуда копироваться не будет. Если есть сомнения, проконтролируйте размещение по map-файлу.

я понял. а я тут все глобальные переменные определяю uint32_t - вычитал что операции с ними происходят быстрее.

а если я создал в глобальной структуре переменную uint8_t? без выравниания она займет 4 байта?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 8 2016, 11:49
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Jenya7 @ Mar 8 2016, 09:38) *
3. может есть какие нибудь трюки позволяющие экономить RAM?


Стеки ужать.
Обнулить память для HEAP.
Перенести структуры в юнионы.
Заменить printf и sprintf на свои версии.
Укоротить циклические буфера.
Заменить в операционке вытеснющие задачи на кооперативные.
Использовать драйвера интерфейсов не одновременно, а с разделением во времени.
...

Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 11:51
Сообщение #5


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(AlexandrY @ Mar 8 2016, 17:49) *
Перенести структуры в юнионы.

а если мне нужно хранить несколько членов одновременно?

Цитата(AlexandrY @ Mar 8 2016, 17:49) *
Использовать драйвера интерфейсов не одновременно, а с разделением во времени.

а как это экономит RAM?
так вроде и так они разделены по времени.

Сообщение отредактировал Jenya7 - Mar 8 2016, 11:54
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 12:20
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Jenya7 @ Mar 8 2016, 14:46) *
а если я создал в глобальной структуре переменную uint8_t? без выравниания она займет 4 байта?

Зависит от окружения:
Код
struct
{
     uint8_t    v1;
     uint32_t   v2;
}

В этом случае v1 займет 4 байта.

Код
struct
{
     uint8_t    v1;
     uint8_t    v2;
     uint16_t   v3;
}

А в этом - 1 байт.

Но как-то сомнительно, чтобы память была выбрана одиночными переменными.
Основные потребители выше перечислены: heap, стеки, буферы.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 12:34
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Mar 8 2016, 13:19) *
Какой же регистр для глобальной переменной? Если речь о количестве выделенной памяти, то для такой переменной оно составит 1 байт.

Вообще-то 4 байта на этой платформе. Если не паковать в структуры.


QUOTE (aaarrr @ Mar 8 2016, 14:20) *
Зависит от окружения:
CODE
struct
{
     uint8_t    v1;
     uint32_t   v2;
}

В этом случае v1 займет 4 байта.

CODE
struct
{
     uint8_t    v1;
     uint8_t    v2;
     uint16_t   v3;
}

А в этом - 1 байт.

Всегда по 4, если так или иначе не указывать компилятороу индивидуальные правила паковки, но и в этом случае структура без паковки будет кратна 4 байтам.




QUOTE (Jenya7 @ Mar 8 2016, 13:51) *
а если мне нужно хранить несколько членов одновременно?

А если нет?


QUOTE (AlexandrY @ Mar 8 2016, 13:49) *
Стеки ужать.

Обязательно.
QUOTE
Обнулить память для HEAP.

Ну так уж и обнулить, а если она нужна? А вот вместо тупого выделения статического куска, отдавать Heap всю оставшуюся нераспределеной память,
это дело святое. Общая тенденция прямо противоположная - ИСПОЛЬЗОВАТЬ Heap.
QUOTE
Перенести структуры в юнионы.

Ну не тупо и бездумно, конечно.
QUOTE
Заменить printf и sprintf на свои версии.

Да.
QUOTE
Укоротить циклические буфера.

Лобовой совет, но в общем да.
QUOTE
Заменить в операционке вытеснющие задачи на кооперативные.

Или да, или нет.
QUOTE
Использовать драйвера интерфейсов не одновременно, а с разделением во времени.

Это уже следствие совета структуры в юнионы сложить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 13:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Mar 8 2016, 15:34) *
Вообще-то 4 байта на этой платформе. Если не паковать в структуры.
...
Всегда по 4, если так или иначе не указывать компилятороу индивидуальные правила паковки, но и в этом случае структура без паковки будет кратна 4 байтам.

Компилятор считает иначе.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 13:26
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Mar 8 2016, 15:19) *
Компилятор считает иначе.

Конкретный компилятор руководствуясь конкретными глобальными стратегиями может считать, как ему приказали. В общем случае выравнивение у жестко 32bit платформ идет по границе разрядности.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 13:33
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Mar 8 2016, 16:26) *
Конкретный компилятор руководствуясь конкретными глобальными установками может считать, как ему приказали. В общем случае выравнивение у жестко 32bit платформ идет по границе разрядности.

Без каких-либо специальных установок. Насчет "общего случая" не скажу, но смысла в таком выравнивании не просматривается, так что сомневаюсь.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 8 2016, 13:39
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



А посмотреть листинг и понять куда RAM ушла можно?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 13:40
Сообщение #12


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



и все таки? To byte or not to byte? 1 байт или 4 байта?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 13:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



1 байт. Что легко можно проверить самостоятельно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 13:47
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Mar 8 2016, 15:33) *
но смысла в таком выравнивании не просматривается, так что сомневаюсь.

Смысл прост - если для контролера естественной единицей являются 32 бита, то любые другие размертности приходится преобразовывать, что уже неестественно. Поскольку у конкретного 32bit команда могут быть навороченными - типа взять и сдвинуть за одну команду, то это может уже оказаться при размещении в структуре "беслатно" и в игру вступает оптимизация.
Но по любому, если нужен ГАРАНТИРОВАННЫЙ результат, то только указания компилятору правил паковки, ну а для достижения лучшей оптимизации, это да - все элементы структуры стараться располагать в ней опять-же по границам слов. Ваш второй пример этому условию соответствует.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 13:47
Сообщение #15


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(adnega @ Mar 8 2016, 19:39) *
А посмотреть листинг и понять куда RAM ушла можно?

ну у меня там есть проблемное место - я выделяю массив структур конечного размера. он отжирает 10 кило. если даже я потом создал один элемент все поле занято под массив. просто не хочу пользоваться динамическим выделением памяти. к тому же LWIP отжирает 29 кило.
вот рассматриваю варианты экономии. хранить переменные во флеше - медленный доступ. паковать структуры - тоже удар по быстродействию.

Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 13:55
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Jenya7 @ Mar 8 2016, 15:40) *
и все таки? To byte or not to byte? 1 байт или 4 байта?

Если указать паковать структуру побайтно типа
#pragma pack( push, 1 )
....
#pragma pack( pop )

, то тогда ГАРАНТИРОВАННО 1 бай. Если НЕ указать, то на усмотрение компилятора.

QUOTE (Jenya7 @ Mar 8 2016, 15:47) *
просто не хочу пользоваться динамическим выделением памяти

Тогда не жалуйтесь.
QUOTE
хранить переменные во флеше - медленный доступ.

Переменные во Flash не храняться в принципе sm.gif
QUOTE
паковать структуры - тоже удар по быстродействию.

Не больший, чем использовать без допиливания по месту всяких LwIP запимающих по 29K.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 14:01
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Mar 8 2016, 16:47) *
Смысл прост - если для контролера естественной единицей являются 32 бита, то любые другие размертности приходится преобразовывать, что уже неестественно. Поскольку у конкретного 32bit команда могут быть навороченными - типа взять и сдвинуть за одну команду, то это может уже оказаться при размещении в структуре "беслатно" и в игру вступает оптимизация.

Мы, кажется, обсуждали вполне конкретную платформу, не испытывающую трудностей при доступе к переменным с малой разрядностью, так что эти утверждения -
Цитата(zltigo @ Mar 8 2016, 15:34) *
Вообще-то 4 байта на этой платформе. Если не паковать в структуры.
...
Всегда по 4, если так или иначе не указывать компилятороу индивидуальные правила паковки, но и в этом случае структура без паковки будет кратна 4 байтам.

- не соответствуют действительности.

Цитата(zltigo @ Mar 8 2016, 16:47) *
Но по любому, если нужен ГАРАНТИРОВАННЫЙ результат, то только указания компилятору правил паковки, ну а для достижения лучшей оптимизации, это да - все элементы структуры стараться располагать в ней опять-же по границам слов. Ваш второй пример этому условию соответствует.

С этим никто не спорит, но специально добавлять padding там, где в нем ни малейшей нужды нет, компилятор не станет.

Цитата(Jenya7 @ Mar 8 2016, 16:47) *
просто не хочу пользоваться динамическим выделением памяти.

Напрасно не хотите.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 14:08
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Mar 8 2016, 16:01) *
Мы, кажется, обсуждали вполне конкретную платформу, не испытывающую трудностей при доступе к переменным с малой разрядностью, так что эти утверждения -
- не соответствуют действительности.

Трудности таки ЕСТЬ, иначе и в первом Вашем примере все было-бы однобайтовым. Во втором "хорошем" примере Ваш конкретный компилятор просто смог соптимизировать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 14:23
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Mar 8 2016, 17:08) *
Трудности таки ЕСТЬ, иначе и в первом Вашем примере все было-бы однобайтовым.

Это другого рода трудности, возникающие как раз при доступе к "естественной" 32-битной переменной,
а не гипотетические трудности, возникающие при доступе к переменной с разрядностью менее естественной,
и отсутствующие для данной платформы.

Цитата(zltigo @ Mar 8 2016, 17:08) *
Во втором "хорошем" примере Ваш конкретный компилятор просто смог соптимизировать.

Так сделает любой вменяемый компилятор.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 8 2016, 14:31
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(aaarrr @ Mar 8 2016, 15:20) *
Зависит от окружения:
Код
struct
{
     uint8_t    v1;
     uint32_t   v2;
}

В этом случае v1 займет 4 байта.

Неужели?
v1 = 256;
v2 = v1;
Сколько будет в v2?
Я думаю 0.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 8 2016, 14:33
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(adnega @ Mar 8 2016, 17:31) *
Я думаю 0.

Я тоже так думаю, и что?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 14:37
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Mar 8 2016, 16:23) *
Это другого рода трудности, возникающие как раз при доступе к "естественной" 32-битной переменной,

Естественные 32bit переменные являются естественными не только по причине разрядности, сколько по причине их расположения по адресам кратрым их разрядности. Соответственно для любой переменной малой разрядности и ее расположение по адресу кратному разрядности вызывает минимум или вообще не вызывает проблем.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 8 2016, 14:48
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Есть версия, что v1 займет 1 байт (sizeof(v1) = 1), но после v1 будет размещено 3 неиспользуемых байта.
sizeof для такой структуры будет равен 8.

Нужно ли обсуждать такой момент в доступе к невыровненным данным, как сборка многобайтового числа побайтово?
Как известно CM3 может обращаться к невыровненным данным за счет штрафных тактов без генерации исключения.
А, например, CM0 не допускает обращения к невыровненным данным с генерацией исключения.
В этом случае собирать 32-битное невыровненное число нужно по байтам. А это лишние такты и память в случае CM3.

Можно ли компилятору принудительно разрешить или запретить сборку побайтово? Видимо, ответ: RTFM на компилятор.

Второй момент (все наоборот). Есть память с 32/16-битным доступом (например, батареечная память в STM32).
Можно ли в ней разместить структуру элементов с меньшим размером, но чтоб доступ был 32/16-битным?
Как это указать компилятору и можно ли сделать в принципе?
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 8 2016, 15:16
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Даже прочитать всё это сложно! не говоря уже о том что бы понять!
Пипец какой!!!
Для программиста на ассемблере это всё просто дико!
Чем люди занимаются вместо алгоритма blink.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 15:39
Сообщение #25


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(zombi @ Mar 8 2016, 21:16) *
Даже прочитать всё это сложно! не говоря уже о том что бы понять!
Пипец какой!!!
Для программиста на ассемблере это всё просто дико!
Чем люди занимаются вместо алгоритма blink.gif

как говорил Форест Гамп - алгоритм алгоритму рознь.


товарищи а вы как поступаете?
как выделяете глобальные переменные и члены глобальных структур?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 16:07
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Jenya7 @ Mar 8 2016, 17:39) *
как выделяете глобальные переменные и члены глобальных структур?

Какая разница КАК? Как не выделяй, если они НУЖНЫ, то они нужны. В Вашем случае, если хоть как то попытаться понять написанное, одна из проблем растраты памяти, это ее выделение оптом под всякие структуры, хоть используемые, хоть нет. На такие действия ответ один - НЕ выделяйте. А Вы какого ожидали? Если общие советы, то тут уже тоже перечислены: http://electronix.ru/forum/index.php?showt...t&p=1409464


QUOTE (adnega @ Mar 8 2016, 16:48) *
Можно ли в ней разместить структуру элементов с меньшим размером, но чтоб доступ был 32/16-битным?
Как это указать компилятору и можно ли сделать в принципе?

Играться с паковкой и ручным добавлением padding.


QUOTE (zombi @ Mar 8 2016, 17:16) *
Чем люди занимаются вместо алгоритма blink.gif

Очевидно, что рукопашной возней с битами и байтами в низкоуровневых языках.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 16:16
Сообщение #27


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(zltigo @ Mar 8 2016, 22:07) *
Какая разница КАК? Как не выделяй, если они НУЖНЫ, то они нужны. В Вашем случае, если хоть как то попытаться понять написанное, одна из проблем растраты памяти, это ее выделение оптом под всякие структуры, хоть используемые, хоть нет. На такие действия ответ один - НЕ выделяйте. А Вы какого ожидали? Если общие советы, то тут уже тоже перечислены: http://electronix.ru/forum/index.php?showt...t&p=1409464



Играться с паковкой и ручным добавлением padding.



Очевидно, что рукопашной возней с битами и байтами в низкоуровневых языках.

ну что значит - как не выделяй. можно создать переменную uint8_t а можно uint32_t.
Перенести структуры в юнионы. - я не понял как это возможно.
Использовать драйвера интерфейсов не одновременно, а с разделением во времени. - то же непонятно. (мне).
я создаю массив структур с запасом не потому что я дурак (хотя это тоже) а потому что я не знаю сколько элементов понадобиться пользователю.
представьте адресную книжку - появился новый друг - открыл новую запись.

Сообщение отредактировал Jenya7 - Mar 8 2016, 16:18
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 8 2016, 16:31
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(zltigo @ Mar 8 2016, 19:07) *
Очевидно, что рукопашной возней с битами и байтами в низкоуровневых языках.

В низкоуровневых языках я как раз этой фигнёй и не занимаюсь.
Выделил память под переменную, знаю какой она размерности и знаю как к ней обращаться.
В отличие от СИшников !
Которые думают-гадают как там за них компилятор всё порешает и поразмещает biggrin.gif куда и как повыравнивает biggrin.gif

Цитата(Jenya7 @ Mar 8 2016, 19:16) *
я создаю массив структур с запасом не потому что я дурак (хотя это тоже) а потому что я не знаю сколько элементов понадобиться пользователю.
представьте адресную книжку - появился новый друг - открыл новую запись.

Нет, так нельзя.
Представьте себе сто появился миллиардный пользователь и открыл новую запись а размер этой записи несколько гигабайт.
Вы предусматриваете такую возможность?
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 8 2016, 16:45
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Mar 8 2016, 19:16) *
представьте адресную книжку - появился новый друг - открыл новую запись.

Адресную книжку нужно хранить в энергонезависимой памяти, иначе сброс МК приведет к ее потере.
Доступ к адресной книжке может быть довольно медленным, т.к. пользователь во много раз менее быстро способен воспринимать информацию.
Т.е. адресную книжку можно и нужно хранить во flash.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Mar 8 2016, 17:00
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Jenya7 @ Mar 8 2016, 22:16) *
ну что значит - как не выделяй. можно создать переменную uint8_t а можно uint32_t.

Выложите свой map-файл, тогда все всё увидят и объяснят. А то получится безрезультатный флуд еще на 2 страницы.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 17:15
Сообщение #31


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(adnega @ Mar 8 2016, 22:45) *
Адресную книжку нужно хранить в энергонезависимой памяти, иначе сброс МК приведет к ее потере.
Доступ к адресной книжке может быть довольно медленным, т.к. пользователь во много раз менее быстро способен воспринимать информацию.
Т.е. адресную книжку можно и нужно хранить во flash.

у меня не совсем адресная книжка но принцип тот же. я загружаю с внешнего носителя до десяти контактов. работаю с ними. если был рисет - они снова загрузяться с носителя.
я думал считывать контакты с носителя поэлементно и работать с ними - но это время - считывание, парсинг. так я только один раз это сделал на стартапе.
Цитата(HardEgor @ Mar 8 2016, 23:00) *
Выложите свой map-файл, тогда все всё увидят и объяснят. А то получится безрезультатный флуд еще на 2 страницы.

такой вот он мап-файл.

Неудачная загрузка. Вам запрещено загружать такой тип файлов


а что собственно флудить. либо выделяем все глобальные переменные нужного размера либо все uint32_t, давайте решим наконец. sm.gif



Сообщение отредактировал Jenya7 - Mar 8 2016, 17:31
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 8 2016, 17:32
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Оптимизировать нужно там, где наибольший расход.
29К для TCP-стека это что-то уж слишком много. Поменяйте TCP-стек на более экономный.
Для TCP-стека работающего поверх Ethernet-уровня, вполне достаточно очереди приёма в 3-5 ethernet-кадров и очереди передачи в 2-3 ethernet-кадров.
Плюс - несколько десятков байт на информацию о состоянии сокетов и прочие переменные. Всё в сумме это будет около 10кБ (или меньше в зависимости от размера MTU для Ethernet и кол-ва кадров).
Вся обработка всех уровней Ethernet-IP-TCP/UDP и т.п. - на колбэках на этих же кадрах без копирований.

И абсолютно не соглашусь насчёт HEAP - стандартная HEAP в embedded - это зло. К тому-же совершенно не нужна.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 18:32
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (zombi @ Mar 8 2016, 18:31) *
В низкоуровневых языках я как раз этой фигнёй и не занимаюсь.
Выделил память под переменную, знаю какой она размерности и знаю как к ней обращаться.
В отличие от СИшников !

Это Вы по собственной дурости и незнанию обвиняете всех сишников огульно в неведомых грехах. А чем Вы занимаетесь в ассемблере и чем я занимался годы и частично в порядке сопровождения продолжаю в ассемблере заниматься, я знаю. Поскольку РАБОТАЮ в одном ассеблере виртуозно, в паре - хорошо, и в десятке терпимо. В отличие от Вас, который и в одном высокоуровневом языке ни уха ни рыла sad.gif.


QUOTE (Jenya7 @ Mar 8 2016, 18:16) *
я создаю массив структур с запасом не потому что я дурак (хотя это тоже) а потому что я не знаю сколько элементов понадобиться пользователю.

Я хочу 22 миллиарда. Можно? Если НЕ знаете, то почему решили назвать конкретное максимальное число и забить его в качестве количества стуктур?
Что Вы вообще делаете? Что это за стуктуры в непонятных количествах?



QUOTE (jcxz @ Mar 8 2016, 19:32) *
И абсолютно не соглашусь насчёт HEAP - стандартная HEAP в embedded - это зло. К тому-же совершенно не нужна.

Слова "стандартная" это непонятно о чем, по причне того, что стандарта-то и нет. Ну и уж тем более не зло, если не пугаться и уметь хоть чуть-чуть готовить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 8 2016, 18:46
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Mar 9 2016, 00:32) *
Слова "стандартная" это непонятно о чем, по причне того, что стандарта-то и нет. Ну и уж тем более не зло, если не пугаться и уметь хоть чуть-чуть готовить.

Под "стандартной" я имел в виду имеющую стандартный malloc-интерфейс, позволяющий побайтное выделение кусков разного размера, приводящее к фрагментации и, соответственно, перерасходу памяти. А здесь как раз тема экономии ОЗУ...
Ещё можно оправдать выделение памяти кусками одинаковой величины (без фрагментации).
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 8 2016, 18:53
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(zltigo @ Mar 8 2016, 21:32) *
Поскольку РАБОТАЮ в одном ассеблере виртуозно, в паре - хорошо, и в десятке терпимо.

Мда.. дядя.. Сразу видно что такое понятие как скромность вам не ведомо.
Виртуоз biggrin.gif biggrin.gif biggrin.gif многостаночник

Цитата(zltigo @ Mar 8 2016, 21:32) *
В отличие от Вас, который и в одном высокоуровневом языке ни уха ни рыла sad.gif.

Еще и тЭлЫпат ...

Искренне жаль вас.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 8 2016, 19:15
Сообщение #36


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(jcxz @ Mar 8 2016, 22:32) *
Оптимизировать нужно там, где наибольший расход.
29К для TCP-стека это что-то уж слишком много. Поменяйте TCP-стек на более экономный.
Для TCP-стека работающего поверх Ethernet-уровня, вполне достаточно очереди приёма в 3-5 ethernet-кадров и очереди передачи в 2-3 ethernet-кадров.
Плюс - несколько десятков байт на информацию о состоянии сокетов и прочие переменные. Всё в сумме это будет около 10кБ (или меньше в зависимости от размера MTU для Ethernet и кол-ва кадров).
Вся обработка всех уровней Ethernet-IP-TCP/UDP и т.п. - на колбэках на этих же кадрах без копирований.

И абсолютно не соглашусь насчёт HEAP - стандартная HEAP в embedded - это зло. К тому-же совершенно не нужна.

до стэка еще руки не дотянулись. я с LWIP никогда не работал. менять вобщем то не на что. подходящей альтернативы ему нет, я имею в виду соотношение функциональность-вес. так что процесс будет трудный и медленный. sm.gif

Цитата(zltigo @ Mar 8 2016, 23:32) *
Я хочу 22 миллиарда. Можно? Если НЕ знаете, то почему решили назвать конкретное максимальное число и забить его в качестве количества стуктур?
Что Вы вообще делаете? Что это за стуктуры в непонятных количествах?

я выделил 10 элементов. пока это вполне разумно. скажем так - лайт версия. тот же компайлер в котором я работаю - лайт версия компилит 32 кило а не 22 милиарда.
структура это пользовательская задача. malloc тут не подходит - пользователь начнет создавать/затирать элементы - хана куче. sm.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2016, 20:33
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (zombi @ Mar 8 2016, 20:53) *
Еще и тЭлЫпат ...

Чего нет, того нет. Просто читать умею и написаное Вами, даже только в этой теиме, совершенно все о Вашем уровне говорит с предельной ясностью.




QUOTE (Jenya7 @ Mar 8 2016, 21:15) *
структура это пользовательская задача. malloc тут не подходит - пользователь начнет создвать/затирать элементы - хана куче. sm.gif

C чего бы это, если элементы, например, одинаковые, то любому даже предельно убогому хана не грозит. Использование какого-то malloc так же совершенно не обязательно - менеджер может быть даже узкоспециализированый под уникальные объекты. Тут ведь дело в использовании самого принципа динамического использования памяти.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 8 2016, 23:23
Сообщение #38


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Ставьте 16МБ SDRAM и не придется париться :-)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 9 2016, 07:27
Сообщение #39


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ar__systems @ Mar 9 2016, 05:23) *
Ставьте 16МБ SDRAM и не придется париться :-)

идея не плохая но цена высокая. а как скорость доступа?

нет. не пойдет. нет у меня столько ног для него.

Цитата(zltigo @ Mar 9 2016, 02:33) *
C чего бы это, если элементы, например, одинаковые, то любому даже предельно убогому хана не грозит. Использование какого-то malloc так же совершенно не обязательно - менеджер может быть даже узкоспециализированый под уникальные объекты. Тут ведь дело в использовании самого принципа динамического использования памяти.

а я могу создать новый объект и положить его по адресу который я указал?

Сообщение отредактировал Jenya7 - Mar 9 2016, 07:50
Go to the top of the page
 
+Quote Post
amaora
сообщение Mar 9 2016, 12:24
Сообщение #40


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



В динамическом выделении будет смысл если, освободившееся место будет так же динамически использоваться для чего-то другого. Это уже может означать, что блоки будут разных размеров. И может понадобится определить правила по которым будет ограничиваться использование памяти для разных целей, если не хотите, чтобы одна задача (не поток выполнения, а в боле широком смысле) съела всю память. Очень непросто может получится.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 9 2016, 13:15
Сообщение #41


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



я вот думаю а что если использовать внешнюю память или SD карту.
С SD картой удобно работать но считывание и парсинг займет много времени.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 9 2016, 14:51
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Jenya7 @ Mar 9 2016, 09:27) *
а я могу создать новый объект и положить его по адресу который я указал?

Не понял зачем? То, что Вы сейчас восжелали есть принципиальная глупость. Если есть какой-то адрес, по по которому хочется что-то положить, то это значит, что сам "объект", пусть даже в качестве куска памяти УЖЕ СУЩЕСТВУЕТ, и "создать новый обьект" по этому адресу логичеси невозможно.


QUOTE (amaora @ Mar 9 2016, 14:24) *
Это уже может означать, что блоки будут разных размеров.

Блоки БУДУТ таких размеров, каких пожелаете.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 9 2016, 15:24
Сообщение #43


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(zltigo @ Mar 9 2016, 20:51) *
Не понял зачем? То, что Вы сейчас восжелали есть принципиальная глупость. Если есть какой-то адрес, по по которому хочется что-то положить, то это значит, что сам "объект", пусть даже в качестве куска памяти УЖЕ СУЩЕСТВУЕТ, и "создать новый обьект" по этому адресу логичеси невозможно.

как же я буду делать свой менеджер памяти если не знаю по каким адресам размещены элементы?

Сообщение отредактировал Jenya7 - Mar 9 2016, 16:37
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 9 2016, 17:17
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Jenya7 @ Mar 9 2016, 17:24) *
как же я буду делать свой менеджер памяти если не знаю по каким адресам размещены элементы?

Что то дикие у Вас представления о менеджерах памяти и программировании sad.gif - "по каким адресам" этим менеджер заниматеся - Вам то зачем что то знать?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 9 2016, 23:14
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(zltigo @ Mar 9 2016, 20:17) *
Что то дикие у Вас представления о менеджерах памяти и программировании sad.gif - "по каким адресам" этим менеджер заниматеся - Вам то зачем что то знать?

Ну так рассказали бы дикарям про менеджеры памяти которые способны памяти добавить при условии отсутствия свопирования.
Учитывая что вся физическая память используется и в любой момент времени может понадобиться доступ к ней в реальном времени.
А не морочили людям голову!
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 06:29
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 10 2016, 02:14) *
Ну так рассказали бы дикарям

А дикари научись различать "виртуальную память" и "кучу"?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 10 2016, 07:21
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (adnega @ Mar 10 2016, 08:29) *
А дикари научись различать "виртуальную память" и "кучу"?

Увы, нет sad.gif, только "научились" слова, смысла которых не понимают, из "интеренету" в изобилии таскать.



QUOTE (zombi @ Mar 10 2016, 01:14) *
А не морочили людям голову!

Пытаетесь морочить голову именно Вы. Тема называется "Экономия RAM" а не извлечение ее из эфира. Один их эффективых путей экономии это многократное и повторное использование ресурсов. Для этого можно использовать менеджеры памяти, или в чистом виде, или узкспециализированые решения постороенные на том же принципе динамического выделения памяти.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 07:32
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zltigo @ Mar 10 2016, 10:21) *
Один их эффективых путей экономии это многократное и повторное использование ресурсов. Для этого можно использовать менеджеры памяти, или в чистом виде, или узкспециализированые решения постороенные на том же принципе динамического выделения памяти.

Лет 10 назад я разрабатывал устройство на AVR + asm.
ОЗУ в наличии было мало, и для работы со статическим распределением всем бы не хватило.
Сделал так: выделил большой кусок, в котором хранил таблицу при штатной работе.
А в режиме обновления ПО, когда штатная работа прекращалась и таблицы были не нужны - использовал
этот кусок для буфера связи с внешним миром и обновления ПО.
Все работало, но про параллельное использование памяти нужно было помнить.
На C с динамической памятью все куда прозрачнее, хотя смысл тот же - разделяемый по времени ресурс в виде ОЗУ.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Mar 10 2016, 07:46
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Jenya7 @ Mar 8 2016, 23:15) *
такой вот он мап-файл.

Неудачная загрузка. Вам запрещено загружать такой тип файлов

И что дальше?
Либо вы не тот файл пытаетесь выложить, либо просто переименуйте .map файл в .txt и выкладывайте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 10 2016, 07:46
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (adnega @ Mar 10 2016, 09:32) *
Лет 10 назад...

Буквально две недели назад занимался рефакторингом софта двух давноооо выпускаемых железок одна на PIC, другая на M8C c целью свести по максимуму все функционально различающиеся варианты исполнения в единые фирмвари, дабы по минимуму отвлекаться на дальнейшее сопровождение. Вот уж я тут памяти поискал и (в основном) порасшаривал по полной программе sm.gif до расплавления мозга sad.gif. Но упаковался и еще осталость чуток.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 07:58
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zltigo @ Mar 10 2016, 10:46) *
Но упаковался и еще осталость чуток.

Видимо, для эффективной экономии ОЗУ нужно не только знать размеры переменных, но и знать архитектуру своего ПО.
Хотя сейчас напрягаться не принято и проще поставить внешнюю SDRAM и/или выбрать МК с большим количеством набортного ОЗУ.
В приложениях с таким функционалом, что приходится использовать TCP/IP, обсуждение размера переменной (1 или 4 байта)
вызывает у меня определенные подозрения (что что-то не так).
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 10 2016, 08:01
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(zltigo @ Mar 10 2016, 11:21) *
Один их эффективых путей экономии это многократное и повторное использование ресурсов.

Америку открыли biggrin.gif
Главное обеспечить невозможность одновременного выполнения процессов использующих эту общую область.
Цитата(zltigo @ Mar 10 2016, 11:21) *
Для этого можно использовать менеджеры памяти

И если такой возможности нет то и никакой мыныджер не поможет.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 08:19
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 10 2016, 11:01) *
Америку открыли biggrin.gif
Главное обеспечить невозможность одновременного выполнения процессов использующих эту общую область.

Вроде, все не так.
Никакой блокировки процессов нет. Процесс просит память, менеджер может выделить память или отказать в выделении.
С выделенной памятью процесс может делать все что угодно, и другие процессы тут вообще никакой роли не играют.
Отказ в выделении памяти процессу нужно как-то обработать.
Цитата(zombi @ Mar 10 2016, 11:01) *
И если такой возможности нет то и никакой мыныджер не поможет.

Обсуждается ситуация, когда такая возможность есть.
Может, вам стоит побольше вдумчивее читать и поменьше язвительно писать?
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 10 2016, 09:15
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(adnega @ Mar 10 2016, 11:19) *
Обсуждается ситуация, когда такая возможность есть.

Это Вы сами так решили или подсказал кто?
Цитата(adnega @ Mar 10 2016, 11:19) *
Может, вам стоит побольше вдумчивее читать и поменьше язвительно писать?

Может.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 09:19
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 10 2016, 12:15) *
Это Вы сами так решили или подсказал кто?

ТС в сообщении 15.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 10 2016, 10:17
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (adnega @ Mar 10 2016, 10:19) *
Обсуждается ситуация, когда такая возможность есть.

Навязываемое Вами "обсуждение", откуда взять память, которой нет, абсолютно бессмысленно. Посему речь идет о памяти, котороая есть и которую надо пытаться использовать в разные моменты времени для разных целей. Если такой возможности нет, что практически НЕВЕРОЯТНО, или лениво думать как такое обеспечить, то и разговоров нет. Только Ваш треп ни о чем.



QUOTE (adnega @ Mar 10 2016, 09:58) *
Видимо, для эффективной экономии ОЗУ нужно не только знать размеры переменных, но и знать архитектуру своего ПО.

Для вытягивания последних байтов надо знать уже все sm.gif. Но это уже на самом деле большая редкость. Я вот тоже на в работе о которой писал, тоже уже для M8C контроллера последние байты вытягивал, вытянул, плюнул, переделал принципиально, и стало 64 свободных байта. Ну придет серверу отказ на исполнение одной редкой команды, если звезды не так лягут, ну переспросит.
QUOTE
В приложениях с таким функционалом, что приходится использовать TCP/IP, обсуждение размера переменной (1 или 4 байта)
вызывает у меня определенные подозрения (что что-то не так).

Одиночной переменной - несомненно, но бывают и солидные массивы данных, где уже счет идет на тысячи таких переменных за каждым из тысяч процессов.
При этом слово тысячи не должно особо пугать - на одном из проектов еще на i8085 у меня в свое время было 256 процессов. На первом из опробованных ARM LPC2114 - 1280 процессов. В обоих случаях прикол был в том, что процессы находились в разных состояниях и в статических состояниях обходились достаточно небольшим количеством данных. На переходных режимах процессам добавлялся блок памяти для обслуживания "развития" процесса.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Mar 10 2016, 11:44
Сообщение #57


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(Jenya7 @ Mar 9 2016, 10:27) *
а я могу создать новый объект и положить его по адресу который я указал?

Можно, называется размещающий конструктор. Но подумайте дважды т.к. кол-во потенциальных граблей увеличится в геометрической прогрессии.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 10 2016, 21:37
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(zltigo @ Mar 10 2016, 14:17) *
Только Ваш треп ни о чем.

Интересно помог ли ТС ваш трёп память освободить?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 10 2016, 21:41
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (zombi @ Mar 10 2016, 23:37) *
Интересно помог ли ТС ваш трёп память освободить?

Поживем-увидим. Но то, что я точно знаю, что Вам уже ничего не поможет sad.gif.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 10 2016, 22:07
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(zltigo @ Mar 11 2016, 01:41) *
Но то, что я точно знаю, что Вам уже ничего не поможет sad.gif.

Я в помощи не нуждаюсь , а уж в помощи такого хвастуна-виртуоза как вы и подавно.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Mar 13 2016, 07:56
Сообщение #61


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



bb-offtopic.gif
Хахаха у zombi бомбануло прям так не слабо по ходу))))))))))
Не знаю, вроде zltigo дельные вещи говорил...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 13 2016, 10:25
Сообщение #62


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(zombi @ Mar 11 2016, 02:37) *
Интересно помог ли ТС ваш трёп память освободить?

помог. вывод такой. взять камень с бОльшим RAM. дешевле чем внешнюю память ставить.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 13 2016, 11:06
Сообщение #63


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В однозадачном режиме использовать кучу безопасно. Выделил фрагмент, попользовался, освободил. Сложнее, когда задач несколько, и каждая может попросить памяти. Как определить худший случай, когда требуется максимальный объем?
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 13 2016, 11:22
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Jenya7 @ Mar 13 2016, 14:25) *
помог. вывод такой. взять камень с бОльшим RAM. дешевле чем внешнюю память ставить.

Т.е. совет использовать менеджер памяти подтолкнул Вас к решению "взять камень с бОльшим RAM"?
Феерично!
Или это сарказм такой?
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 13 2016, 11:31
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 13 2016, 14:22) *
Т.е. совет использовать менеджер памяти подтолкнул Вас к решению "взять камень с бОльшим RAM"?

Почитайте сообщение №51.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 13 2016, 11:54
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(adnega @ Mar 13 2016, 14:31) *
Почитайте сообщение №51.

Не имею возражений к Вашему сообщению №51

И мне кажется что ТС сам же и ответил на свой вопрос написав:
Цитата(Jenya7 @ Mar 8 2016, 10:38) *
...закончился RAM. а я еще даже не начал писать.

Т.е. на этапе проектирования количество необходимой памяти не определено даже приблизительно.
О каких менеджерах вообще может идти речь? biggrin.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 13 2016, 12:17
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 13 2016, 14:54) *
Т.е. на этапе проектирования количество необходимой памяти не определено даже приблизительно.
О каких менеджерах вообще может идти речь? biggrin.gif

Мы с zltigo привели реальные примеры, когда пересмотр архитектуры позволил "найти" нужное количество памяти.
Если ТС не способен ухитриться (или задача не позволяет), то для него путь - тупо увеличить объем ОЗУ.
Отрицать на вашем месте вообще подход с использованием менеджеров памяти - не профессионально.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 13 2016, 12:20
Сообщение #68


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ViKo @ Mar 13 2016, 17:06) *
В однозадачном режиме использовать кучу безопасно. Выделил фрагмент, попользовался, освободил. Сложнее, когда задач несколько, и каждая может попросить памяти. Как определить худший случай, когда требуется максимальный объем?

тут нужно решать концептуально. есть 10 задач. либо загрузить их в RAM и проходить итерацией , либо брать по одной - загрузил-освободил - тогда можно и с malloc/free. но во втором случае возникает вопрос - где держать задачи.

хорошо. я написал код для PLC. В Ladder Diagram или мнемоник. где хранится пограмма которую PLC исполняет?

идея.положу во флеш..если останется место. он что то тоже стремительно убывает.

Сообщение отредактировал Jenya7 - Mar 13 2016, 13:35
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 13 2016, 12:25
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(adnega @ Mar 13 2016, 16:17) *
Отрицать на вашем месте вообще подход с использованием менеджеров памяти - не профессионально.

Обвинять кого либо в том чего он не говорил - не порядочно.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 13 2016, 14:14
Сообщение #70


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 13 2016, 15:25) *
Обвинять кого либо в том чего он не говорил - не порядочно.

Значит менеджеры памяти в некоторых задачах нужны.
Пригодность задачи для использования динамического выделения памяти определяет разработчик.
Если задача непригодна (пусть даже по причине отсутствия опыта у исполнителя) - наращиваем ОЗУ.
Все - конфликт исчерпан. Я прошу меня простить, если с кем-то поступил не порядочно.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 13 2016, 20:38
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



...
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 13 2016, 20:40
Сообщение #72


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Тема исчерпана - неплохо бы закрыть и последнее почистить.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 13 2016, 21:19
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(adnega @ Mar 14 2016, 00:40) *
Тема исчерпана - неплохо бы закрыть и последнее почистить.

Ну значит так и есть biggrin.gif
Удалил, мне не сложно.
А насчёт "закрыть" это лучше к ТС писать

Цитата(adnega @ Mar 13 2016, 17:14) *
Значит менеджеры памяти в некоторых задачах нужны.

Может СИшникам и нужны, мне точно не нужны.
Для меня это просто часть алгоритма и как его обозвать не имеет значения.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 14 2016, 04:48
Сообщение #74


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Создать глобальное объединение (union) из массивов всех нужных типов, максимально необходимого размера, и пользоваться им по мере необходимости вместо кучи. Годится?
Хочу понять, как куча может помочь сэкономить память? Если требуется хранить глобальные переменные, но никуда не денешься, придется выделить для них память сразу и навсегда. Если локальные, так они где создаются - в стеке или в куче? Кто (что) решает?

P.S. Или приведением указателя к нужному типу пользоваться массивом целых и в хвост и гриву.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 14 2016, 08:24
Сообщение #75


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Mar 14 2016, 10:48) *
Создать глобальное объединение (union) из массивов всех нужных типов, максимально необходимого размера, и пользоваться им по мере необходимости вместо кучи. Годится?
Хочу понять, как куча может помочь сэкономить память?

Никак. Может привести только к бОльшему расходу памяти.
Куча полезна только если нужно запускать различные задачи, заранее не известные (когда и какую), с заранее неизвестными требованиями к памяти. Но и то - нужна обработка случая нехватки памяти. Да и дефрагментация периодическая или после завершения каждой задачи. Это случай Linux-а и подобных ему систем.

Обычно для ембеддед достаточно:
union MemShare {
struct MemMode1 {
int member1, member2;
...
} memMode1;
struct MemMode2 {
int member1, member2;
...
} memMode2;
...
} memShare;
где Mode1, Mode2, ... - состояния работы устройства с неперекрывающимися структурами данных; которые в свою очередь могут быть union и делиться дальше.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 14 2016, 09:32
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Mar 14 2016, 10:24) *
Никак. Может привести только к бОльшему расходу памяти.
Куча полезна только если нужно запускать различные задачи, заранее не известные (когда и какую), с заранее неизвестными требованиями к памяти.

Разумеется нет. Куча, это просто ОДИН ИЗ СТАНДАРТИЗИРОВАННЫХ механизмов расшаривания памяти. Само расшаривание памяти может использоваться для чего угодно, а отнюдь не только для "запуска задач с неизвестными требованиями".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 14 2016, 14:00
Сообщение #77


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Mar 14 2016, 15:32) *
Разумеется нет. Куча, это просто ОДИН ИЗ СТАНДАРТИЗИРОВАННЫХ механизмов расшаривания памяти. Само расшаривание памяти может использоваться для чего угодно, а отнюдь не только для "запуска задач с неизвестными требованиями".

Прочитайте внимательнее. И уловите разницу между полезно и может. Никто не спорит, что куча может использоваться для чего угодно, ход код переносимый оттуда выполняйте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 14 2016, 14:57
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Mar 14 2016, 16:00) *
Прочитайте внимательнее. И уловите разницу между полезно и может. Никто не спорит, что куча может использоваться для чего угодно, ход код переносимый оттуда выполняйте.

Я прекраcно улавливаю разницу между "полезно" и "полезно ТОЛЬКО". Вот про использования Вами "полезна ТОЛЬКО если нужно запускать различные задачи", "Может привести ТОЛЬКО к бОльшему расходу памяти" и отвечал. Так что либо уберите слово ТОЛЬКО из своих постов, либо не пытайтесь сейчас юлить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 14 2016, 22:38
Сообщение #79


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



ТС вопрошает
Цитата(Jenya7 @ Mar 8 2016, 11:38) *
закончился RAM. а я еще даже не начал писать.

"вЫртуоз" пишет:
Цитата(zltigo @ Mar 9 2016, 00:33) *
менеджер может быть даже узкоспециализированый под уникальные объекты. Тут ведь дело в использовании самого принципа динамического использования памяти.

Цитата(zltigo @ Mar 9 2016, 21:17) *
Что то дикие у Вас представления о менеджерах памяти и программировании

Просто прохожий -
Цитата(zombi @ Mar 10 2016, 03:14) *
Ну так рассказали бы дикарям про менеджеры памяти

"вЫртуоз"-
Цитата(zltigo @ Mar 9 2016, 21:17) *
- этим менеджер заниматеся - Вам то зачем что то знать?

и тд и тп
Цитата(zltigo @ Mar 14 2016, 18:57) *
"полезно" и "полезно ТОЛЬКО"."полезна ТОЛЬКО если нужно


Внимание, ВОПРОС!!!
Помог ли "вЫртуоз" освободить память вопрошающему?

И если помог, то представляю как сейчас TC "купается" в огромном количестве свободной памяти которая так и просит его - ну возьми ну используй меня...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 14 2016, 23:19
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (zombi @ Mar 15 2016, 00:38) *
Внимание, ВОПРОС!!!

Будьте внимательнее. Ответ уже был http://electronix.ru/forum/index.php?showt...t&p=1410271
Мне описанный мной подход к делу помогает. По причине того, то я понимаю, что и как делаю. Вам, по причине полной неспособности понять, соответственно - нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Mar 16 2016, 07:22
Сообщение #81


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
А помогли ли ТС ваши советы?
И где конкретно советы? один сплошной трёп!

Да ладно? Нормально тема раскрыта.
Или вы хотели чтоб тут за ТС прям все исправили и отладили?
Направление для изучения дано, варианты расшарить память между задачам/подсистемами/etc даны.
Техники от полу-кустарных, ручных вариантов с union до более правильных менеджеров памяти в общих чертах описаны....
Дальше человек уже должен маленько по гуглить и найти всё что ему нужно.

Тут как-бы получается умному достаточно, а дурак все равно не поймет.

P.S.
Честно не понимаю чего у нескольких людей на форуме так бомбит пукан от советов zltigo?
Это такой способ отомстить за курс Евро или что?
Потому что это уже явно какая-то не адекватная реакция часто начинается.. Объяснения приходят только в стиле теории заговоров или борьбы с империализмом и ненависти к буржуазии )))

Но убирает он вас всех здорово! Порой тему читаю только чтоб по улыбаться со всего этого ))))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 18 2016, 10:17
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(zombi @ Mar 18 2016, 03:16) *
Вы либо курите что-то запрещённое , либо zltigo Ваш работодатедь как и для adnega?

Скоро вы всех СИ-шников припишете к наемникам zltigo...
Есть профи, которые на жизнь электроникой зарабатывают (и при этом любят электронику).
Им виднее, что и как надо делать, а что и как не надо делать - поэтому они готовы давать советы
для решения конкретной задачи в конкретных условиях.
А есть любители, которые считают только свой подход правильным в любых условиях.
Вроде, вопрос топика закрыли несколько страниц назад. Хочется поговорить о бесполезности СИ,
о ненужности абстракций программирования и о "любимом" ASM? - открывайте свою тему.
Да, zltigo довольно прямолинеен, но по информации из его постов можно судить о таком опыте
(в том числе и asm-разработок) и таком объеме созданного полезного, до которого вам еще очень далеко.
Завязываете: а то очень басню о Моське и Слоне напоминает.
Go to the top of the page
 
+Quote Post
zombi
сообщение Mar 19 2016, 00:32
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Прямолинеен biggrin.gif biggrin.gif biggrin.gif
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 23 2016, 04:41
Сообщение #84


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Неужели наконец-то всю память сэкономили?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 23 2016, 07:34
Сообщение #85


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ar__systems @ Mar 23 2016, 09:41) *
Неужели наконец-то всю память сэкономили?

либо ставить камень пожирнее, либо добавлять внешнюю память. все остальное...дискуссионные варианты как вы наверняка успели заметить.

Сообщение отредактировал Jenya7 - Mar 23 2016, 07:35
Go to the top of the page
 
+Quote Post

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

 


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


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