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

 
 
> Как отучить IAR использовать регистры FPU где не нужно?
jcxz
сообщение Aug 18 2018, 20:25
Сообщение #1


Гуру
******

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



Столкнулся с очень неприятным моментом в работе IAR:
В какой-то момент заглянул в листинг и увидел, что копируя структуру, IAR использует регистры FPU!
Хотя и рядом нет никаких операций с плавучкой. Просто есть структура, есть две переменных типа этой структуры и есть операция копирования одной переменной в другую (присваиванием, без memcpy()). И я вижу что IAR 7.80.4 лепит такой код (с оптимизацией и без):
Код
ADD      R2,SP,#+8
VLDM     R2,{D0-D3}
VSTM     R1,{D0-D3}

Что очень неприятно, ведь работа идёт под РТОС, в одной из задач ОС. В этой задаче нет никаких операций с плавучкой. Соответственно данная задача создаётся с указанием ОС что она не использует FPU. Соответственно ОС при переключении контекста с/в данную задачу не сохраняет/восстанавливает регистры FPU. Соответственно - будут разрушены регистры FPU в тех задачах, которые используют FPU (а также в тех, в коих IAR так же впихнул такое копирование через FPU).
Некоторые задачи в программе используют плавучку, значит полностью запретить FPU нельзя. Можно конечно сделать сохранение контекста FPU для всех задач вне зависимости от использования ими FPU, но не хотелось бы, так как все стеки задач придётся увеличить, увеличится время переключений контекста задач. Да и вообще - зачем? ОЗУ ведь не резиновая?

