Сергей Борщ 134 16 марта, 2023 Опубликовано 16 марта, 2023 · Жалоба 48 минут назад, Arlleex сказал: Объясните, пожалуйста, на пальцах, если не трудно. std::aligned_storage резервирует память необходимого размера и с необходимым выравниванием с гарантией отсутствия неопределенного поведения. placement new располагает в этой области необходимую вам структуру и возвращает указатель на нее. Дальше можно работать с этим указателем, мне больше нравится работать со ссылкой. Эта структура должна иметь конструктор, который не делает с этой структурой ничего (в данном случае это конструктор по умолчанию). #include <type_traits> std::aligned_storage<sizeof(uint32_t), alignof(uint32_t)> Buffer[512 / sizeof(uint32_t)]; struct packet { uint32_t A; uint16_t B; uint8_t C; }; #include <new> void test() { auto const & Packet = *(new(Buffer) packet); uint32_t A = Packet.A; uint16_t B = Packet.B; uint8_t C = Packet.C; } Фактически placement new() приводит переданный ему указатель к нужному типу и вызывает конструктор с этим указателем. Программист должен гарантировать, что переданный в placement new() указатель отвечает всем требованиям к выравниванию и прочему, 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 16 марта, 2023 Опубликовано 16 марта, 2023 · Жалоба А std::aligned_storage это что-то наподобие __attribute__((aligned(x)))? Просто какой способ правильнее - атрибутами задать выравнивание и т.д., либо этим aligned_storage? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 16 марта, 2023 Опубликовано 16 марта, 2023 · Жалоба 3 минуты назад, Arlleex сказал: А std::aligned_storage это что-то наподобие __attribute__((aligned(x)))? https://en.cppreference.com/w/cpp/types/aligned_storage 3 минуты назад, Arlleex сказал: Просто какой способ правильнее - атрибутами задать выравнивание и т.д., либо этим aligned_storage? std:: как бы намекает, что это будет работать всегда с любым компилятором без шаманства. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 16 марта, 2023 Опубликовано 16 марта, 2023 · Жалоба 21 minutes ago, Сергей Борщ said: std::aligned_storage Хм, надо взять на заметку )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Крюк 0 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба Дискуссия в этой теме в основном ведется о самом языке С++. Меня интересует другое - при создании проекта С++ в IDE Keil будут ли сложности с использованием SPL? Взял небольшой миландровский пример проекта для К1986ВЕ92QI с инициализацией ядра и части периферии, и просто переименовал main.c в main.cpp. Проект оттранслировался, но выскочила куча варнингов. На порядок больше, чем с main.c. Сам я привык уже к работе на C++. Где будет больше геммороя при работе в Keil - при возврате к С или при использовании С++? Речь именно о самой среде Keil с прилагаемым компилятором и паках со стандартными библиотеками. Не о сравнении С и С++!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 2 hours ago, Forger said: На порядок больше, чем с main.c. Больше? В нормальном проекте вообще не должно быть варнингов. Их исправление нельзя откладывать на потом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 2 часа назад, aem сказал: Меня интересует другое - при создании проекта С++ в IDE Keil будут ли сложности с использованием SPL? Так spl-ные файлы .c-ные, соответственно, Keil будет их обрабатывать Си-компилятором, не C++. Покажите варнинги тогда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Крюк 0 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба Все же некоторые пишут на С++ в Keil. Они не используют CMSIS и SPL? Или как-то иначе? В IAR народ обходит слева - https://habr.com/ru/post/459642/. А в Keil как? Хочется писать на С++ как привык, и использовать свои заделы. Колется вручную работать с ядром и периферией. И вообще - вопрос, как я понимаю, не в среде. А в отсутствий SPL, написанной на С++? Без разницы - Keil, IAR, Eclipse. SPL всё равно все сишные. Как люди в таких условиях пишут для ARM на С++? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 22 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 6 minutes ago, aem said: Хочется писать на С++ как привык, и использовать свои заделы. А при чем тут keil? Это просто среда. Пишите как вам угодно, в рамках стандарта языка. 7 minutes ago, aem said: В IAR народ обходит слева - https://habr.com/ru/post/459642/. Не "народ", а отдельные граждане. Точно также можно "обходить" и на keil, если очень хочется. 8 minutes ago, aem said: Все же некоторые пишут на С++ в Keil Сейчас очень многие пишут сразу на плюсах (многие в стиле С по привычке), но всего-то лет 10 назад это были лишь единицы, энтузиасты так сказать ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба Мне из ++ пока что облегчили жизнь пространства имен и возможность запихивать функции простигосподи методы в структуры для инкапсуляции простигосподи сокрытия данных. И ВСЕ. В остальном пока что это, скорее, бодания с вычурными ограничениями языка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 1 час назад, aem сказал: Они не используют CMSIS и SPL? Или как-то иначе? А там, где вы нарабатывали свои заделы (подозреваю, что в виндовсе) вы системные функции ОС не вызывали? Или думаете, они на плюсах написаны? Там все то же самое - могучий extern "C" позволяет вызывать сишные и прочие ассемблерные функции из плюсов в любой среде. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 78 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 2 часа назад, aem сказал: Как люди в таких условиях пишут для ARM на С++? Если вам не удобно, то скомпилируйте вначале функции SPL в библиотеку и вызывайте из своей программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба 48 минут назад, HardEgor сказал: Если вам не удобно, то скомпилируйте вначале функции SPL в библиотеку и вызывайте из своей программы. От необходимости extern "C" в прототипах это не спасет)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 60 23 марта, 2023 Опубликовано 23 марта, 2023 · Жалоба On 3/23/2023 at 6:23 PM, Arlleex said: От необходимости extern "C" в прототипах это не спасет)) Можно и не в прототипах extern "C" { #include "..." #include "..." #include "..." #include "..." } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
turnon 1 21 апреля, 2023 Опубликовано 21 апреля, 2023 · Жалоба On 12/4/2022 at 11:39 AM, Variant99 said: Хорошо, что вы помните, что вчера написали в своём коде. А откройте его через полгодика. Вспомните ли, что такое например mux[4]; Вот нам со стороны ну ваще непонять, че это за хреновинка приляпана, че она там содержит. Или isValid - это валидность чего? ХЗ. Мы тут потратили 2 страницы на объяснения, чтобы понять, что ж вы там пытаетесь написать то. А для этого надо не переменную делать длинную, а контекст задачи дробить, где уже не надо будет писать isValidSomeStufff, а будет ясно и без комментариев, что isValid. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться