Уже известный здесь товарищ Антон проводит акцию на покупку припоев Kaina:
Ссылка на магазин вб: https://www.wildberries.ru/catalog/500451073/
Условия: один человек — один заказ, максимальная сумма компенсации до 700 руб.
Ссылка на группу Антона для заказов JLCPCB / LCSC: https://t.iss.one/+Py0_y6RJKSA0NmRi
  
  Я только что вышел на вб и хочу сделать вам взаимовыгодное предложение. При заказе припоя ( 50 или 100 гр) и написании отзыва я возвращаю 70% стоимости вам на карту или депозит для заказа печатных плат.
Ссылка на магазин вб: https://www.wildberries.ru/catalog/500451073/
Условия: один человек — один заказ, максимальная сумма компенсации до 700 руб.
Ссылка на группу Антона для заказов JLCPCB / LCSC: https://t.iss.one/+Py0_y6RJKSA0NmRi
www.wildberries.ru
  
  Припой KAINA 60/40 2 мм с флюсом CF-10, 50 гр,
  Вес указан с учетом катушки 
Припой KAINA 60/40 с флюсом CF-10 – это идеальное решение для качественного и надежного пайки в самых различных проектах. Данный припой обеспечивает точность и легкость в работе, что особенно важно при выполнении мелких и сложных…
Припой KAINA 60/40 с флюсом CF-10 – это идеальное решение для качественного и надежного пайки в самых различных проектах. Данный припой обеспечивает точность и легкость в работе, что особенно важно при выполнении мелких и сложных…
Forwarded from letters to robot (Artsiom K)
KiCanvas
Просмотрщик для гит репозиториев с кикадовскими проектами.
Открыт, написан на Typescript, но пока что в альфа стадии и поддерживает только GitHub.
https://kicanvas.org
KiCanvas is an interactive , browser-based viewer for KiCAD schematics and boards.
Просмотрщик для гит репозиториев с кикадовскими проектами.
Открыт, написан на Typescript, но пока что в альфа стадии и поддерживает только GitHub.
https://kicanvas.org
🔥4👍2
  Forwarded from Единички Нолики
  
Эстетически прекрасное руководство по LaTeX для полных новичков.
Легко читается и хорошая подборка ссылок и литературы, куда идти за конкретными темами. Самое главное, оно написано из 2020х, с учетом современных реалий.
[pdf] [github]
Легко читается и хорошая подборка ссылок и литературы, куда идти за конкретными темами. Самое главное, оно написано из 2020х, с учетом современных реалий.
[pdf] [github]
🔥9
  Forwarded from Схемотехника и технологии
Приехала собранная плата веб камеры. Очень волнующий момент, когда держишь в руках собранную плату, а недавно это был проект в Altium :)
Сейчас надо будет сделать первый запуск нового железа, вот шаги которых я придерживаюсь:
1. Визуальный осмотр. С лупой и хорошим светом ищу микроскопические "сопли" припоя, проверяю правильность установки транзисторов, диодов, микросхем и.т.д. Плата должна быть идеально чистой.
2.Прозвонка на КЗ. Самый важный шаг перед подачей питания. Мультиметр в режиме измерения сопротивления между VCC и GND на всех источниках питания. Если сопротивление высокое - можно двигаться дальше.
3.Безопасное первое включение. Никогда не включаю сразу в розетку или USB. Только лабораторный блок питания с минимальным лимитом тока 50-100 мА. Это лучшая защита от "волшебного дыма". Измеряю напряжение на всех источниках.
4. Подключаю программатор и пробую определить чип. Если он отозвался это 90% успеха! Значит, питание в норме и кварц завелся. Можно переходить к тестированию с софтом.
Сейчас надо будет сделать первый запуск нового железа, вот шаги которых я придерживаюсь:
1. Визуальный осмотр. С лупой и хорошим светом ищу микроскопические "сопли" припоя, проверяю правильность установки транзисторов, диодов, микросхем и.т.д. Плата должна быть идеально чистой.
2.Прозвонка на КЗ. Самый важный шаг перед подачей питания. Мультиметр в режиме измерения сопротивления между VCC и GND на всех источниках питания. Если сопротивление высокое - можно двигаться дальше.
3.Безопасное первое включение. Никогда не включаю сразу в розетку или USB. Только лабораторный блок питания с минимальным лимитом тока 50-100 мА. Это лучшая защита от "волшебного дыма". Измеряю напряжение на всех источниках.
4. Подключаю программатор и пробую определить чип. Если он отозвался это 90% успеха! Значит, питание в норме и кварц завелся. Можно переходить к тестированию с софтом.
🔥15❤1
  любимая книга Андрея @hardware_design в удобном веб-формате. есть ощущение, что зумерскому мозгу намного легче воспринимать текстовую информацию с html-страничек. 
