|
|
  |
ARM начинающим |
|
|
|
Oct 18 2005, 17:32
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
То же от IAR. Оценивать хорошо это или плохо не бурусь. ARM Код a: DS8 4096 `b`: DS8 4096
copy0: STMDB SP!,{R4-R11} ;; Push MOV R2,#+0x80 ??copy0_0: MOV R3,R1 MOV R12,R0 LDMIA R12,{R4-R11} STMIA R3,{R4-R11} ADD R0,R0,#+0x20 ADD R1,R1,#+0x20 SUBS R2,R2,#+0x1 BNE ??copy0_0 LDMIA SP!,{R4-R11} ;; Pop BX LR ;; return
main: STR LR,[SP, #-4]! ;; Push LDR R0,??main_0 ;; a ADD R1,R0,#+0x1000 BL copy0 LDR LR,[SP], #+0x4 ;; Pop BX LR ;; return ??main_0: DC32 a Thumb Код a: DS8 4096 `b`: DS8 4096 PUSH {R4,LR} MOV R2,#+0x80 ??copy0_0: MOV R4,#+0x20 ??copy0_1: SUB R4,R4,#+0x4 LDR R3,[R0, R4] STR R3,[R1, R4] BNE ??copy0_1 ADD R0,#+0x20 ADD R1,#+0x20 SUB R2,R2,#+0x1 BNE ??copy0_0 POP {R4} POP {R0} BX R0 ;; return
main: PUSH {LR} LDR R0,??main_0 ;; a MOV R1,#+0x80 LSL R1,R1,#+0x5 ;; #+0x1000 ADD R1,R0,R1 BL copy0
POP {R0} BX R0 ;; return NOP ??main_0: DC32 a
|
|
|
|
|
Oct 19 2005, 05:34
|
Участник

Группа: Свой
Сообщений: 72
Регистрация: 8-11-04
Из: Томск
Пользователь №: 1 070

|
А что, писание на асме это "западло"? Я все проекты делаю на асме, потому как видеть что творит С с кодом сил не хватает. В чем С дает выигрыш? Знаю начнете говорить о времени разработки, о переносимости с одного компилятора на другой, так это все ерунда. За время что я работаю у меня накопилось куча функций, которые переходят из одного проекта в другой без изменений (типа арифметика, УАРТ и т.п.) А при переходе с одного компилятора на другой (при том же процессоре) для асм в основном заголовочные файлы меняются ( a equ 10, или equ a,10) - это не долго. Да и зачем на асме переходить из компилера в компилер? За мою практику такой неизбежной необходимости не возникало. Засада конечно переносить проект с одной архитектуры на другую, но для меня "лучше день потерять и за полчаса долеьтеть". И вообще причем тут крылья - главное хвост!
|
|
|
|
|
Oct 19 2005, 09:55
|

инженер
   
Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701

|
To aaarrrБольше сооптимизировать не удалось! Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.). Действия же компилятора в приведенном примере объясняются фиксированным распределением регистров процессора по функциям (например, в качестве указателей он выбирает, в первую очередь, lr, ip; параметры функции - r0,r1,... и т.п. ). Причем для разных компиляторов (а уж тем более процессоров это может быть по разному). Невнимательно прочитала последние сообщения. Конечно, пример от VladislavS для IAR - почти идеально Зато достоинства GNU компилятора (здесь немного  ) вот в этом Цитата Hardware Models and Configurations. AMD 29K Options ARC Options...78 ARM/StrongARM Options ........................78 ARM THUMB Options ..........83 Clipper Options .............85 DEC Alpha Options ..........85 Hitachi H8/300 Options ..............89 Hitachi SH Options ....................90 HPPA Options.............................90 IBM RS/6000 and PowerPC Options......................92 IBM RT Options .........................101 Intel x86 Options........................102 Intel 960 Options...........................105 Matsushita MN10200 Options ...................107 Matsushita MN10300/AM33 Options .....................107 MIPS Options..................................107 Mitsubishi D10V Options .......................112 Mitsubishi M32R/D/X Options..................................113 Motorola 68000 Options .......................................................114 Motorola 88000 Options ......................................................116 NEC V850 Options .................................119 SPARC Options ....................120 System V Options .........................................124 Это, в какой-то степени, и ответ всем asm-программерам Переход к новому типу МП происходит с более грамотных позиций. И еще - программирование на Си - использование более высокой технологии, которая в общем случае далее более качественный продукт с меньшими трудозатратами. Пример: кто как может обед разогревать на работе - на костре, кипятильником или в микроволновке. Извините, за легкий offtopic.
|
|
|
|
|
Oct 19 2005, 10:32
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Vic1 @ Oct 19 2005, 12:55) To aaarrrЗато достоинства GNU компилятора (здесь немного  ) вот в этом Цитата Hardware Models and Configurations. AMD 29K Options ARC Options...78 ARM/StrongARM Options ........................78 ARM THUMB Options ..........83 Clipper Options .............85 DEC Alpha Options ..........85 Hitachi H8/300 Options ..............89 Hitachi SH Options ....................90 HPPA Options.............................90 IBM RS/6000 and PowerPC Options......................92 IBM RT Options .........................101 Intel x86 Options........................102 Intel 960 Options...........................105 Matsushita MN10200 Options ...................107 Matsushita MN10300/AM33 Options .....................107 MIPS Options..................................107 Mitsubishi D10V Options .......................112 Mitsubishi M32R/D/X Options..................................113 Motorola 68000 Options .......................................................114 Motorola 88000 Options ......................................................116 NEC V850 Options .................................119 SPARC Options ....................120 System V Options .........................................124 Это, в какой-то степени, и ответ всем asm-программерам Как получены эти цифры? Прошу ответить болле подробно. Меня интересует сравнение ARM и V850.
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Oct 19 2005, 10:37
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(iit @ Oct 19 2005, 10:34) А что, писание на асме это "западло"? в общем да Цитата Я все проекты делаю на асме, потому как видеть что творит С с кодом сил не хватает. Много вы видели? Те листинги, что приводились выше, чем ужасают? Цитата В чем С дает выигрыш? Знаю начнете говорить о времени разработки, о переносимости с одного компилятора на другой, так это все ерунда. Не ерунда. Особенно о времени разработки и сопровождаемости. Цитата За время что я работаю у меня накопилось куча функций, которые переходят из одного проекта в другой без изменений (типа арифметика, УАРТ и т.п.) А при переходе с одного компилятора на другой (при том же процессоре) для асм в основном заголовочные файлы меняются ( a equ 10, или equ a,10) - это не долго. Да и зачем на асме переходить из компилера в компилер? За мою практику такой неизбежной необходимости не возникало. Засада конечно переносить проект с одной архитектуры на другую, но для меня "лучше день потерять и за полчаса долеьтеть". И вообще причем тут крылья - главное хвост! а вы знаете, что такое CVS, или SVN? Или тоже неприемлете, покуда нафиг не нужно?
--------------------
Пасу котов...
|
|
|
|
|
Oct 19 2005, 10:49
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(VladislavS @ Oct 18 2005, 22:32) То же от IAR. Оценивать хорошо это или плохо не бурусь. Это какой версией компилятора компилировалось? Какие опции оптимизации были установлены?
--------------------
Пасу котов...
|
|
|
|
|
Oct 19 2005, 12:08
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Vic1 @ Oct 19 2005, 12:55) To aaarrrБольше сооптимизировать не удалось! Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.). Да, memcpy умнее написана, хотя её ничего не стоит посадить в лужу невыравненным адресом. И написана она, конечно, на АСМе  Цитата Это, в какой-то степени, и ответ всем asm-программерам Переход к новому типу МП происходит с более грамотных позиций. И еще - программирование на Си - использование более высокой технологии, которая в общем случае далее более качественный продукт с меньшими трудозатратами. Пример: кто как может обед разогревать на работе - на костре, кипятильником или в микроволновке. Извините, за легкий offtopic. Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только. P.S. Всю эту дрянь из микроволновки я не ем ©
|
|
|
|
|
Oct 19 2005, 12:31
|

