-
- Есть простой вариант - положить массив внутрь структуры и спокойно присваивать структуры друг другу как угодно. - LightElf(05.07.2023 15:58)
- Учите плюсы, ибо они рулез. VladislavS.(2 знак., 05.07.2023 15:42, ссылка, картинка)
- это конечно здорово, только ияр версии 8.2 это не переварил. Nikolay801_(63 знак., 06.07.2023 11:48)
- Это даже IAR для AVR последний переваривает. Про ARM вообще молчу. VladislavS.(1 знак., 06.07.2023 12:01, картинка)
- это конечно здорово, только ияр версии 8.2 это не переварил. Nikolay801_(63 знак., 06.07.2023 11:48)
- нашёл полный ответ на вопрос плpoывдлпo(136 знак., 05.07.2023 14:55, , ссылка, ссылка)
- если много элементов не надо, можно такой говнокод использовать пpывпpyкeп(279 знак., 05.07.2023 13:58, )
- Значения в массив должны попасть в рантайме или на этапе
компиляции? - VladislavS.(05.07.2023 13:23)
- Рантайм заполнить массив, инициализирующее значение и размер
массива известны на этапе компиляции. Спасибо за подсказки. Плюсы
буду ковырять, но не в этом проекте. Решил писать понятно. - Dingo(06.07.2023 13:17)
- memset - VladislavS.(06.07.2023 16:25)
- Рантайм заполнить массив, инициализирующее значение и размер
массива известны на этапе компиляции. Спасибо за подсказки. Плюсы
буду ковырять, но не в этом проекте. Решил писать понятно. - Dingo(06.07.2023 13:17)
- в GCC int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 }; fdjhdskfjgh(1 знак., 05.07.2023 11:47, ссылка)
- Так ты же массив константами заполняешь. Tyмблep(251 знак., 04.07.2023 12:49)
- Ну, это не всегда так. Например, мне недавно потребовалось написать аналог функции memcmp. Разница между моей функцией и библиотечной состояла только в том, что количество байт в массиве не превышает 256. Поскольку я использую STM8, то разница весьма заметна. Хотя, если использовать 32-разрядный процессор, то каких-либо ухищрений не не потребовалось бы. По-моему так. - Bill(04.07.2023 13:54)
- Спасибо всем ответившим! Я понял - так делать не надо! - Dingo(04.07.2023 12:44)
- типо токое? RED_DRAGON(279 знак., 04.07.2023 12:35 - 12:39)
- This is a GNU extension. SciFi(1 знак., 04.07.2023 12:35, ссылка)
- ага - RED_DRAGON(04.07.2023 12:38)
- Можно совместить с compound literal: SciFi(146 знак., 04.07.2023 12:44)
- ага - RED_DRAGON(04.07.2023 12:38)
- This is a GNU extension. SciFi(1 знак., 04.07.2023 12:35, ссылка)
- На что наткнулся: _Generic, доступно от С11 и выше. Dingo(1 знак., 04.07.2023 11:10, ссылка)
- generic - это про перегрузку функций, а не автозаполнение массива. Eddy_Em(119 знак., 04.07.2023 12:10)
- Оффтоп. VVB(945 знак., 04.07.2023 10:32, ссылка)
- Если бы С++, я бы с constexpr, consteval попытался разобраться. - Dingo(04.07.2023 11:06)
- А почему не C++? - VVB(04.07.2023 11:11)
- Начал на С, а сейчас как представлю, сколько переделывать, так вздрогну. А на С++ опыта нет вменяемого, тут про пользование прерываниями спрашивал с пол года назад. - Dingo(04.07.2023 11:14)
- На самом деле против плюсов ровно те же аргументы, что и против мозголомных макросов. Ну не надо на ровном месте усложнять, если без этого можно обойтись. - SciFi(04.07.2023 11:14)
- А почему не C++? - VVB(04.07.2023 11:11)
- Не надо вешать ярлыки. Конкретно этот мой пример - способ ведения
базы ресурсов в одном месте. Например - строковые ресурсы. В одном
месте (в файле rc_str.h) задаются все параметры строки - ее ID,
текст на русском/английском, точки переноса, еще какая-нибудь
инфа... Добавление новых ресурсов делается легко и БЕЗОШИБОЧНО. il-2(535 знак., 04.07.2023 10:48)
- А ведь вы где-то приводили это... - Dingo(04.07.2023 11:00)
- +++ Что нибудь простенькое типа RedLed_ON/RedLed_ОFF реально
облегчает жисть и повышает читаемость. А вот навороты - фтопку. - Гyдвин(04.07.2023 10:42)
- Я и такие штуки в виде функций делаю. Причины, по которым их делали
в виде макросов, остались в далёком прошлом. Да и тогда они были
сомнительными... - SciFi(04.07.2023 10:45)
- А почему в прошлом ? Tyмблep(229 знак., 04.07.2023 12:54)
- Это подмена функций. Они тоже в одном месте. И поменять местами
тоже не проблема. Макросы здесь — лишняя сущность. - SciFi(04.07.2023 13:01)
- Макрос здесь - инлайн функция. Tyмблep(408 знак., 04.07.2023 13:20)
- Борьба за последний байт бывает, конечно, но крайне редко. Всегда ориентироваться на этот сценарий вредно. Приводит к вредным привычкам типа "деньги есть, а потратить никак нельзя, ибо тараканы в голове не позволяют". - SciFi(04.07.2023 13:39)
- Макросы полезны и нужны, но в случае с функциями как минимум выполняется проверка типов. Если компилятор умеет функцию сам инлайнить - то разница с макросом становится ещё меньше. - Dingo(04.07.2023 13:24)
- Макрос здесь - инлайн функция. Tyмблep(408 знак., 04.07.2023 13:20)
- Это подмена функций. Они тоже в одном месте. И поменять местами
тоже не проблема. Макросы здесь — лишняя сущность. - SciFi(04.07.2023 13:01)
- Тоже верно. Ибо даже отладчик в макросах не разбирается ;) - Гyдвин(04.07.2023 10:48)
- А почему в прошлом ? Tyмблep(229 знак., 04.07.2023 12:54)
- Я и такие штуки в виде функций делаю. Причины, по которым их делали
в виде макросов, остались в далёком прошлом. Да и тогда они были
сомнительными... - SciFi(04.07.2023 10:45)
- Аминь. - SciFi(04.07.2023 10:35)
- Если бы С++, я бы с constexpr, consteval попытался разобраться. - Dingo(04.07.2023 11:06)
- 1. Для "закатывания" бинарников в массив ЦЭ есть удобнейшая утилита
HxD. Кстати не только ЦЭ... 2. На этапе компиляции в Keil можно
заюзать утилиту командной строки "fcarm.exe ", которая создает
массив на ЦЭ из бинарника (любых файлов, ибо оно для
конвертирования WEB страниц в массивы C). Пользую такую для
автоматического обновления прошивок мелких устройств в прошивке
"жирных". Типа компильнул прошиву для MSP, При компиляции для LPC17
она автоматически обновляется... Гyдвин(2 знак., 04.07.2023 09:24, ссылка, картинка)
- Спасибо за утилиту, но сейчас не про это: можно ли всем элементам
массива присвоить одинаковое значение. il-2 показал на XMACRO, но
несколько не то. Скорее всего проще ручками будет править или через
for. Ваша рекомендация тоже нужна была буквально недавно, но не
сейчас. - Dingo(04.07.2023 09:36)
- Проблема мне непонятна :) 1. В том же HxD создать бинарник,
заполнить его нужными значениями (8/16/32 бит) и экспортировать в
ЦЭ. 2. Если лень ыкнуть мышкой пару-тройку кликов, накропать в тех
же дельфях программку для "рисования" массива в пяток строчек дело
пары минут . WriteLn('бла..бла') в цикле... 3. Скрипт на встроенном
Васике винды, если нет Дельфей ;) - Гyдвин(04.07.2023 09:52)
- "Скрипт на встроенном Васике винды, если нет Дельфей ;)". Совершенно в тютельку, Олег! Если есть сторонний язык/среда программирования (я периодически пользуюсь теми же SERGHIO(547 знак., 04.07.2023 12:42)
- Не-не-не, не туда думаете. ;-) Хочется примерно так: #define ARR_SZ
5 | #define FILLER 0xc0de | FILL(array, FILLER) | FILL( array2,
FILLER2) С возможностью несколько раз использовать в коде, в том
числе изменив AR_SZ под конкретный случай. Как присвоение структур,
только массива. И чтобы между {} было корректное количество
инициализирующих значений. - Dingo(04.07.2023 10:03)
- Ниже il-2 привел пример использования техники которая называется X-macro. Таким способом можно сгенерировать в том числе и объявление массива с инициализацией: ЫЫyкпy(437 знак., 05.07.2023 11:42)
- А memcpy чем плох? - LightElf(04.07.2023 10:11)
- КМК, хочется пощупать границы препроцессора для расширения
сознаниякругозора. - SciFi(04.07.2023 10:20)
- КМК, хочется пощупать границы препроцессора для расширения
- Проблема мне непонятна :) 1. В том же HxD создать бинарник,
заполнить его нужными значениями (8/16/32 бит) и экспортировать в
ЦЭ. 2. Если лень ыкнуть мышкой пару-тройку кликов, накропать в тех
же дельфях программку для "рисования" массива в пяток строчек дело
пары минут . WriteLn('бла..бла') в цикле... 3. Скрипт на встроенном
Васике винды, если нет Дельфей ;) - Гyдвин(04.07.2023 09:52)
- Спасибо за утилиту, но сейчас не про это: можно ли всем элементам
массива присвоить одинаковое значение. il-2 показал на XMACRO, но
несколько не то. Скорее всего проще ручками будет править или через
for. Ваша рекомендация тоже нужна была буквально недавно, но не
сейчас. - Dingo(04.07.2023 09:36)
- -> il-2(363 знак., 04.07.2023 08:00)
- Если там все значения одинаковые, проще memset использовать или
подобное. А если разные, я, например, однострочником на bash
генерирую... - Eddy_Em(04.07.2023 07:48)
- Как мемсет поможет со значениями 16 или 32 бита? Баш - хорош, но по
сути это свой макропроцессор. :-/ Как бы вы сделали с его помощью? - Dingo(04.07.2023 07:52)
- Свой аналог написать - все равно там в оригинале в цикле фигачит по 32 или 64 бита… - Eddy_Em(04.07.2023 11:54)
- Для скриптования повсеместно использую gawk. Рекомендую. А вообще
надуманная проблема, имхо. Ну сделайте функции memset16() и
memset32(). - SciFi(04.07.2023 07:58)
- Ох-хо-хо, это же вспоминать, въезжать заново! делал под Win
генерацию рецептов бетонов на основе csv, из одного делал
несколько, которые уже в среде использовал. Чем хорош - под win
один exe-файл. Но опять же: вдруг можно штатными средствами? - Dingo(04.07.2023 08:00)
- И ещё один аргумент. Код "a[0] = myconst; a[1] = myconst; ...
a[100500] = myconst;" скорее всего превратится в такую же простыню
машинного кода. Некрасиво. - SciFi(04.07.2023 08:32)
- Я знаю, что вы внимательны к деталям, поэтому поясню: _SZ в
пределах 3..9 ориентировочно. И места в прошивке хватает. Dingo(244 знак., 04.07.2023 09:49, ссылка)
- Эту "магию" можно засунуть в свой стартап. Eddy_Em(399 знак., 04.07.2023 12:19)
- Если диапазон известен (условно не более 9, или 19, какая разница?), то заготовить соответствующие макросы несложно, КМК. - SciFi(04.07.2023 09:55)
- Ооо, препроцессорная магия. Пока fk0 тут был, он тоже постил что-то
похожее. - SciFi(04.07.2023 09:51)
- Есть такая штука - BOOSTPP, при изучении мозги в трубочку заворачиваются :-) - LightElf(04.07.2023 10:15)
- Я знаю, что вы внимательны к деталям, поэтому поясню: _SZ в
пределах 3..9 ориентировочно. И места в прошивке хватает. Dingo(244 знак., 04.07.2023 09:49, ссылка)
- И ещё один аргумент. Код "a[0] = myconst; a[1] = myconst; ...
a[100500] = myconst;" скорее всего превратится в такую же простыню
машинного кода. Некрасиво. - SciFi(04.07.2023 08:32)
- Ох-хо-хо, это же вспоминать, въезжать заново! делал под Win
генерацию рецептов бетонов на основе csv, из одного делал
несколько, которые уже в среде использовал. Чем хорош - под win
один exe-файл. Но опять же: вдруг можно штатными средствами? - Dingo(04.07.2023 08:00)
- Как мемсет поможет со значениями 16 или 32 бита? Баш - хорош, но по
сути это свой макропроцессор. :-/ Как бы вы сделали с его помощью? - Dingo(04.07.2023 07:52)