https://the-epic-file.com/text/bookz/aoe_3/aoe3_contents.htm
https://the-epic-file.com/text/bookz/aoe_3/aoe3_contents.htm
❤11😁4
  Forwarded from встраиваемый АлиЭкспресс | embedded AliExpress
Подборка паяльников до 3 тыс. руб. Цены меняются, во время распродаж могут составлять 2300 — 2700 руб.
🟡  Pine64 Pinecil V1 — линк
Без лишних слов, современная классика.
🟡 Miniware TS21 — линк
Относительно новый продукт от создателей TS101, опережает большого брата по многим параметрам, включая и цену.
🟡 Станция WEP 982V — линк
Самый интересный для меня вариант с тремя типами жал и версией для работы от АКБ.
🟡 Sequre S99 — линк
Текущий выбор админа, 150Вт в форм-факторе ручки для письма, мощность и удобство.
🟡 Sequre SI012 — линк
Паяльник того же производителя, но с поддержкой всем хорошо знакомых типов жал T12 и TS. Подойдет скорее тем, кто уже имеет подобные жала среди своих инструментов и хочет продолжить ими пользоваться.
🟡 Sequre SI012 Pro — линк
Попытка понять его отличия от версии не Pro провалилась. Та же модель в непрозрачном корпусном исполнении. К сожалению, пост не является рекламой бренда Sequre, но так вышло, что из новых малоизвестных производителей мой выбор пал именно на него.
💬 Встраиваемый Алик
Без лишних слов, современная классика.
Относительно новый продукт от создателей TS101, опережает большого брата по многим параметрам, включая и цену.
Самый интересный для меня вариант с тремя типами жал и версией для работы от АКБ.
Текущий выбор админа, 150Вт в форм-факторе ручки для письма, мощность и удобство.
Паяльник того же производителя, но с поддержкой всем хорошо знакомых типов жал T12 и TS. Подойдет скорее тем, кто уже имеет подобные жала среди своих инструментов и хочет продолжить ими пользоваться.
Попытка понять его отличия от версии не Pro провалилась. Та же модель в непрозрачном корпусном исполнении. К сожалению, пост не является рекламой бренда Sequre, но так вышло, что из новых малоизвестных производителей мой выбор пал именно на него.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥7
  камбэк года
  
  Telegram
  
  Okhsunrog's Logs
  Админ жив, канал не умер. Был трудный период в жизни, но сейчас постараюсь продолжать постить в канал.
Из новостей – я уже не в embedded, теперь я backend разработчик в VK Tech. Наконец-то Rust – мой основной язык. Личные проекты в области embedded, естественно…
Из новостей – я уже не в embedded, теперь я backend разработчик в VK Tech. Наконец-то Rust – мой основной язык. Личные проекты в области embedded, естественно…
1❤5
  Forwarded from Канал схемотехника-программиста (Дмитрий Кузьмичев)
  
