AlphaLaiman 0 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Пишу на C++ под STM32. Проблема в следующем - пытаюсь задействовать в проекте одновременно CCMRAM и DMA. Соответствующим образом скорректировал .icf файл, без DMA все работает, все объекты создаются в памяти CCMRAM. Но, как известно, DMA-контроллер не работает с памятью, размещенной в области CCMRAM. Как мне сделать так, чтобы нужные мне объекты классов, которые я собираюсь использовать с DMA, создавались оператором new не в CCMRAM, а в обычной RAM? Всякие #pragma location не помогают Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Это же C++, в нём можно перегрузить что угодно, в том числе new и delete. Но я бы не пошёл по этому скользкому пути, а создал объекты статически там где надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Как мне сделать так, чтобы нужные мне объекты классов, которые я собираюсь использовать с DMA, создавались оператором new не в CCMRAM, а в обычной RAM? Так уберите из new функцию выделения памяти, оставьте только вызов конструктора. Читайте что такое placement new. А потом выделяйте память где душе угодно. PS: А вообще - для embedded-применений лучше не использовать без динамическую память. Без лишней необходимости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaLaiman 0 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Так уберите из new функцию выделения памяти, оставьте только вызов конструктора. Читайте что такое placement new. А потом выделяйте память где душе угодно. PS: А вообще - для embedded-применений лучше не использовать без динамическую память. Без лишней необходимости. Спасибо, placement new помогло. А почему динамическую лучше не использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Спасибо, placement new помогло. А почему динамическую лучше не использовать? Потому что когда будет утечка памяти на компе - винда выделит ещё и ещё. А на устройстве - что будете делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Спасибо, placement new помогло. Курок вы ещё не спустили, но карабин в сторону голеностопа уже направили. Линкер справился бы с этим не хуже, размещая статические объекты. А почему динамическую лучше не использовать? Полноценная поддержка кучи достаточно дорогое удовольствие, а упрощённые её реализации дают неэффективное использование памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 апреля, 2018 Опубликовано 17 апреля, 2018 · Жалоба Курок вы ещё не спустили, но карабин в сторону голеностопа уже направили. Линкер справился бы с этим не хуже, размещая статические объекты. placement new - возможность запускать конструктор класса без вызова malloc() (без кучи). Т.е. - к выделению памяти отношения не имеет. И это полезная вещь как раз в случае использования и многократного использования области памяти, распределённой статически (линкёром). class TObject1 { ... }; class TObject2 { ... }; union { char m1[sizeof(TObject1)]; char m2[sizeof(TObject2)]; } static; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 18 апреля, 2018 Опубликовано 18 апреля, 2018 · Жалоба Да я же не против, просто констатирую, что ствол вниз уже направлен :excl: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 18 апреля, 2018 Опубликовано 18 апреля, 2018 · Жалоба А можно было бы выделить классы которые требуют специфического аллокатора и переопределить классовый new|delete. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlphaLaiman 0 18 апреля, 2018 Опубликовано 18 апреля, 2018 · Жалоба Курок вы ещё не спустили, но карабин в сторону голеностопа уже направили. Линкер справился бы с этим не хуже, размещая статические объекты. Полноценная поддержка кучи достаточно дорогое удовольствие, а упрощённые её реализации дают неэффективное использование памяти. Всем спасибо за помощь, буду использовать статические Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться