- 
	
- Это ARM, братан! Используй упакованную структуру. Смотри директиву
#pragma pack - IBAH(14.05.2024 16:32)
			
- В CMSIS нонче есть несколько оберток портабельных: __PACKED_STRUCT,
__PACKED_UNION и что-то рядом. Использование же pragma pack,
например, в хедерах, это, мягко говоря, неаккуратненько, да и между
компилерами не очень портабельно. Я стараюсь обходиться без паков.
Хотя и приходится чужой код поддерживать с наличием. - Vit(15.05.2024 11:11)
					
- Самые-самые обёртки в lwip: SciFi(379 знак., 15.05.2024 14:51)
 - Осталось найти компилятор, не понимающий #pragma pack(push, 1) - LightElf(15.05.2024 12:22)
							
- Keil - Vit(15.05.2024 14:01)
									
- Я кейл только для 8051 использую, а там оно не надо. - LightElf(15.05.2024 14:37)
											
- у меняя всё сильно хуже - составные части нескольких проектов берут
начало от проекта на IAR для C51, потом проекты разошлись на IAR
AVR и Keil C51, были ответвления на IAR MSP430, туча похожих на
ARM7TDMI, CM3, CM4, CM7, Xtensa, сейчас вот на CM23, причём на
разных компиляторах. приходится в этом 
бардакезоопарке как-то разруливать... приходится где-то выбивать с ноги ручные выравнивания, где-то паковать... - Vit(15.05.2024 14:59)- Ну оно ж один раз поправить хедеры  LightElf(106 знак., 15.05.2024 15:35)
															
- :) - Vit(15.05.2024 22:24)
 - Ни-фи-га! Не один раз. Там поползень - птица такая... :) - bnb62(15.05.2024 15:51)
																	
- На каждый новый проц/компилятор править, но в одном месте. - LightElf(15.05.2024 15:52)
 
 
 
 - Ну оно ж один раз поправить хедеры  LightElf(106 знак., 15.05.2024 15:35)
															
 
 - у меняя всё сильно хуже - составные части нескольких проектов берут
начало от проекта на IAR для C51, потом проекты разошлись на IAR
AVR и Keil C51, были ответвления на IAR MSP430, туча похожих на
ARM7TDMI, CM3, CM4, CM7, Xtensa, сейчас вот на CM23, причём на
разных компиляторах. приходится в этом 
 - Вот Кейл  POV(1 знак., 15.05.2024 14:36, картинка)
											
- в 6-м (Clang). но опять же, оно при наличии атрибутов просто
вредно.  Vit(98 знак., 15.05.2024 14:48, ссылка, ссылка)
													
- Атрибуты менее портабельны, чем pragma. Но конечно лучше завести
какой compiler.h и в него все костыли понасувать.  LightElf(1419 знак., 15.05.2024 15:42)
															
- в CMSIS суют тучу всего, но совместимого для всех известных ему
компилеров. там нет #pragma pack и _Pragma pack. не сростается
объять. именно из-за непортируемости. зато атрибуты __PACKED есть.
ЗЫ _Pragma это вааще лютый intrinsic. классный по сути, но насчет
портабельности не очень. - Vit(15.05.2024 22:22)
																	
- _Pragma, кагбэ, в C99 присутствует. Уж не знаю куда больше портабельности. - LightElf(16.05.2024 20:30)
 
 
 - в CMSIS суют тучу всего, но совместимого для всех известных ему
компилеров. там нет #pragma pack и _Pragma pack. не сростается
объять. именно из-за непортируемости. зато атрибуты __PACKED есть.
ЗЫ _Pragma это вааще лютый intrinsic. классный по сути, но насчет
портабельности не очень. - Vit(15.05.2024 22:22)
																	
 
 - Атрибуты менее портабельны, чем pragma. Но конечно лучше завести
какой compiler.h и в него все костыли понасувать.  LightElf(1419 знак., 15.05.2024 15:42)
															
 
 - в 6-м (Clang). но опять же, оно при наличии атрибутов просто
вредно.  Vit(98 знак., 15.05.2024 14:48, ссылка, ссылка)
													
 
 - Я кейл только для 8051 использую, а там оно не надо. - LightElf(15.05.2024 14:37)
											
 
 - Keil - Vit(15.05.2024 14:01)
									
 - Я использую исключительно GCC, и там можно использовать атрибут для
конкретной структуры. Теоретически, можно сделать структуру из
нескольких вложенных структур, часть которых будет упакованными,
часть - нет. Использую упакованные когда нужно передать по каналам
связи или сохранить в изнашиваемую память. - Nikolay_Po(15.05.2024 11:16)
							
- вот эти __PACKED_STRUCT и т.п. это обертки для атрибутов, но не для
прагмы - Vit(15.05.2024 13:48)
									
- Для прагмы есть _Pragma - LightElf(15.05.2024 14:33)
											
- костыль на костыле и костылём погоняет. - Vit(15.05.2024 14:43)
 
 
 - Для прагмы есть _Pragma - LightElf(15.05.2024 14:33)
											
 
 - вот эти __PACKED_STRUCT и т.п. это обертки для атрибутов, но не для
прагмы - Vit(15.05.2024 13:48)
									
 
 - Я предпочитаю не связываться с паками - упаковываю в массив и назад
распаковываю. - vesago(14.05.2024 19:32)
					
- В массив это как? Вручную назначая значения, поэлмементно? - Nikolay_Po(15.05.2024 10:51)
							
- Ну да memcpy... Понимаю, звучит так себе. Но у меня проекты на
разных платформах. Легче потом портировать. - vesago(15.05.2024 10:55)
									
