AlexandrY 3 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба Здесь ключевой момент (как я показывал вначале): чтобы размер структуры был кратен 32 байтам - тогда видимо и используется FPU. Тут вы ошибаетесь, поэкспериментируйте еще. С размерами все сложнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба Тут вы ошибаетесь, поэкспериментируйте еще. С размерами все сложнее. Поэкспериментировать в чём? Я же показал в каком случае FPU используется. В чём ошибаюсь? Кстати, в версии 8.30 у меня не получилось заставить использовать fpu при копировании структур. Так что тревога отменяется. В 8.30 есть более серьёзные баги. Так что использовать его не советую. Обсуждения были тут: https://electronix.ru/forum/index.php?showt...t&p=1569519 https://electronix.ru/forum/index.php?showt...147939&st=0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба Это еще зачем? Ведь структурные типы можно присваивать друг другу. У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба У меня одна структура является копией части другой. А почему тогда она является копией, а не частью, что было-бы логично? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды. Вот у меня, например, кусок хедера // структура калибровочных параметров аналогового окружения АЦП typedef struct { #define EEPROM_ADC_DEFAULT_ZERO 1.250000000 double Zero; #define EEPROM_ADC_DEFAULT_REFERENCE 2.500000000 double Reference; #define EEPROM_ADC_DEFAULT_SCALE 10.00000000 double Scale; }TADCTrueConstant; // структура загрузочных параметров в EEPROM typedef struct { TADCTrueConstant ADC220V; TADCTrueConstant ADC220C1; TADCTrueConstant ADC220C2; TADCTrueConstant ADC220C3; TADCTrueConstant ADC220C4; TADCTrueConstant ADC220C5; TADCTrueConstant ADC200VA; TADCTrueConstant ADC200VB; TADCTrueConstant ADC200VC; TADCTrueConstant ADC200CA; TADCTrueConstant ADC200CB; TADCTrueConstant ADC200CC; TOneWireROM OneWireROM[ONE_WIRE_MAX_DEVICES_ON_BUS]; unsigned int DeviceSignature[HW_MCU_SIGNATURE_SIZE]; unsigned int CRC32; }TEEPROM; Согласно Вашей логике, Вы элементы TEEPROM писали бы как подобие элементов TADCTrueConstant, после чего копировали поэлементно // структура калибровочных параметров аналогового окружения АЦП typedef struct { #define EEPROM_ADC_DEFAULT_ZERO 1.250000000 double Zero; #define EEPROM_ADC_DEFAULT_REFERENCE 2.500000000 double Reference; #define EEPROM_ADC_DEFAULT_SCALE 10.00000000 double Scale; }TADCTrueConstant; // структура загрузочных параметров в EEPROM typedef struct { double Zero_ADC220V; double Reference_ADC220V; double Scale_ADC220V; ... double Zero_ADC200CC; double Reference_ADC200CC; double Scale_ADC200CC; // эту тоже заменить на содержимое TOneWireROM, чтобы получить копию TOneWireROM OneWireROM[ONE_WIRE_MAX_DEVICES_ON_BUS]; unsigned int DeviceSignature[HW_MCU_SIGNATURE_SIZE]; unsigned int CRC32; }TEEPROM; или я что-то не так понял? На мой взгляд способ, когда одни структуры содержат в себе другие структуры куда удобнее. И не надо поэлементно копировать. Я присваиваю структуры структурам, если нужно что-то частично копирнуть, а если все нужно (например, в буфер отправки положить) - использую memcpy(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба На мой взгляд способ, когда одни структуры содержат в себе другие структуры куда удобнее. И не надо поэлементно копировать. Тот случай когда ощущаешь недостаток движка форума, не позволяющего ставить лайк или плюс сообщению... :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба Тот случай когда ощущаешь недостаток движка форума, не позволяющего ставить лайк или плюс сообщению... :rolleyes: Кстати, где-то мелькало вроде это предложение уже в соответствующем разделе. В общем-то было бы неплохо, ИМХО =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба Да, не так поняли. У меня есть одна структура, состоящая из многих других, помельче. Я называю суперструктура. И есть другая, подобная части первой. В первой хранятся текущие режимы работы, во второй - предыдущее состояние некоторых нужных режимов. Когда нужно обновить вторую до первой, использую указатели. Когда нужно обновить отдельные элементы, обращаюсь непосредственно к ним. Я не против копирования структур. Напоминаю о других способах, безглючных. :biggrin: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба Я не против копирования структур. Напоминаю о других способах, безглючных. :biggrin: А я ещё раз напоминаю, что с точки зрения оптимизатора и 32 байта в виде одной структуры, и 32 байта состоящие из отдельных, но смежных переменных - это одно и то же. Так что в почленном копировании ничего безопасного не вижу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 августа, 2018 Опубликовано 25 августа, 2018 · Жалоба А я ещё раз напоминаю, что с точки зрения оптимизатора и 32 байта в виде одной структуры, и 32 байта состоящие из отдельных, но смежных переменных - это одно и то же. Так что в почленном копировании ничего безопасного не вижу. При одиночном копировании int требуется один регистр, а не группа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться