Передача структуры между NANO и ESP8266

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,412
978
58
Марий-Эл
@poty, Понятие "слово" их два.
Одно программисткое, одно машинное.
У программистом слово, чаще всего, имеет фиксированную длину.
Машинное слово может иметь любой размер. Я ковырялся с МК, где машинное слово было 12 бит.
Давно это было и неправда. :)

@bort707, Сегодня глянул. Правда оказалась как всегда по середине.
Вот что нашёл в умной книге:

2.3.6 Невыровненный Доступ к Памяти Системы команд ARM7 и ARM9 способны оперировать со знаковыми и беззнаковыми переменными в формате байта, полуслова и слова. Это позволяет ЦПУ свободно поддерживать целочисленные переменные без потребности в дополнительных библиотеках, как это обычно требуется для 8- и 16-битных микроконтроллеров. Однако ранние версии ЦПУ ARM имеют недостаток в том, что они могут осуществлять доступ к памяти с выравниванием только по словам и полусловам. Это ограничивает возможности компоновщика при уплотнении данных в SRAM, что приводит к дополнительным затратам памяти (в зависимости от числа используемых переменных, дополнительные затраты памяти могут достигать 25%).​
1657557873798.png

Cortex-M3 может осуществлять невыровненный доступ к памяти, что увеличивает эффективность использования SRAM.
ЦПУ Cortex имеет режимы адресации для слов, полуслов и байт, но он может осуществлять и невыровненный доступ к памяти. Это дает компоновщику дополнительную свободу при размещении данных программы в памяти. За счет поддержки битовой сегментации, ЦПУ Cortex может упаковывать программные флаги в переменные формата полуслова и слова и не использовать отдельный байт для каждого флага.​
Это из книги The Insaider`s guide To the STM32 ARM based microcontroller.

Кроме этого, если интересно, могу дать расположение переменных в памяти до упаковки и после. Результат довольно прикольный.​
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
А про производительность операций с невыровненными данными ничего не написано?
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,412
978
58
Марий-Эл