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

 
 
> keil 4.21 __asm inline-функции
romas2010
сообщение Jun 6 2012, 15:48
Сообщение #1


Участник
*

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



Добрый день! подскажите,как в тексте программы на С вставить ассемблерную инструкцию.Именно вставить,а не вызвать ассемблерную функцию. Нужно что-то типа оператора inline в Паскале....Пробовал через конструкцию static __asm __inline FUNC()....и через __forceinline и через #pragma inline-компилятор упорно генерит вызов,в окне дизассемблера вижу BL.W func....может все дело в т.н. embrdded assembler для процессоров Cortex M3?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
brag
сообщение Jun 10 2012, 10:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



У меня что четверка, что пятерка показали идентичную производительность. Для сравнение результаты с gcc привожу. это все на медленном stm32f105, +-пару секунд будет если весь код сместить на 2-4 байта из за особенностей работы кеша в stm.

CODE
rvct 4.1 894 -O2 -Otime
sizе=0002c338
MP3 Time: 38
TWF Time: 23
CRC32 Time: 16

armcc 5.01.64 -O2 -Otime
size=0002c330
MP3 Time: 38
TWF Time: 23
CRC32 Time: 16

gcc-4.7.1-RC -O2
size=0002d2c0
Time: 41
TWF Time: 20
CRC32 Time: 12


gcc линкер файлы от rvct не хавает.. пришлось изрядно повозится, чтобы собрать все через родной - в проекте есть несколько модулей, где должны использоватся одни и те же исходные файлы, одни и те же функции, но при этом их должно быть не одна копия.
На пример есть загрузчик и программа. Оба должны использовать функцию printf(), при этом у каждого должна быть своя копия printf(). И все это в одном выходном файле - попробуй заставь линкер корректно работать при этом.

rvct4 не понимает 64битных операций(на пример U64 t; int s; ... t<<=s), вызывает какие-то библиотечные функции(которых ессно в голом rvct нету), в то время, как gcc генерит оптимальный код на месте.
Вообще качество кода у gcc выше с большей вероятностю. Там, где rvct нагенерил кучу мусора(на пример алгоритм twofish) и занял много стека, gcc все сделал гораздо красивее. Хотя бывает на оборот, но гораздо реже. Странно, родной компилер ведь...

А так для отладки юзаю keil, компилю gcc. gdb+Eclipse глючит жестоко, и чем новее версия gdb,gcc, тем сильнее глючит.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 10 2012, 19:19
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(brag @ Jun 10 2012, 14:01) *
gcc линкер файлы от rvct не хавает..

там один байт в заголовке надо поправить (а то стоит что EABI, но приватный) после жрет. Но надо быть аккуратным с библиотеками.


GNUC похоже до сих пор генерит самый большой по размеру код. (но иногда быстрый)
для ARM7 в 2009 году: http://electronix.ru/forum/index.php?showtopic=68880
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 17th July 2025 - 23:58
Рейтинг@Mail.ru


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