|
Ассемблерные вставки [NIOS II gcc] |
|
|
|
Apr 11 2011, 10:15
|

Частый гость
 
Группа: Свой
Сообщений: 183
Регистрация: 16-03-08
Из: Новосибирск
Пользователь №: 35 954

|
Как я понял по работе с ниос, скоростью особой ядро не отличается. По этому возникает желание воткнуть чего нибудь на асм. Сия привычка осталась после работы с пиками. Уж очень понравилось писать оптимальный код =) Как оказалось, в gcc ассемблерные вставки делаются через одно место. В результате поиска нарыл следующий материал. ассемблерные вставки в GCCАссемблерные вставки в AVR-GCCInline Assembler в GCCОфициальная GCC online documentation При листинге дизасма обноружил, что он постоянно дергает регистры. Пишет из памяти в регистры, из регистров в память и тд. Возник такой вопрос можно ли зафиксировать переменную в одном из регистров, чтобы он не дергал ее постоянно. Или же это возможно только когда ручками весь асм код пишешь? Так же интересно кто еще использует асм вставки и для чего.
|
|
|
|
|
Apr 12 2011, 07:35
|

Частый гость
 
Группа: Свой
Сообщений: 183
Регистрация: 16-03-08
Из: Новосибирск
Пользователь №: 35 954

|
vadimuzzz, пробовал добавить этот параметр. например вот так. Код int register tmp=0; Тогда дизасм вообще не запускается, а переменную нельзя отследить. Ее нет в списке. В регистрах тоже не вижу ничего подобного. Может я что то не так сделал?) Или так пробовал Код int register r2=0; результат примерно тот же. Связи с регистром r2 нету переменной r2 тоже. Sergey'F подскажите, где это указывать. По настройкам пробежал - не увидел. Или это надо ручками прописывать?
|
|
|
|
|
Apr 12 2011, 12:45
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(Wic @ Apr 12 2011, 11:35)  результат примерно тот же. Связи с регистром r2 нету переменной r2 тоже. Sergey'F подскажите, где это указывать. По настройкам пробежал - не увидел. Или это надо ручками прописывать? Сам регистр r2 тут ни при чем. Это же переменная. Вообще, у компилятора gcc куча флагов, с которыми его можно вызывать. Диалог настройки параметров проекта ниже.
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 12 2011, 14:01
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 29-07-08
Из: Серпухов
Пользователь №: 39 283

|
GCC прекрасно понимает ассемблерные файлы , имеющие расширения , *.s *.S , поскольку использует , по умолчанию , GNU Assembler из GNU Binutils . Вот пример вызова функции из отдельного файла , написанного на ассемблере , программой на Си для ATmega128 .
Assembly_Language_with_GCC.PDF ( 79.09 килобайт )
Кол-во скачиваний: 169Вам необходимо разобраться как сделать тоже самое для НИОСа . Не забудьте поделиться результатами .
|
|
|
|
|
Apr 12 2011, 15:39
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(maugli @ Apr 12 2011, 18:01)  GCC прекрасно понимает ассемблерные файлы , имеющие расширения , *.s *.S , поскольку использует , по умолчанию , GNU Assembler из GNU Binutils . И тут прекрасно понимает. Цитата(maugli @ Apr 12 2011, 18:01)  Вам необходимо разобраться как сделать тоже самое для НИОСа . Не забудьте поделиться результатами . Вот ниже пример - берем, создаем Hello MicroC/OS-II, и там куча ассемблерных файлов в порте - можно использовать как пример. Передача параметров в функции рассмотрена в NiosII Processor Reference Handbook, Section II.7 Application Binary Interface.
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 15 2011, 15:20
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660

|
Цитата(torik @ Apr 15 2011, 16:42)  Кстати, а как включить оптимизацию? Эту самую О3? Если в bsp editor вручную поменять, результат компиляции чё-то не меняется. В смысле? Она настраивается в обычном эклипсовском меню Properties для проекта (см. скриншот выше). Если хотите, чтобы исходники bsp тоже компилировались с оптимизацией - то и для bsp тоже, отдельно, в ее меню Properties. А BSP Editor тут ни при чем.
|
|
|
|
|
Apr 17 2011, 05:08
|
Группа: Новичок
Сообщений: 3
Регистрация: 14-01-11
Из: Fryazino
Пользователь №: 62 222

|
Цитата(Wic @ Apr 12 2011, 11:35)  vadimuzzz, пробовал добавить этот параметр. например вот так. Код int register tmp=0; Тогда дизасм вообще не запускается, а переменную нельзя отследить. Ее нет в списке. В регистрах тоже не вижу ничего подобного. Может я что то не так сделал?) Или так пробовал Код int register r2=0; результат примерно тот же. Связи с регистром r2 нету переменной r2 тоже. Sergey'F подскажите, где это указывать. По настройкам пробежал - не увидел. Или это надо ручками прописывать? Попробуйте использовать конструкцию Код register int tmp asm("r2");
|
|
|
|
|
Apr 28 2011, 06:30
|
Группа: Новичок
Сообщений: 3
Регистрация: 14-01-11
Из: Fryazino
Пользователь №: 62 222

|
Уровней оптимизации четыре (а в GCC4.6 ещё один добавили, -Ofast, но он сильно косой). -Os - оптимизация по размеру -O1, -O2, -O3 - оптимизация по скорости По сути - это просто предопределённые наборы опций. Уровни оптимизации по скорости включают друг друга по очереди (-O1 меньше всего опций, -O3 - больше, -Ofast ещё больше). Наиболее оптимальный и часто используемый уровень -O2 Подробнее см. http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.htmlПро отладочные опции см. http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|