Особенности микроконтроллеров от Espressif💎
Речь пойдёт именно о серии ESP32.
- ESP32 - только у него есть классический Bluetooth, годится для многих классических применений, в частности, для Bluetooth-аудиосистем
- ESP32S2 - может удерживать подключение к WiFi даже находясь в некоторых спящих режимах, но одноядерный во всех вариациях; первый контроллер с поддержкой Flash до 128 МБ, интерфейсом под дисплей и USB
- ESP32S3 - 2 ядра и варианты с бОльшим количеством Flash и PSRAM (PSRAM до 16 МБ); даа варианта ULP-сопроцессора: FSM (который на ассемблере), и RISC-V
- ESP32C3 - первый контроллер на RISC-V-ядре; как правило, имеют встроенную Flash на 4 МБ
- ESP32C6 - первый контроллер с поддержкой WiFi 6 (но только в 2.4 ГГц)
- ESP32H2 - контроллер с беспроводным интерфейсом, но без WiFi, только BLE/ZigBee/Thread
- ESP32P4 - первый контроллер со вторым USB 2.0, есть MIPI-интерфейсы под дисплей и камеру, Ethernet, но нет своего беспроводного интерфейса (если нужен, подключается внешний контроллер с беспроводным интерфейсом и используется esp-hosted)
- ESP32C5 - первый контроллер с 5 ГГц
Речь пойдёт именно о серии ESP32.
- ESP32 - только у него есть классический Bluetooth, годится для многих классических применений, в частности, для Bluetooth-аудиосистем
- ESP32S2 - может удерживать подключение к WiFi даже находясь в некоторых спящих режимах, но одноядерный во всех вариациях; первый контроллер с поддержкой Flash до 128 МБ, интерфейсом под дисплей и USB
- ESP32S3 - 2 ядра и варианты с бОльшим количеством Flash и PSRAM (PSRAM до 16 МБ); даа варианта ULP-сопроцессора: FSM (который на ассемблере), и RISC-V
- ESP32C3 - первый контроллер на RISC-V-ядре; как правило, имеют встроенную Flash на 4 МБ
- ESP32C6 - первый контроллер с поддержкой WiFi 6 (но только в 2.4 ГГц)
- ESP32H2 - контроллер с беспроводным интерфейсом, но без WiFi, только BLE/ZigBee/Thread
- ESP32P4 - первый контроллер со вторым USB 2.0, есть MIPI-интерфейсы под дисплей и камеру, Ethernet, но нет своего беспроводного интерфейса (если нужен, подключается внешний контроллер с беспроводным интерфейсом и используется esp-hosted)
- ESP32C5 - первый контроллер с 5 ГГц
🔥7👍1
  Forwarded from ХуторянинЪ в АйТи
  
#bootloader #bluepill
Поправил амурский бутлоадер для того чтоб он подходил для BluePill-MIK32 🔥
В файле bootloader.c добавил дефайн, для ELBEAR'a - BOOT_UART_0, для BluePill - BOOT_UART_1 👈
В Makefile в OPENOCD_CFG необходимо выбрать m-link для ELBEAR’a или blue_prog для BluePill 🙃
Заморочки были с флеш памятью, разобрался наконец-то, для BluePill выставил режим QSPI, для ELBEAR'а подходит QPI 🤷♂
Ну и основной нюанс, это то что на "таблетке" нет ноги DTR на TTL-конвертере, это значит что в начале загрузки нужно жать кнопку ресет, главное вовремя попасть. Я быстро приловчился и у вас получится 😉
Поправил амурский бутлоадер для того чтоб он подходил для BluePill-MIK32 🔥
В файле bootloader.c добавил дефайн, для ELBEAR'a - BOOT_UART_0, для BluePill - BOOT_UART_1 👈
В Makefile в OPENOCD_CFG необходимо выбрать m-link для ELBEAR’a или blue_prog для BluePill 🙃
Заморочки были с флеш памятью, разобрался наконец-то, для BluePill выставил режим QSPI, для ELBEAR'а подходит QPI 🤷♂
Ну и основной нюанс, это то что на "таблетке" нет ноги DTR на TTL-конвертере, это значит что в начале загрузки нужно жать кнопку ресет, главное вовремя попасть. Я быстро приловчился и у вас получится 😉
🔥3
  Forwarded from Бракованные детали
Сегодня попался, наверное, самый подробный гайд по основам проектирования для 3D-печати (FDM/FFF) из всех какие я видел. 
Монументальный, отлично структурированный и красиво оформленный пост в блоге (с чеклистом!), который построен по принципу: золотое правило + его иллюстрированное объяснение. Таких правил там больше 40 штук.
Это не мейнстрим советы для новичков о том как избавиться от узинга и варпинга в подаренном на день рождения принтере, а набор коротких заметок о том как чертить, чтобы хорошо печаталось, выглядело, работало и не разваливалось. Особенно радует, что в гайде сделан акцент на функциональные детали, а не на low-poly фигурки покемонов и цветочные горшки.
Если честно, некоторые кусочки я бы предложил почитать даже тем инженерам по механике, которые проектируют под субтрактивные способы производства и даже литьё. А то бывает такое начертят, что потом стыдно китайцам показывать. 😀
Уверен: каждый найдёт там для себя что-то новое и полезное. Страница отлично сохраняется в pdf, если вы такое любите.
https://blog.rahix.de/design-for-3d-printing/
  
  Монументальный, отлично структурированный и красиво оформленный пост в блоге (с чеклистом!), который построен по принципу: золотое правило + его иллюстрированное объяснение. Таких правил там больше 40 штук.
