-
- По указателю, память зарезервировать под что угодно. - инженегр(12.11.2013 06:47, )
- Тебе повезло :) Я сегодня уперся в извлечение целого из float в васике. Т.е. никак не мог найти библиотечные Int() или Fix() (помню, что чтой-то такое вроде там было). А искать надо было, оказывается, жабий Round(), ибо от васика там только чутка Гyдвин(127 знак., 11.11.2013 23:00)
- Я обычно как пишу: Ксения(638 знак., 11.11.2013 22:01 - 22:08)
- надо только отслеживать тип платформы: little или big endian :) - RED_DRAGON(12.11.2013 09:18)
- Ага, спасибоньки. - UraGun(11.11.2013 22:09)
- Только не забудьте, что в массивах счет идет с нуля! Ксения(67 знак., 11.11.2013 22:11)
- И никакого выравнивания. - plainuser(12.11.2013 09:15)
- ну эт понятно :) В общем union законно решает мой вопрос. Надеюсь так вот можно ? Анонимно. UraGun(135 знак., 11.11.2013 22:15)
- Так хуже, поскольку само объявление union, как и объявление struct, никакого объекта не порождают, а только описывают его структуру. Поэтому вам придется либо дать имя этому юниону, чтобы им штамповать такие объекты, или Ксения(833 знак., 12.11.2013 01:16 - 01:39)
- Спасибо большое за детальность. Но использование анонимных юнионов вроде как не нарушение - UraGun(284 знак., 12.11.2013 07:30 - 07:53)
- ИАР постепенно убирает из своих компиляторов использование анонимных юнионов, я после влета с компиятором MSP430 больше их не использую, и вам не советую. - Vladimir Ljaschko(12.11.2013 15:46)
- Пардон, Вам где-ни будь попадалась официальная информация по этому поводу ? Стандарт какой, или ещё какой документ ? Надеюсь это предположение не базируется на опыте работы с одним из множества компиляторов, который в отличие от остальных взял и UraGun(197 знак., 12.11.2013 16:20)
- "Язык C++ не допускает анонимные структуры." (C) Microsoft => - Ксения(12.11.2013 17:02, ссылка)
- А какое отношение имеют анонимные структуры к анонимным юнионам ? Спасибо конечно, но это как то не о том. - UraGun(12.11.2013 17:25)
- "Специально пролистал стандарт С99 - нет там anonymous unions, так что фича чисто С++ная." (С) Nemo => - Ксения(12.11.2013 18:00, ссылка)
- А какое отношение имеют анонимные структуры к анонимным юнионам ? Спасибо конечно, но это как то не о том. - UraGun(12.11.2013 17:25)
- Я лично переписывался и ИАРом, и уже неоднократно затрагивал эту тему на Сахаре (пруфлинк). Сам ИАР ссылается, что у них ANSI C, а, стало быть анонимные юнионы - не ANSI C. Предлагаю проверить это утверждение ИАРа самостоятельно. Для поиска Vladimir Ljaschko(168 знак., 12.11.2013 16:38, ссылка)
- Спасибо. - UraGun(12.11.2013 17:01)
- "Язык C++ не допускает анонимные структуры." (C) Microsoft => - Ксения(12.11.2013 17:02, ссылка)
- Пардон, Вам где-ни будь попадалась официальная информация по этому поводу ? Стандарт какой, или ещё какой документ ? Надеюсь это предположение не базируется на опыте работы с одним из множества компиляторов, который в отличие от остальных взял и UraGun(197 знак., 12.11.2013 16:20)
- Похоже на то, что вы втянулись возражения придумывать. Делайте тогда, как хотите, - уламывать вас нет никакого желания. - Ксения(12.11.2013 15:35)
- ИАР постепенно убирает из своих компиляторов использование анонимных юнионов, я после влета с компиятором MSP430 больше их не использую, и вам не советую. - Vladimir Ljaschko(12.11.2013 15:46)
- Спасибо большое за детальность. Но использование анонимных юнионов вроде как не нарушение - UraGun(284 знак., 12.11.2013 07:30 - 07:53)
- это изврат. Сделайте нормальный union, а потом собирайте массив из них хоть на 100500 элементов - koyodza(11.11.2013 23:48)
- Кстати, с обявлением массива в >65535 тоже были проблемы, как я помню. - UraGun(12.11.2013 00:02)
- про 100500 я сказал образно. Кстати, используя указатели можно замутить массив любого размера в пределах имеющейся памяти koyodza(54 знак., 12.11.2013 00:06)
- Тогда я получаю массив юнионов, а мне нужен юнион масивов. - UraGun(12.11.2013 00:00)
- "не нужен тебе пистолет, Гарри. Тебе нужен я" (с) Snatch - koyodza(12.11.2013 00:05)
- Я не думаю что ты стрелять не умеешь, я знаю, что ты стрелять не умеешь :) - UraGun(12.11.2013 00:06)
- Вся эта канитель задумана не для совместного доступа к значениям одних и тех-же ячеек памяти под видом разных переменных, а для использования одних и тех же ячеек памяти, для хранения значений одинаковых по длинне структур, нкогда не используемых UraGun(136 знак., 12.11.2013 00:10)
- А оверлеи в линкере, а переменные в соотв. сегментах не пробовали? Гораздо изящнее, ИМХО. - Хитрый Китаец(12.11.2013 11:04)
- Пиздец. Лютый бешенный, дикий и неистовый пиздец. Хуже было, только когда я услышал, что в A[123] хранится что-то одно в один момент времени и что-то другое в другой... И на фоне этого malloc() считается чем-то плохим и негодным? Он хотя бы fk0(155 знак., 12.11.2013 02:03)
- Я тоже так делаю :) Если функциональность четко разделена, какие проблемы? Vladimir Ljaschko(99 знак., 12.11.2013 08:20)
- Когда "хранится что-то одно в один момент времени и что-то другое в другой" это абсолютно нормальная практика при ограниченности ресурсов - Shura(12.11.2013 08:18)
- Ага, а ещё прождает нефрагментированные куски свободной памяти, вот уже где неистовый пиздец. - UraGun(12.11.2013 07:32)
- зачем задавать вопрос, если не укладывающийся в рамки ожидаемого ответ априори игнорируется? - koyodza(12.11.2013 00:12)
- Ну с чего Вы взяли что игнорируется то ? Я вообще спрашивал об экстерн, вы первично посоветовали юнион, один из вариантов использования юнион мне подошел, почему Вас задевает что подошел не тот, на котором настаиваете Вы ? :) - UraGun(12.11.2013 00:15)
- если бы я знал, что Вы примените новое знание не по назначению, то не советовал бы :=) - koyodza(12.11.2013 00:20)
- :)))))))) срыв шаблонов - моё кредо. - UraGun(12.11.2013 00:46)
- так что ли ?! - MegaJohn(12.11.2013 00:55, картинка)
- похоже на то - koyodza(12.11.2013 01:00)
- При недостатке аргументации, главное - вовремя перейти на личности, понимаю :) Так что кроме "наползания", и того что так "никто не делает" Вас ещё не устраивает в предложенном мной написании ? UraGun(68 знак., 12.11.2013 01:03)
- да как-то стыдно становится перед преемниками кода, теряя 63кб памяти на dummy. Хотя если у вас её много то почему бы и нет. - MegaJohn(12.11.2013 01:18)
- почему же никто? Очень многие именно так и делают. А наползания Вам мало? Тогда пишите на ассемблере, там нет ни юнионов, ни структур. Вообще никаких проблем, можно фиксированные адреса для всех переменных использовать - koyodza(12.11.2013 01:15)
- При недостатке аргументации, главное - вовремя перейти на личности, понимаю :) Так что кроме "наползания", и того что так "никто не делает" Вас ещё не устраивает в предложенном мной написании ? UraGun(68 знак., 12.11.2013 01:03)
- Умение впадать в крайности несомненно Ваш конек :) - UraGun(12.11.2013 00:56)
- похоже на то - koyodza(12.11.2013 01:00)
- так что ли ?! - MegaJohn(12.11.2013 00:55, картинка)
- :)))))))) срыв шаблонов - моё кредо. - UraGun(12.11.2013 00:46)
- если бы я знал, что Вы примените новое знание не по назначению, то не советовал бы :=) - koyodza(12.11.2013 00:20)
- Ну с чего Вы взяли что игнорируется то ? Я вообще спрашивал об экстерн, вы первично посоветовали юнион, один из вариантов использования юнион мне подошел, почему Вас задевает что подошел не тот, на котором настаиваете Вы ? :) - UraGun(12.11.2013 00:15)
- нафига Вам юнион массивов и чем не устраивает массив юнионов? - koyodza(12.11.2013 00:09)
- юнион массивов чреват тем, что при разной размерности массивов получите наползание элементов с разным индексом друг на друга. С массивом юнионов такого не произойдёт - koyodza(12.11.2013 00:13)
- Я однократно обявляю юнион с проверенными по длине массивами структур, и непременно инициализирую каждый элемент. Откуда взяться наползанию ? - UraGun(12.11.2013 00:17 - 07:57)
- технически верны оба варианта. логически - массив юнионов красивее. в любом случае юнионы у вас решат проблему выравнивания автоматом. а вот проблема больших и малых индейцев никуда не денется. весьма вероятно, что на тех платформах что у вас в Mahagam(195 знак., 12.11.2013 00:27)
- завтра понадобится добавить ещё одно устройство и привет. Вообще писать в таком стиле, с прибитыми гвоздями массивами - это самый что ни на есть говнокод - koyodza(12.11.2013 00:18)
- Видимо, по осени многих тянет чего-нибудь к чему-нибудь прибить :-) - Shura(12.11.2013 08:16)
- Ты ничего не понимаешь в современной копроэкономике. Увы, но это верный способ заработать больше и стабильно (ПО должно требовать перманентной поддержки). - fk0(12.11.2013 02:18)
- да, мне не раз говорили, что выгоднее делать г*вно - koyodza(12.11.2013 10:51)
- Настоящий копроворчун, всегда найдёт повод поворчать на привычную тему. - UraGun(12.11.2013 11:01)
- да, мне не раз говорили, что выгоднее делать г*вно - koyodza(12.11.2013 10:51)
- Ну и какие проблемы добавить в юнион ещё один тип устройства, вписав его в те-же 100 байт ? Если переменных понадобится больше - просто изменим количество байт на один адрес и поправим количество думми в конце. - UraGun(12.11.2013 00:39)
- никаких. Пишите сразу на ассемблере, будет ещё лучше - koyodza(12.11.2013 01:01)
- Этот ответ Вы несомненно тоже относите к тем что по сути вопроса :) - UraGun(12.11.2013 01:04)
- никаких. Пишите сразу на ассемблере, будет ещё лучше - koyodza(12.11.2013 01:01)
- Я однократно обявляю юнион с проверенными по длине массивами структур, и непременно инициализирую каждый элемент. Откуда взяться наползанию ? - UraGun(12.11.2013 00:17 - 07:57)
- Удобством записи при обращении. - UraGun(12.11.2013 00:13)
- напишите здесь оба варианта и покажите, где неудобства - koyodza(12.11.2013 00:14)
- у меня есть три структуры для описания переменных трёх типов участников сети. К примеру. UraGun(1123 знак., 12.11.2013 00:34)
- За подгонку байтиков в структуре к бинарному формату -- сжигать нужно. При работе с бинарными форматами _всегда_ нужна ручная сериализация и десериализация. Увы. Архимегагонокод. - fk0(12.11.2013 02:07)
- предполагаю, что проектируются костыли для окучивания буфера обмена копированием "ячеек" без перепаковки. грустная история. - Vit(12.11.2013 01:18)
- наверное, прав был ув.ЛИ - koyodza(12.11.2013 01:23, ссылка)
- говнокод шопесец. Выравнивание считаем вручную koyodza(427 знак., 12.11.2013 01:08)
- Да вроде никто и не просил. Как никто и не просил переживать. - UraGun(12.11.2013 07:41)
- благодарю что дали понять по поводу бесполезности ответов на ваши вопросы. Сэкономлю время в следующий раз - koyodza(12.11.2013 10:48)
- Да уж, будьте любезны. - UraGun(12.11.2013 10:58)
- благодарю что дали понять по поводу бесполезности ответов на ваши вопросы. Сэкономлю время в следующий раз - koyodza(12.11.2013 10:48)
- Да вроде никто и не просил. Как никто и не просил переживать. - UraGun(12.11.2013 07:41)
- у меня есть три структуры для описания переменных трёх типов участников сети. К примеру. UraGun(1123 знак., 12.11.2013 00:34)
- напишите здесь оба варианта и покажите, где неудобства - koyodza(12.11.2013 00:14)
- юнион массивов чреват тем, что при разной размерности массивов получите наползание элементов с разным индексом друг на друга. С массивом юнионов такого не произойдёт - koyodza(12.11.2013 00:13)
- Вся эта канитель задумана не для совместного доступа к значениям одних и тех-же ячеек памяти под видом разных переменных, а для использования одних и тех же ячеек памяти, для хранения значений одинаковых по длинне структур, нкогда не используемых UraGun(136 знак., 12.11.2013 00:10)
- Я не думаю что ты стрелять не умеешь, я знаю, что ты стрелять не умеешь :) - UraGun(12.11.2013 00:06)
- "не нужен тебе пистолет, Гарри. Тебе нужен я" (с) Snatch - koyodza(12.11.2013 00:05)
- Кстати, с обявлением массива в >65535 тоже были проблемы, как я помню. - UraGun(12.11.2013 00:02)
- А теперь попробуйте перед union сделать вот так. framer(196 знак., 11.11.2013 22:27)
- Кстати, эт вы для какого из АИРов указали ? Не для AVR ли ? Потому как вопрос вообще по IARу для ARM. - UraGun(11.11.2013 22:45)
- Это даже для Win на х86 есть вот например для GCC выглядит так framer(422 знак., 11.11.2013 22:54 - 22:57)
- Как бы оптимизировать по размеру тут вообще не нужно... Достаточно для этого отлюключить оптимизацию в опциях проекта, надеюсь ? - UraGun(11.11.2013 22:43)
- Кстати, эт вы для какого из АИРов указали ? Не для AVR ли ? Потому как вопрос вообще по IARу для ARM. - UraGun(11.11.2013 22:45)
- Так хуже, поскольку само объявление union, как и объявление struct, никакого объекта не порождают, а только описывают его структуру. Поэтому вам придется либо дать имя этому юниону, чтобы им штамповать такие объекты, или Ксения(833 знак., 12.11.2013 01:16 - 01:39)
- Только не забудьте, что в массивах счет идет с нуля! Ксения(67 знак., 11.11.2013 22:11)
- правильнее использовать union - koyodza(11.11.2013 21:10)
- прошу прощения за бестакность, а можете переписать приведёный пример как правильно при использовании union ? - UraGun(11.11.2013 21:13)
- Может быть есть какой-то простой стиль записи, позволяющий размещать не используемые одновременно переменные по фиксированным адресам, аля UraGun(61 знак., 11.11.2013 21:21)
- не используемые одновременно обычно стараются делать локальными. Если у Вас оно уже получается большое, то или malloc/free, или new/delete, или вручную например так: koyodza(816 знак., 11.11.2013 21:30)
- Давайте я более детально опишу задачу. Есть 255 контроллеров в сети и есть ограниченный объём памяти мастера. Отводим на данные полученные от каждого контроллера и передаваемые каждому контроллеру к примеру 100 байт. Суммарно получается область UraGun(633 знак., 11.11.2013 21:48 - 21:52)
- не используемые одновременно обычно стараются делать локальными. Если у Вас оно уже получается большое, то или malloc/free, или new/delete, или вручную например так: koyodza(816 знак., 11.11.2013 21:30)
- примерно так: koyodza(624 знак., 11.11.2013 21:19)
- Грех uint32_t туда не вживить. Большой грех. :) - Юра(11.11.2013 22:03, )
- Код не переносимый. Endian одно а есть еще выравнивание (aligned). От компилятора и оптимизации еще зависит. Так что можно наступить на грабли. У ТС кажется проблема в том, что хотел переопределять структуры extern-ом а это большое зло. - framer(11.11.2013 21:45)
- Не хотел, просто набрёл на такой спецэффект, решил обсудить законность его использования. Мне тоже не нравятся external. - UraGun(11.11.2013 21:49)
- При extern вообще не будет ошибок компилятора, можно переопределить все что угодно и компилятор ничего не будет говорить. А с чем связана проблема отказаться от extern? - framer(11.11.2013 21:54)
- Вообще-то линкеры могут отслеживать типы (разные линкеры - по-разному). Так что я бы не спешил с выводами. Но если грабли расстелены, то по ним не обязательно ходить. Тем более для особо страждущих есть законный union. - SciFi(11.11.2013 22:01)
- Может. но мне кажется, что линкер не имеет понятия о типах. Линкер привязывает адреса к переменным и функциям а какого они типа не знает. Типы контролируются только компилятором а конструкция ехтерн как раз говорит компилятору, что «ты мол не ищи framer(52 знак., 11.11.2013 22:08)
- Остановлюсь на union. Всем спасибо за подсказки. - UraGun(11.11.2013 22:10)
- Нифига. Точно помню, что линкер Keil C166 ругался на несоответствие типов (предупреждение). С другими не пробовал, ибо повзрослел и перестал говнокодить :-) - SciFi(11.11.2013 22:10)
- Может. но мне кажется, что линкер не имеет понятия о типах. Линкер привязывает адреса к переменным и функциям а какого они типа не знает. Типы контролируются только компилятором а конструкция ехтерн как раз говорит компилятору, что «ты мол не ищи framer(52 знак., 11.11.2013 22:08)
- Вообще-то линкеры могут отслеживать типы (разные линкеры - по-разному). Так что я бы не спешил с выводами. Но если грабли расстелены, то по ним не обязательно ходить. Тем более для особо страждущих есть законный union. - SciFi(11.11.2013 22:01)
- При extern вообще не будет ошибок компилятора, можно переопределить все что угодно и компилятор ничего не будет говорить. А с чем связана проблема отказаться от extern? - framer(11.11.2013 21:54)
- Не хотел, просто набрёл на такой спецэффект, решил обсудить законность его использования. Мне тоже не нравятся external. - UraGun(11.11.2013 21:49)
- Спасибо большое. - UraGun(11.11.2013 21:23)
- А объявить этот юнион анонимным ? Чтобы не писать его имя можно ? - UraGun(11.11.2013 21:22)
- Пардон, вопрос снят за бредовостью. - UraGun(11.11.2013 21:25)
- Может быть есть какой-то простой стиль записи, позволяющий размещать не используемые одновременно переменные по фиксированным адресам, аля UraGun(61 знак., 11.11.2013 21:21)
- прошу прощения за бестакность, а можете переписать приведёный пример как правильно при использовании union ? - UraGun(11.11.2013 21:13)