Перейти к содержанию
    

Как отучить IAR использовать регистры FPU где не нужно?

Здесь ключевой момент (как я показывал вначале): чтобы размер структуры был кратен 32 байтам - тогда видимо и используется FPU.

Тут вы ошибаетесь, поэкспериментируйте еще. С размерами все сложнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут вы ошибаетесь, поэкспериментируйте еще. С размерами все сложнее.

Поэкспериментировать в чём? Я же показал в каком случае 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это еще зачем?

Ведь структурные типы можно присваивать друг другу.

У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня одна структура является копией части другой.

А почему тогда она является копией, а не частью, что было-бы логично?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды.

Вот у меня, например, кусок хедера

// структура калибровочных параметров аналогового окружения АЦП
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().

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На мой взгляд способ, когда одни структуры содержат в себе другие структуры куда удобнее. И не надо поэлементно копировать.

Тот случай когда ощущаешь недостаток движка форума, не позволяющего ставить лайк или плюс сообщению... :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тот случай когда ощущаешь недостаток движка форума, не позволяющего ставить лайк или плюс сообщению... :rolleyes:

Кстати, где-то мелькало вроде это предложение уже в соответствующем разделе. В общем-то было бы неплохо, ИМХО =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, не так поняли.

У меня есть одна структура, состоящая из многих других, помельче. Я называю суперструктура. И есть другая, подобная части первой. В первой хранятся текущие режимы работы, во второй - предыдущее состояние некоторых нужных режимов. Когда нужно обновить вторую до первой, использую указатели. Когда нужно обновить отдельные элементы, обращаюсь непосредственно к ним.

Я не против копирования структур. Напоминаю о других способах, безглючных. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не против копирования структур. Напоминаю о других способах, безглючных. :biggrin:

А я ещё раз напоминаю, что с точки зрения оптимизатора и 32 байта в виде одной структуры, и 32 байта состоящие из отдельных, но смежных переменных - это одно и то же.

Так что в почленном копировании ничего безопасного не вижу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я ещё раз напоминаю, что с точки зрения оптимизатора и 32 байта в виде одной структуры, и 32 байта состоящие из отдельных, но смежных переменных - это одно и то же.

Так что в почленном копировании ничего безопасного не вижу.

При одиночном копировании int требуется один регистр, а не группа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...