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

 
 
> Как не звать __aeabi_idiv и иже сними?
kosyak©
сообщение Dec 9 2010, 11:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Есть код
Код
...
    volatile int d = 100;
    volatile int k = 11;
    volatile int q = d / k;
...

Компилятор (EWARM6101) при любом из уровней оптимизации компилирует это как
Код
                   volatile int d = 100;
  MOV      R1,#+100
  STR      R1,[SP, #+4]
                     volatile int k = 11;
  MOV      R1,#+11
  STR      R1,[SP, #+0]
     65              volatile int q = d / k;
                                  ^
   LDR      R0,[SP, #+4]
   LDR      R1,[SP, #+0]
   BL       __aeabi_idiv
   STR      R0,[SP, #+8]


Как заставить его не использовать __aeabi_idiv?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kosyak©
сообщение Dec 9 2010, 20:11
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966



Так и думал что в волатиле начнут носом тыкать sm.gif
Ну тогда по порядку - волатиле написал сознательно, чтоб компилятор не проявлял чудеса оптимизМА и не посчитал мне это выражение на этапе компиляции sm.gif
Интересует конкретно вопрос как его заставить не использовать __aeabi_idiv а скомпилировать деление прям в функцию.
Вот, например (пример из пальца выососан сразу предупреждаю), - есть функция, она выполняется из рамки (RAM) и затирает скажем внутреннюю флэш.. в функции считается страница ( / ) и смещение ( % ) - и тут компилятор решил выпендриться и использовать для деления __aeabi_idiv, вместо того чтобы честно скомпилировать нужный код, __aeabi_idiv ессно лежит в стираемой флэше..вот такая вот загогулина...
Да, я конечно, понимаю что можно вю библиотеку используемых компилятором функций запихнуть в рамку и проблемы вроде как бы не станет - но интересует именно как заставить его их не использовать...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 10 2010, 08:06
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



QUOTE (kosyak© @ Dec 9 2010, 22:11) *
Интересует конкретно вопрос как его заставить не использовать __aeabi_idiv а скомпилировать деление прям в функцию.

Вы не указали архитектуру. Если это ARM7TDMI-S, то функция __aeabi_idiv вместе с __aeabi_idivmod занимает 332 байта (Code Sourcery Lite). При таком размере компилятор её не проинлайнит.
QUOTE (kosyak© @ Dec 9 2010, 22:11) *
Вот, например (пример из пальца выососан сразу предупреждаю), - есть функция, она выполняется из рамки (RAM) и затирает скажем внутреннюю флэш.. в функции считается страница ( / ) и смещение ( % ) - и тут компилятор решил выпендриться и использовать для деления __aeabi_idiv, вместо того чтобы честно скомпилировать нужный код, __aeabi_idiv ессно лежит в стираемой флэше..вот такая вот загогулина...

Если размер Вашей страницы не является константой и не кратен степени двойки, то ничего удивительного в поведении компилятора нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kosyak©   Как не звать __aeabi_idiv и иже сними?   Dec 9 2010, 11:59
- - demiurg_spb   Код static const int D = 100; static const int K ...   Dec 9 2010, 14:00
- - scifi   Цитата(kosyak© @ Dec 9 2010, 14:59) Как з...   Dec 9 2010, 19:02
- - kosyak©   Архитектура действительно ARM7TDMI-S. Я тоже счита...   Dec 10 2010, 08:13
- - IgorKossak   А всё же. Каков размер страницы и почему он не кон...   Dec 10 2010, 08:18
- - kosyak©   Ну тогда дополню картину: Стоит датафлэш AT45DBxxx...   Dec 10 2010, 08:23
- - MALLOY2   Академический вопрос, что в загрузчике делает __ae...   Dec 10 2010, 09:03
- - kosyak©   Страничная организация DataFlash. Из линейного адр...   Dec 10 2010, 09:12
- - MALLOY2   Мда..... так и знал Все делается через маску и с...   Dec 10 2010, 09:39
- - kosyak©   Цитата(kosyak© @ Dec 10 2010, 11:23) ... ...   Dec 10 2010, 09:45
- - MALLOY2   И какие с этим проблемы ? Глава 14. Manufacturer ...   Dec 10 2010, 09:53
- - kosyak©   Уф! Вообщем так - на плату может быть поставле...   Dec 10 2010, 09:57
- - MALLOY2   13. "Power of 2" Binary Page Size Option...   Dec 10 2010, 09:59
- - kosyak©   Ладно - цитирую мануал: User Configurable Page Si...   Dec 10 2010, 10:04
- - MALLOY2   Создаем проблемы и героически их решаем Вы знает...   Dec 10 2010, 10:15
|- - kosyak©   Ну...еще раз скажу - вопрос не про конкретное прим...   Dec 10 2010, 10:20
- - scifi   Согласен, что случай, когда код прошивки флэш долж...   Dec 10 2010, 10:42
- - _Bill   QUOTE (kosyak© @ Dec 9 2010, 15:59) Есть ...   Dec 11 2010, 21:08


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

 


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


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