реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Как отучить IAR использовать регистры FPU где не нужно?
AlexandrY
сообщение Aug 25 2018, 07:01
Сообщение #31


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 25 2018, 09:44) *
Здесь ключевой момент (как я показывал вначале): чтобы размер структуры был кратен 32 байтам - тогда видимо и используется FPU.

Тут вы ошибаетесь, поэкспериментируйте еще. С размерами все сложнее.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 25 2018, 07:10
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Aug 25 2018, 10:01) *
Тут вы ошибаетесь, поэкспериментируйте еще. С размерами все сложнее.

Поэкспериментировать в чём? Я же показал в каком случае FPU используется. В чём ошибаюсь?

Цитата(AlexandrY @ Aug 24 2018, 17:39) *
Кстати, в версии 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
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 25 2018, 07:34
Сообщение #33


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Arlleex @ Aug 25 2018, 09:42) *
Это еще зачем?
Ведь структурные типы можно присваивать друг другу.

У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 25 2018, 08:03
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Aug 25 2018, 10:34) *
У меня одна структура является копией части другой.

А почему тогда она является копией, а не частью, что было-бы логично?
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Aug 25 2018, 08:31
Сообщение #35


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(ViKo @ Aug 25 2018, 10:34) *
У меня одна структура является копией части другой. Вот для этого использую указатели. А целиком структуры одну в другую мне и копировать нет нужды.

Вот у меня, например, кусок хедера
Код
// структура калибровочных параметров аналогового окружения АЦП
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().
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 25 2018, 10:16
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Arlleex @ Aug 25 2018, 11:31) *
На мой взгляд способ, когда одни структуры содержат в себе другие структуры куда удобнее. И не надо поэлементно копировать.

Тот случай когда ощущаешь недостаток движка форума, не позволяющего ставить лайк или плюс сообщению... rolleyes.gif
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Aug 25 2018, 10:29
Сообщение #37


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(jcxz @ Aug 25 2018, 13:16) *
Тот случай когда ощущаешь недостаток движка форума, не позволяющего ставить лайк или плюс сообщению... rolleyes.gif

Кстати, где-то мелькало вроде это предложение уже в соответствующем разделе. В общем-то было бы неплохо, ИМХО =)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 25 2018, 10:31
Сообщение #38


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Да, не так поняли.
У меня есть одна структура, состоящая из многих других, помельче. Я называю суперструктура. И есть другая, подобная части первой. В первой хранятся текущие режимы работы, во второй - предыдущее состояние некоторых нужных режимов. Когда нужно обновить вторую до первой, использую указатели. Когда нужно обновить отдельные элементы, обращаюсь непосредственно к ним.
Я не против копирования структур. Напоминаю о других способах, безглючных. biggrin.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 25 2018, 12:16
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Aug 25 2018, 13:31) *
Я не против копирования структур. Напоминаю о других способах, безглючных. biggrin.gif

А я ещё раз напоминаю, что с точки зрения оптимизатора и 32 байта в виде одной структуры, и 32 байта состоящие из отдельных, но смежных переменных - это одно и то же.
Так что в почленном копировании ничего безопасного не вижу.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 25 2018, 12:37
Сообщение #40


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Aug 25 2018, 15:16) *
А я ещё раз напоминаю, что с точки зрения оптимизатора и 32 байта в виде одной структуры, и 32 байта состоящие из отдельных, но смежных переменных - это одно и то же.
Так что в почленном копировании ничего безопасного не вижу.

При одиночном копировании int требуется один регистр, а не группа.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 14:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016