- Если для разных платформ то при сериализации нужно ещё и порядок байт в слове учитывать. Был такой опыт и это не то что хочется часто повторять. Я предпочитаю по каналам связи передавать текстом. - =AlexD=(15.05.2024 13:41)
 - Звучит нормально. Проект под несколько платформ полностью оправдывает подход. memcpy будет библиотечным и адаптированным под платформу автоматически. Остальное сработает как надо, кроме, пожалуй что разницы в порядке бит и байт при передаче по внешним интерфейсам. - Nikolay_Po(15.05.2024 10:58)
 
 
 - Ну да memcpy... Понимаю, звучит так себе. Но у меня проекты на
разных платформах. Легче потом портировать. - vesago(15.05.2024 10:55)
									
 
 - В массив это как? Вручную назначая значения, поэлмементно? - Nikolay_Po(15.05.2024 10:51)
							
 - Маленький лайфхак. Располагать элементы структуры надо по размеру
4-2-1, тогда тормозить не будет. Точнее: int32 смещение на величину
кратную 4 байтам, int16 на 2 байта итд - IBAH(14.05.2024 17:32)
					
- Я это уже на автомате делаю, не задумываясь, иначе структуры
кажутся мне "уродливыми". - =AlexD=(14.05.2024 17:37)
							
- а я шоб не накосячить, делаю так IBAH(1200 знак., 14.05.2024 17:55)
 
 
 - Я это уже на автомате делаю, не задумываясь, иначе структуры
кажутся мне "уродливыми". - =AlexD=(14.05.2024 17:37)
							
 - +1 нафига памятью разбрасываться и время расчёта crc увеличивать?
Вся структура должна занимать 4 байта в массиве. Я бы и лишний байт
подвязал бы для пользы дела. - =AlexD=(14.05.2024 16:39)
					
- Так в результате и сделал. Добавил pad byte. Так оказалось удобнее в eeprom писать, если на 4 байта выровнено, можно пачками по 4 байта писать. Спасибо! - Mty1(15.05.2024 00:10)
 - Каждый доступ к структуре будет медленнее из-за pack. А вы тут про
время расчёта CRC рассуждаете. И код будет больше - вот такая
экономия памяти. Прекрасный образец двоемыслия. - SciFi(14.05.2024 16:45)
							
- У нас не ARM v2 - =AlexD=(14.05.2024 16:48)
									
- Дело вкуса, конечно. Pragma pack имеет свои минусы (в том числе
переносимость плюс пляски с хедерами и объявлениями в разных
файлах). А плюсы, которые ему приписывают, на практике нужны крайне
редко, и минусы перевешивают. Но хозяин - барин. - SciFi(14.05.2024 16:51)
											
- С переносимость всё гораздо лучше с упакованной, чем без, остальное вообще ни а чом. Но, да, дело фкуса. - =AlexD=(14.05.2024 16:52)
 
 
 - Дело вкуса, конечно. Pragma pack имеет свои минусы (в том числе
переносимость плюс пляски с хедерами и объявлениями в разных
файлах). А плюсы, которые ему приписывают, на практике нужны крайне
редко, и минусы перевешивают. Но хозяин - барин. - SciFi(14.05.2024 16:51)
											
 
 - У нас не ARM v2 - =AlexD=(14.05.2024 16:48)
									
 
 
 - В CMSIS нонче есть несколько оберток портабельных: __PACKED_STRUCT,
__PACKED_UNION и что-то рядом. Использование же pragma pack,
например, в хедерах, это, мягко говоря, неаккуратненько, да и между
компилерами не очень портабельно. Я стараюсь обходиться без паков.
Хотя и приходится чужой код поддерживать с наличием. - Vit(15.05.2024 11:11)
					
 - Мусор легко может быть. Но какое отношение он имеет к CRC?
Контрольная сумма считается вместе с мусором, так что нет проблем.
Верно? - SciFi(14.05.2024 16:15)
			
- А ну да. Точно. А не получится что в следующей версии компилятора структура вдруг станет 3х байтной? - Mty1(14.05.2024 16:18)
 
 - Никак. Выравнивай по 4 байта - POV(14.05.2024 16:15)
			
- Не понял, что значит выравнивай? Писать по 4 байта? - Mty1(14.05.2024 16:19)
					
- Можно явно добавлять поля, чтобы не было неявного заполнения:  SciFi(151 знак., 14.05.2024 16:40)
							
- У него выравнивание 4, эта структура займёт 12 байт. - =AlexD=(14.05.2024 16:41)
									
- Выравниваются не поля, а вся структура. Она займет 4 байта. - POV(14.05.2024 16:44)
											
- Мапэд не мой, так и должно быть, но аффтар топика пишет буквально
следующее "каждый элемент структуры по 4 байта". - =AlexD=(14.05.2024 16:50)
													
- Очевидно, имел в виду "каждый экземпляр". - SciFi(14.05.2024 16:51)
 
 
 - Мапэд не мой, так и должно быть, но аффтар топика пишет буквально
следующее "каждый элемент структуры по 4 байта". - =AlexD=(14.05.2024 16:50)
													
 
 - Выравниваются не поля, а вся структура. Она займет 4 байта. - POV(14.05.2024 16:44)
											
 
 - У него выравнивание 4, эта структура займёт 12 байт. - =AlexD=(14.05.2024 16:41)
									
 - Смотри директиву #pragma pack - IBAH(14.05.2024 16:23)
							
- О, спасибо - Mty1(14.05.2024 16:34)
 
 
 - Можно явно добавлять поля, чтобы не было неявного заполнения:  SciFi(151 знак., 14.05.2024 16:40)
							
 
 - Не понял, что значит выравнивай? Писать по 4 байта? - Mty1(14.05.2024 16:19)
					
 
 - Это ARM, братан! Используй упакованную структуру. Смотри директиву
#pragma pack - IBAH(14.05.2024 16:32)