Это не мейнстрим советы для новичков о том как избавиться от узинга и варпинга в подаренном на день рождения принтере, а набор коротких заметок о том как чертить, чтобы хорошо печаталось, выглядело, работало и не разваливалось. Особенно радует, что в гайде сделан акцент на функциональные детали, а не на low-poly фигурки покемонов и цветочные горшки.
Если честно, некоторые кусочки я бы предложил почитать даже тем инженерам по механике, которые проектируют под субтрактивные способы производства и даже литьё. А то бывает такое начертят, что потом стыдно китайцам показывать. 😀
Уверен: каждый найдёт там для себя что-то новое и полезное. Страница отлично сохраняется в pdf, если вы такое любите.
https://blog.rahix.de/design-for-3d-printing/
blog.rahix.de
  
  Design for 3D-Printing - Rahix' Blog
  Deep dive into mechanical design that is optimized for 3d-printing.
3👍10❤4
  Forwarded from Okhsunrog's Logs
Написал статью на Хабр про мой archinstall_zfs, предлагаю заценить :)
https://habr.com/ru/articles/942396/
  
  https://habr.com/ru/articles/942396/
Хабр
  
  Arch Linux на ZFS для людей: новый TUI-установщик archinstall_zfs
  Установка Arch Linux на ZFS всегда была не очень тривиальным делом: нужно знать много тонкостей, прочитать кучу статей и различные вики, разобраться с флагами создания датасетов и...
🔥4❤1
  Forwarded from Embedded Doka (Dmitry Murzinov)
Чувак заморочился и полностью разреверсил Raspberry Pi Compute Module 5 gen
🐱 https://github.com/schlae/cm5-reveng
Fun facts:
▫️Для выполнения работы использовались: сканер 9600 DPI, LCR-метр и VNA
▫️Схематик и PCВ выполнены в KiCad 9.
▫️PCВ 10-ти слойная (использованы buried via и microvia)
▫️Резисторы задания размера RAM & FLASH не 0-омные: каждая потенциальная позиция должна иметь специфический номинал и образует делитель, напряжение с которого считывается встроенным в RP1 АЦП
▫️Между BCM2712 и RP1 используется загадочный интерфейс на диффпарах (автор проекта предполагает что это PCIe)
▫️Использован очень навороченный PMIC (хотя кажется это тенденция последних лет 10), автор намерен похекать его I2C карту регистров
▫️Не использовать для воспроизводства: для высокоскоростных цепей не везде учтён Signal Integrity, некоторые футпринты "приблизительные"
@embedoka
Fun facts:
▫️Для выполнения работы использовались: сканер 9600 DPI, LCR-метр и VNA
▫️Схематик и PCВ выполнены в KiCad 9.
▫️PCВ 10-ти слойная (использованы buried via и microvia)
▫️Резисторы задания размера RAM & FLASH не 0-омные: каждая потенциальная позиция должна иметь специфический номинал и образует делитель, напряжение с которого считывается встроенным в RP1 АЦП
▫️Между BCM2712 и RP1 используется загадочный интерфейс на диффпарах (автор проекта предполагает что это PCIe)
▫️Использован очень навороченный PMIC (хотя кажется это тенденция последних лет 10), автор намерен похекать его I2C карту регистров
▫️Не использовать для воспроизводства: для высокоскоростных цепей не везде учтён Signal Integrity, некоторые футпринты "приблизительные"
@embedoka
Please open Telegram to view this post
    VIEW IN TELEGRAM
  🔥8❤1
  Forwarded from на нашей фабричке...
Вот нам с вами повезло работать на рынке, на котором государство разбрасывает деньги с вертолёта, чтобы потом пересажать, всех, кто эти деньги неосторожно забирал.
На рынке, где госбанки раздают десятки и сотни миллиардов кредитов дутым компаниям, чтобы потом обанкротить и забрать себе.
На рынке, где в коммерческом сегменте ты конкурируешь с дешеёвыми и быстрыми китайцами, а в госсекторе — с теми, кто взял денег у государства и госбанков.
С другой стороны, никто не обещал, что будет легко. Вот в какой-нибудь Киргизии или Нигерии вообще никакой электроники нет, всё везут из Китая.
На рынке, где госбанки раздают десятки и сотни миллиардов кредитов дутым компаниям, чтобы потом обанкротить и забрать себе.
На рынке, где в коммерческом сегменте ты конкурируешь с дешеёвыми и быстрыми китайцами, а в госсекторе — с теми, кто взял денег у государства и госбанков.
С другой стороны, никто не обещал, что будет легко. Вот в какой-нибудь Киргизии или Нигерии вообще никакой электроники нет, всё везут из Китая.
💯10 6💩2 2
  Forwarded from Tänään ja ensi viikkona