инженер
   
Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701

|
To [/B]aaarrr[B] Цитата Да, memcpy умнее написана, хотя её ничего не стоит посадить в лужу невыравненным адресом. И написана она, конечно, на АСМе Разумеется на asm-e, кто же спорит. Исходника нету? Цитата Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только. Не надо путать в общую кучу квалификацию и технологию. Безусловно, для любой задачи прежде всего важна квалификация разработчика (разумеется не только программерская). Если пример с кулинарией Вам показался неудачным (спорить не буду, шашлык на костре все любят), то примеров новых технологий, появившихся совсем недавно, - множество (в строительстве, медицине, ...). Опять offtopic получается.
|
|
|
|
|
Oct 19 2005, 12:33
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(aaarrr @ Oct 19 2005, 17:08) Цитата(Vic1 @ Oct 19 2005, 12:55) To aaarrrБольше сооптимизировать не удалось! Но, по крайней мере компилятор использует ldm/stm. Вообще в какой-то из функций bcopy или memcpy они тоже должны использоваться (или у Вас есть исходники memcpy???) и может быть более оптимально (с большим числом одновременно загружаемых регистров, без дополнительной перезагрузки в цикле и т.п.). Да, memcpy умнее написана, хотя её ничего не стоит посадить в лужу невыравненным адресом. Точно также, как и вашу асмовскую функцию. Только memcpy это точно все корректно отыграет, пусть даже создав менее оптимальный код, копирующий байтами, а не словами. А использование вашей функции с невыровненными адресами приведет к непредсказуемым эффектам. Цитата И написана она, конечно, на АСМе  Например, в IAR memcpy написана нак inline функция в string.h Код #pragma inline void *memcpy(void *s1, const void *s2, size_t n) /* Copied from memcpy.c */ { /* copy char s2[n] to s1[n] in any order */ char *su1 = (char *)s1; const char *su2 = (const char *)s2; for (; 0 < n; ++su1, ++su2, --n) *su1 = *su2; return (s1); } Цитата Насчет качества продукта и высоких технологий - не надо рассказывать сказки: качество, в общем случае, ниже. Просто использование ЯВУ позволяет использовать менее квалифицированную рабсилу, и только. Вы серьезно полагаете, что квалификация программиста тем выше, чем более низкоуровненый язык он использует?
--------------------
Пасу котов...
|
|
|
|
|
Oct 19 2005, 12:46
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Andy Mozzhevilov @ Oct 19 2005, 15:33) Точно также, как и вашу асмовскую функцию. Только memcpy это точно все корректно отыграет, пусть даже создав менее оптимальный код, копирующий байтами, а не словами. А использование вашей функции с невыровненными адресами приведет к непредсказуемым эффектам. А кто ее будет так использовать? Ежели это моя функция, то вызывать её буду только я и правильно. Цитата Например, в IAR memcpy написана нак inline функция в string.h Код #pragma inline void *memcpy(void *s1, const void *s2, size_t n) /* Copied from memcpy.c */ { /* copy char s2[n] to s1[n] in any order */ char *su1 = (char *)s1; const char *su2 = (const char *)s2; for (; 0 < n; ++su1, ++su2, --n) *su1 = *su2; return (s1); } Ужасно! Всегда считал IAR кривым компилером. Цитата Вы серьезно полагаете, что квалификация программиста тем выше, чем более низкоуровненый язык он использует? Нет, я считаю, что квалификация программиста тем ниже, чем более низкоуровневый язык он не способен понять.
|
|
|
|
|
Oct 19 2005, 13:16
|

