Да, ESP 32 битная. Вполне 6 байт на АВР могут превратится в 24 байта на ESP.
Где-то тема об этом была или здесь или на Хабре.
Короче, нюансы есть.
Надо и там и там посмотреть какой sizeof у структуры.
Проще объявить структуру #pragma pack() и не ломать голову.
Вот это у меня валило ESP в кору сразу же, как только паковать в байт начинал.
На 6-байтовой структуре?
Нужен конкретный пример. Мне кажется, если длина структуры принудительно выравнена на 4, и все поля внутри выравнены естественным образом, падать не должно.
Подробностей сейчас не помню. давненько было. Но, вроде как ESP желает ровно по 32 бита равнять.
С целыми так и должно быть. т.е. (байт, байт, целое…) - такое не пройдет.
А вот (байт, байт, короткое, целое…) - такое должно проходить.
Вобщем, я предупредил, что проблема в передаче структур между разными архитектурами возникает на изи и отлавливается проблематично.
А теперь, с вашего позволения, пойду, займусь делом.
Это вообще отдельная большая проблема и отнюдь не для новичка.
Архата на Вас нету с этим лживым компилятором
Ассемблер бы не создавал проблем)
У меня концепция проще: все передачи чего-либо куда-либо только через массив байтов.
8266, а не 32
понравилось в статье - «Язык С++ достаточно сложен, чтобы позволить нам писать на нём просто»
Ага. Иногда кажется, что Си++ развивают под наркотиками. Не каждый опытный спец разберётся)
У ТС ESP-01, не?
видел
а вот такого не видал. Отдельные переменные будут выравнены по границе слова, а вот байты внутри структуры - только если в ней есть элементы длиной пол-слова и целое слово. Чтобы внутри структуры каждый отдельный байт выравнивался - такого не видал и думаю что и не бывает. Четыре элемента длиной в байт по умолчанию пакуются в слово, иначе память бы расходовалась неоптимально.
Добавлю - то же самое относится и к массивам. Или кто-то считает, что байтовый массив в 1000 элементов на ЕСП занимает 4К?
Похоже, “о своём, о девичьем” ![]()
Я тоже не видел. Только слышал.
Выравнивание - по определению неоптимально расходует память. Так что не вижу здесь противоречий.
По крайней мене, архитектуры, где байты выравниваются на 2, в природе существуют.
80186/88?
Нет. Но тоже 16-разрядные.
Ну нинаю, выравнивание на 2 видел тока у 8086/8 и Z280. Больше такова не припомню. Всё остальное, с чем довелось иметь дело, выравнивали либо на 1, либо на 4 байта.
Upd. С Motorola не имел дела, после изучения системы команд. ![]()