Принято считать, что язык Си очень простой. Оригинальная книжечка Кернигана и Ритчи — это всего 200 страниц. Однако, учитывая специфику применения Си (низкоуровневые приложения), здесь можно найти немало тонкостей, о которых мало где слышно. 
Я решил написать несколько заметок о неочевидных приколах языка Си.
Я решил написать несколько заметок о неочевидных приколах языка Си.
🔥7❤2👍2
  Forwarded from Tänään ja ensi viikkona
⚡️Битовые поля.
Часто одна байтовая переменная содержит несколько значащих бит, обозначающих что-то сепаратное, и эти биты обычно приходится выделять масками. Не приходится, если использовать битовые поля.
Пример.
Ответ SD-карты типа R1 легко разобрать побитово, если байтовый ответ присвоить члену
Часто одна байтовая переменная содержит несколько значащих бит, обозначающих что-то сепаратное, и эти биты обычно приходится выделять масками. Не приходится, если использовать битовые поля.
Пример.
typedef union
{
uint8_t all;
struct
{
uint8_t idle_state : 1;
uint8_t erase_reset : 1;
uint8_t illegal_command : 1;
uint8_t crc_error : 1;
uint8_t erase_sequence_error : 1;
uint8_t address_error : 1;
uint8_t parameter_error : 1;
uint8_t __res : 1;
};
} MIK32SD_R1_Response_TypeDef;
Ответ SD-карты типа R1 легко разобрать побитово, если байтовый ответ присвоить члену
all, а затем в отдельных if'ах проверить каждый бит.🔥7
  Forwarded from Tänään ja ensi viikkona