Как запретить IAR-у использовать регистры FPU для всего, кроме операций с плавучкой? Что-то в мануале не найду ничего про такое.... sad.gif(((((
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение Aug 19 2018, 07:55
Сообщение #2


Местный
***

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



Цитата(jcxz @ Aug 18 2018, 23:25) *
Столкнулся с очень неприятным моментом в работе IAR...

Дык известное ж дело (вроде), что не только в IAR, оно везде так, думается мне. Keil также поступает в некоторых случаях, под Eclipse для Cortex-A тоже самое. Я не стал разбираться пока что досконально, почему код с применением регистров FPU будет работать быстрее. Но чую, что оно действительно так.

Цитата(jcxz @ Aug 18 2018, 23:25) *
Что очень неприятно, ведь работа идёт под РТОС, в одной из задач ОС. В этой задаче нет никаких операций с плавучкой. Соответственно данная задача создаётся с указанием ОС что она не использует FPU.

Ух ты! А что у Вас за ОС? Почему во FreeRTOS такой возможности нет crying.gif

Цитата(jcxz @ Aug 18 2018, 23:25) *
Как запретить IAR-у использовать регистры FPU для всего, кроме операций с плавучкой? Что-то в мануале не найду ничего про такое.... sad.gif(((((

Ну не знаю насчет IAR, просто с сайта ARM Вам пищу для размышлений хочу указать. Оно как раз Вам подходит. Запрещает использовать FPU везде, где не пахнет операциями плавучки.
--no_allow_fpreg_for_nonfpdata
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 19 2018, 13:05
Сообщение #3


Гуру
******

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



Цитата(Arlleex @ Aug 19 2018, 10:55) *
почему код с применением регистров FPU будет работать быстрее. Но чую, что оно действительно так.

Скорость копирования в данном случае меня не интересует.
Тем более что - копирование всего 32 байт, и редкое. А заплатить за это придётся значительным увеличением стеков всех задач и соответственно - увеличением времени переключения контекстов всех задач. Только проигрыш в результате. sad.gif

Цитата(Arlleex @ Aug 19 2018, 10:55) *
Ух ты! А что у Вас за ОС? Почему во FreeRTOS такой возможности нет crying.gif

Дык - поэтому и не использую FreeRTOS, потому что там многого полезного нет laughing.gif
У меня uCOS-II.

Цитата(Arlleex @ Aug 19 2018, 10:55) *
Ну не знаю насчет IAR, просто с сайта ARM Вам пищу для размышлений хочу указать. Оно как раз Вам подходит. Запрещает использовать FPU везде, где не пахнет операциями плавучки.
--no_allow_fpreg_for_nonfpdata

К сожалению IAR не понимает эту опцию. sad.gif sad.gif sad.gif

Цитата(AlexandrY @ Aug 19 2018, 14:44) *
Между тем в uCOS для портов на ARM под IAR повсеместно используется запрет на сохранение контекста FP.
В других осях тоже.

Вот именно!
Заметил только вчера эту пакость со стороны IAR-а. Сейчас думаю, что возможно какие-то случайные, редко-проявляющиеся баги, которые иногда возникают, могли быть вызваны этим.
Пока перевёл копирование структур на memcpy(). Но нет уверенности что IAR, при включённой оптимизации не станет шалить с регистрами FPU и в других местах, а не только при копировании структур. sad.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jcxz   Как отучить IAR использовать регистры FPU где не нужно?   Aug 18 2018, 20:25
- - AlexandrY   Цитата(jcxz @ Aug 18 2018, 23:25) Как зап...   Aug 19 2018, 11:44
|- - AlexandrY   Цитата(AlexandrY @ Aug 19 2018, 14:44) Ме...   Aug 23 2018, 13:41
- - ih_   Цитата(jcxz @ Aug 18 2018, 23:25) Столкну...   Aug 22 2018, 15:17
|- - jcxz   Цитата(ih_ @ Aug 22 2018, 18:17) Какой МК...   Aug 22 2018, 20:04
- - DASM   Гм.. перекатил проект на юкосе на Гцц компилер - п...   Aug 22 2018, 16:37
- - ViKo   В тех задачах, где используется FPU, регистры сохр...   Aug 23 2018, 06:49
|- - Сергей Борщ   QUOTE (ViKo @ Aug 23 2018, 09:49) В тех з...   Aug 23 2018, 07:39
|- - jcxz   Цитата(ViKo @ Aug 23 2018, 09:49) В тех з...   Aug 23 2018, 08:01
|- - ViKo   Цитата(jcxz @ Aug 23 2018, 11:01) Не одна...   Aug 23 2018, 08:19
||- - jcxz   Цитата(ViKo @ Aug 23 2018, 11:19) Нет, ск...   Aug 23 2018, 08:55
|- - Сергей Борщ   QUOTE (jcxz @ Aug 23 2018, 11:01) Любая з...   Aug 23 2018, 09:14
|- - jcxz   Цитата(Сергей Борщ @ Aug 23 2018, 12:14) ...   Aug 23 2018, 09:34
|- - ih_   Цитата(jcxz @ Aug 23 2018, 12:34) А какая...   Aug 23 2018, 13:40
||- - jcxz   Цитата(ih_ @ Aug 23 2018, 16:40) Есть раз...   Aug 23 2018, 20:01
||- - AlexandrY   Цитата(jcxz @ Aug 23 2018, 22:41) Я не зн...   Aug 23 2018, 20:05
|||- - jcxz   Цитата(AlexandrY @ Aug 23 2018, 23:05) Вс...   Aug 23 2018, 20:14
|||- - AlexandrY   Цитата(jcxz @ Aug 23 2018, 23:14) А толку...   Aug 24 2018, 14:39
||- - ViKo   Цитата(jcxz @ Aug 23 2018, 23:01) PS: Кст...   Aug 24 2018, 04:05
||- - Arlleex   Цитата(jcxz @ Aug 24 2018, 00:01) PS: Кст...   Aug 24 2018, 09:40
|- - Сергей Борщ   QUOTE (jcxz @ Aug 23 2018, 12:34) А какая...   Aug 23 2018, 14:49
- - scifi   Раскидать задачи по разным файлам и компилировать ...   Aug 23 2018, 08:45
- - Genadi Zawidowski   А что, флажок который говорит что FPU поюзали и ег...   Aug 23 2018, 14:02
|- - AlexandrY   Цитата(Genadi Zawidowski @ Aug 23 2018, 17...   Aug 23 2018, 14:29
- - Genadi Zawidowski   Цитатафлажок не говорит Баг в ядре процессора?   Aug 23 2018, 16:31
- - ViKo   И зачем их копировать? Для малых структур я копиру...   Aug 25 2018, 05:08
|- - Arlleex   Цитата(ViKo @ Aug 25 2018, 08:08) И зачем...   Aug 25 2018, 06:42
||- - ViKo   Цитата(Arlleex @ Aug 25 2018, 09:42) Это ...   Aug 25 2018, 07:34
||- - jcxz   Цитата(ViKo @ Aug 25 2018, 10:34) У меня ...   Aug 25 2018, 08:03
||- - Arlleex   Цитата(ViKo @ Aug 25 2018, 10:34) У меня ...   Aug 25 2018, 08:31
||- - jcxz   Цитата(Arlleex @ Aug 25 2018, 11:31) На м...   Aug 25 2018, 10:16
||- - Arlleex   Цитата(jcxz @ Aug 25 2018, 13:16) Тот слу...   Aug 25 2018, 10:29
|- - jcxz   Цитата(ViKo @ Aug 25 2018, 08:08) И зачем...   Aug 25 2018, 06:44
|- - AlexandrY   Цитата(jcxz @ Aug 25 2018, 09:44) Здесь к...   Aug 25 2018, 07:01
|- - jcxz   Цитата(AlexandrY @ Aug 25 2018, 10:01) Ту...   Aug 25 2018, 07:10
- - ViKo   Да, не так поняли. У меня есть одна структура, сос...   Aug 25 2018, 10:31
- - jcxz   Цитата(ViKo @ Aug 25 2018, 13:31) Я не пр...   Aug 25 2018, 12:16
- - ViKo   Цитата(jcxz @ Aug 25 2018, 15:16) А я ещё...   Aug 25 2018, 12:37


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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 02:25
Рейтинг@Mail.ru


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