Насчет объединений. Одно из применений: typedef union { struct { unsigned char x; unsigned short y; unsigned int z;}; char data[8]; } my_arg_t; Допустим, приняли массив данных(char data[8]) по внешнему интерфейсу с известным протоколом, и с помощью объединения мгновенно распарсилось его содержимое на отдельные переменные. Вот только выравнивание компилятором структуры нам как раз тут все и испортит) Именно под такую задачу я нашел ваш ролик, про выравнивание не знал, спасибо.
Спасибо, у вас самые толковые уроки! Объединение можно ещё использовать чтоб одни и те же данные представлять разными типами. Например можно представить все данные входящие в структуру обычным массивом и записать на flash память целиком, а не отдельными полями. И потом считать так же.
Спасибо. Скажите, а int может быть не выровнен к 4, и если может, тогда процессор будет дольше с ним работать? И как дела обстоят с компилятором arm у stm. Происходит ли там автоматическое выравнивание полей структур (без команды компилятору) и если происходит, то ко скольки?
Скорее всего. Int - это условный тип, зависящий от среды его использования (не программирования). Я так понимаю, что речь идёт о кросс-компиляторе. Если у Вас есть рабочий ST-Link в качестве отладчика, то Вы вполне можете это увидеть в таком же дизассемблере. Ассемблер для arm не сильно отличается от ассемблера для Intel. Принцип один. Мне просто это было не надо, поэтому я, к сожалению, не смотрел.
Насчет объединений. Одно из применений:
typedef union
{
struct {
unsigned char x;
unsigned short y;
unsigned int z;};
char data[8];
} my_arg_t;
Допустим, приняли массив данных(char data[8]) по внешнему интерфейсу с известным протоколом, и с помощью объединения мгновенно распарсилось его содержимое на отдельные переменные. Вот только выравнивание компилятором структуры нам как раз тут все и испортит) Именно под такую задачу я нашел ваш ролик, про выравнивание не знал, спасибо.
Спасибо, каждый урок - в радость)
Спасибо, у вас самые толковые уроки! Объединение можно ещё использовать чтоб одни и те же данные представлять разными типами. Например можно представить все данные входящие в структуру обычным массивом и записать на flash память целиком, а не отдельными полями. И потом считать так же.
интересный разбор структур :-) спасибо
Спасибо !
а каким тогда образом можно получить адрес при big-endian?
Спасибо. Скажите, а int может быть не выровнен к 4, и если может, тогда процессор будет дольше с ним работать? И как дела обстоят с компилятором arm у stm. Происходит ли там автоматическое выравнивание полей структур (без команды компилятору) и если происходит, то ко скольки?
Скорее всего. Int - это условный тип, зависящий от среды его использования (не программирования). Я так понимаю, что речь идёт о кросс-компиляторе. Если у Вас есть рабочий ST-Link в качестве отладчика, то Вы вполне можете это увидеть в таком же дизассемблере. Ассемблер для arm не сильно отличается от ассемблера для Intel. Принцип один.
Мне просто это было не надо, поэтому я, к сожалению, не смотрел.
Спасибо! У меня к вам вопрос, сможете сделать видео на динамическое выделение памяти ? Трудно в понимании дается.
И Вам спасибо за интерес к ресурсу!
Управление памятью есть в плане.