⚡️alignment
В большинстве современных систем минимальный адресуемый объём информации — один байт. Как удобно было работать с восьмиразрядками, у которых машинное слово — тоже один байт! Можно было безболезненно и просто обращаться к любой ячейке памяти.
С ростом разрядности процессора появляется проблема. Процессор обязан уметь читать и записывать объём информации, равный машинному слову, за одну инструкцию, иначе профит от увеличения разрядности во многом теряется. Но при этом нужно уметь читать и записывать байтную информацию, это удобно для многих приложений, скажем, для работы с ascii-строками. Если процессор 32-разрядный, то хорошо бы ещё уметь адресовать 16-битные полуслова, так как некоторые переменные целесообразно делать именно 16-битными. Итого имеем множество способов обращения в память, и сделать устройство управления, которое допускало бы все сценарии обращений, очень тяжело.
Выход: сделать систему чтения памяти, которая всегда читала бы 32-разрядное слово, чей адрес описывается битами A31-A2. При команде
Собственно, так и сделано в RISC-V.
Из минусов: команда lw применима только к двоичным адресам, которые оканчиваются на 2 нуля. То есть, обратиться в ячейку 0x1234 можно, а 0x1235 — нет, процессор выкинет исключение "load address misaligned", "адрес загрузки не выровнен". Аналогичная ситуация с командой lh, она неприменима к нечетным адресам.
Компилятор, зная данную особенность процессора, размещает переменные в памяти как надо, чтобы не вызывать конфликтов выравнивания при обращении и использовать статическую память оптимально.
Однако есть 2 вещи, где порядок переменных пользователь определяет сам: структуры и аргументы функций. Аргументы функций сейчас трогать не будем, а вот структуры рассмотрим подробнее.
Я создал тип данных-структуру:
И вроде бы она должна занимать в памяти 4+1+4+1+1=11 байт, но если посмотреть размер через sizeof, получим:
На поле
5 байт драгоценной ОЗУ улетели в трубу. Ужас!
Иногда экономия памяти важнее производительности, и на этот случай в компиляторах GCC существует атрибут packed:
В этом случае структура будет плотно "сжата", и пустышек не будет:
Но в то же время обращение к полю
Здесь компилятору приходится вводить лишь одну пустышку, и память удается сэкономить.
В большинстве современных систем минимальный адресуемый объём информации — один байт. Как удобно было работать с восьмиразрядками, у которых машинное слово — тоже один байт! Можно было безболезненно и просто обращаться к любой ячейке памяти.
С ростом разрядности процессора появляется проблема. Процессор обязан уметь читать и записывать объём информации, равный машинному слову, за одну инструкцию, иначе профит от увеличения разрядности во многом теряется. Но при этом нужно уметь читать и записывать байтную информацию, это удобно для многих приложений, скажем, для работы с ascii-строками. Если процессор 32-разрядный, то хорошо бы ещё уметь адресовать 16-битные полуслова, так как некоторые переменные целесообразно делать именно 16-битными. Итого имеем множество способов обращения в память, и сделать устройство управления, которое допускало бы все сценарии обращений, очень тяжело.
Выход: сделать систему чтения памяти, которая всегда читала бы 32-разрядное слово, чей адрес описывается битами A31-A2. При команде
lw (чтение 32 бит) слово сразу бы передавалось в регистр. При команде lb (чтение 8 бит) конкретный байт выбирался бы битами A1 и A0 и передавался бы в младший значащий байт регистра. При команде lh (чтение 16 бит) нужное полуслово выбиралось бы битом A1 и следовало бы в младшее значащее полуслово регистра.Собственно, так и сделано в RISC-V.
Из минусов: команда lw применима только к двоичным адресам, которые оканчиваются на 2 нуля. То есть, обратиться в ячейку 0x1234 можно, а 0x1235 — нет, процессор выкинет исключение "load address misaligned", "адрес загрузки не выровнен". Аналогичная ситуация с командой lh, она неприменима к нечетным адресам.
Компилятор, зная данную особенность процессора, размещает переменные в памяти как надо, чтобы не вызывать конфликтов выравнивания при обращении и использовать статическую память оптимально.
Однако есть 2 вещи, где порядок переменных пользователь определяет сам: структуры и аргументы функций. Аргументы функций сейчас трогать не будем, а вот структуры рассмотрим подробнее.
Я создал тип данных-структуру:
typedef struct
{
uint32_t dummy1; //4
uint8_t dummy2; //1
uint32_t dummy3; //4
uint8_t dummy4; //1
uint8_t dummy5; //1
} my_struct_t;
И вроде бы она должна занимать в памяти 4+1+4+1+1=11 байт, но если посмотреть размер через sizeof, получим:
Size of struct: 16
Object address: 02003FE0
На поле
dummy1 компилятор выделяет 4 байта. Адрес начала объекта-структуры делится на 4 нацело. Если бы на dummy2 был выделен 1 байт, то абсолютный адрес dummy3 уже не был бы кратен 4, и процессор не смог бы быстро читать поле dummy3. Поэтому на dummy2 выделяется аж 4 байта, где 3 байта никак не используются, это пустышки. Чтобы адреса переменных за структурой были так же выровнены, после полей dummy4 и dummy5 идут еще 2 байта-пустышки. Итого получаем 16.5 байт драгоценной ОЗУ улетели в трубу. Ужас!
Иногда экономия памяти важнее производительности, и на этот случай в компиляторах GCC существует атрибут packed:
typedef struct __attribute__((packed))
{
uint32_t dummy1; //4
uint8_t dummy2; //1
uint32_t dummy3; //4
uint8_t dummy4; //1
uint8_t dummy5; //1
} my_struct_t;
В этом случае структура будет плотно "сжата", и пустышек не будет:
Size of struct: 11
Object address: 02003FE4
Но в то же время обращение к полю
dummy3 очень сильно усложнится. Для простого чтения поля процессору придется дважды читать 32-разрядные ячейки, дважды применять инструкцию сдвига и еще применить инструкцию логического ИЛИ. Атрибут packed — это очень радикальная вещь, и лучше его не использовать. Вместо этого предлагается оптимальнее расставлять переменные в структуре.typedef struct
{
uint32_t dummy1; //4
uint32_t dummy3; //4
uint8_t dummy2; //1
uint8_t dummy4; //1
uint8_t dummy5; //1
} my_struct_t;
Здесь компилятору приходится вводить лишь одну пустышку, и память удается сэкономить.
Size of struct: 12
Object address: 02003FE4
🔥6