инженер
   
Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701

|
Добавление к квалификации и молодежного сленга "глючный компилятор" Файл внизу (переименован из string2.h, GNU C)
|
|
|
|
|
Oct 19 2005, 13:41
|

Частый гость
 
Группа: Свой
Сообщений: 144
Регистрация: 5-08-05
Пользователь №: 7 382

|
Ваш креатив - образчик мысли, слога, До Вас такого точно не писали! Вам будет зачтено пред ликом Бога, Что Вы его для нас публиковали...
Вы же проффесионалы - доставайте сразу галстуки и меряйтесь. А теперь серьёзно , за сравнение вам зачёт. Теперь ни зачёт по пункту кровесмешения асма и сей и использование рам функций. Ни кто не сопротивляется по поводу иногда маразма компиляции. Пиши на асме, перекладывать ДСП функции на АРМ и хвалится тем что выжимаем максимум скорости - я считаю маразмом, потому что есть ОМАП двухядерный, нет желания - внешний ДСП ставте. С - повторное использование кода, ведь пользуетесь исли нет то горш цена. Что в сухом остатке 1. Сравнение кода генерируемого компилятором 2. Флейм. 3. Совместное использование асм и С.
Впрочем об этом давно было известно.
--------------------
Свет мой зеркальце, скажи, да всю правду расскажи я ль на свете всех тупее, бесполезней и пьянее? Ты - придурок. Спору нет! Но живет на белом свете вот ТАКИХ еще две трети!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|