|
|
  |
ASM: приказали долго жить?, Сколько еще продержится |
|
|
|
Jun 30 2006, 11:27
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 2-05-06
Из: Санкт-Петербург
Пользователь №: 16 707

|
Цитата(beer_warrior @ Jun 30 2006, 14:37)  Тут можно сделать лирическое отступление - да, корпоративному миру нужны дешевые кодировщики тривиальных задач, которыми можно легко помыкать, но мы то хотим быть хорошими спецами-универсалами, которые могут взяться за любую работу, да и денег не просить, а требовать  При всем уважении  люди нужны разные. Возмем OrCad и его регистрацию chm и txt файлов на себя  , возьмем подбор компонентов в других программах, поведение при клике мыши (proteus)... Не знаю как насчет нужны чтоб помыкать, но спецы для таких тривиальных задач точно нужны. PS. Прошу прощения если офтоп
|
|
|
|
|
Jul 2 2006, 01:05
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 24-05-06
Пользователь №: 17 392

|
АSM не помрет никогда особенно в критических ситуациях, но и далеко на нем вы не уедите. К примеру, в моем текушем проекте под 15 000 строк кода на C. Не представляю как бы я все это писал на асме и как долго  . Нет кто угодно только не я  .
|
|
|
|
|
Jul 2 2006, 09:43
|

Частый гость
 
Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508

|
Цитата(tiasur @ Jul 2 2006, 04:05)  АSM не помрет никогда особенно в критических ситуациях, но и далеко на нем вы не уедите. К примеру, в моем текушем проекте под 15 000 строк кода на C. Не представляю как бы я все это писал на асме и как долго  . Нет кто угодно только не я  . А что за программа такая на 15 000 строк.... Если не секрет раскажите что пишите?
|
|
|
|
|
Jul 3 2006, 05:26
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 24-05-06
Пользователь №: 17 392

|
Цитата(vet @ Jul 2 2006, 22:00)  Potter, это не так много, на самом деле - примерно полный объём памяти программ ATmega128. Совершенно правильно. 15 тыс. строк действительно совсем немного и может даже поместится в Атмегу64. Это средней сложности коммерческое изделие с использованием модулей GSM(CDMA)+GPS(AGPS) со всякими дополнительными возможностями.
|
|
|
|
|
Jul 3 2006, 13:52
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Если почитать ответы, то на мой взгляд переплетаются две темы. Особенности ASM AVR. И ASM, как таковой. Хочу высказаться по обоим, но давайте сначала определюсь. Так сказать "заужу" рамки. Дело в том, что AVR разрабатывался как МП использующийся для задач управления. Т.е. датчики, моторы, протоколы передачи разные, регуляторы, предварительная обработка сигнала и т.п. Это было конкретно описано на сайте и видно из примеров. Основные конкуренты - PIC, MSP430, Ubicom, 51(варианты в том числе Sygnal), mitsubishi, ну и некоторые др. менее распространённые. Конечно мы хотели бы прибамбахать туда ОС MS Windows XP  , ну и брюзжим по тиху, типа что-то ресурсов маловато будет. Но давайте исходить из первоначального назначения. Итак что мы видим: 1) Большое колличество регистров практически избавляет от использования памяти в задачах управления. (Нет равных) 2) Результат операции можно поместить в любой регистр. (сравнима msp430) 3) При любой ариф/лог операции выставляются флаги и их полный набор. (Сравнима msp430) 4) Легко организуются буфера, т.к. три указательные пары регистров и автоинкр/декр, косвенная индексн. и т.д. Прост доступ к таблицам данных во флэш. (Нет равных) 5) Очень малое время засыпания/просыпания и перехода по прерыванию. (Нет равных) 6) Хороший булевый процессор. (Сравнима 51) 7) Высокое быстродействие (Сравнима Sygnal, Ubicom) 8) Большая номенклатура, оснащение, наличие отлад. средств доступность. 9) Малая стоимость (Сравнима PIC) Таким образом пинок на AVR, что мол инкремент ячейки памяти - три команды, - это пол правды. Допустим надо сложить r3:r4 и r5:r6. На 51 выглядит так mov a,r4 add a,r6 mov r4,a mov a,r3 addc a,r5 mov r5,a Для AVR add r4,r6 adc r3,r5 Отсутствие аккумулятора - просто супер!!! Для создания библиотек и т.п. Для любителей MSP430 отмечу, что 16 бит арифметика - это класно. В одном случае хотел перейти (уж оч. много 16-бит операций было) И что получилось, - там одно прерывание надо было обработать. Посмотреть один бит и выставить другой (в голове обработанный), так на 8-ми МГц я не сравлялся. Вот и 16-бит! Для любителей PIC просто промолчу.  Как сказал мне один приятель - слишком много отладочных средств купили. Теперь сложно ....  К примеру я переводил одну прогу с 8051 на 90s8515. Переводил механически типа команда в команду. Выкинул аппаратную примочку (51-ая не справлялась) и в результате. а) Длина проги уменьшилась на 10% (Это при том что команда AVR 2 байта). б) На критическом участке быстродействие (в тактах) возросло на 30%. При большей работе. А если её сразу написать ориентируясь на AVR, - результат был бы ещё более впечатляющий. Теперь по второму вопросу. На мой взгляд выигрыш ASMа чисто виртуальный. Т.е. я выигрываю тем что более грамотно распределяю ресурсы. На тех задачах о которых я писал выше почти не требуется ячейки ОЗУ. Практически все данные влазят в регистры. Обычно использую две рабочих пары, Z и регистр FLAG(для битов). Самые часто используемые - в регистрах. В озу - самые редко используемые. Приведу пример статистики для средней "классической" моей проги. Длина: ------------------------- 5429 строк. (~6k занято) память: рабочие ячейки ----- 31 байт ------- внешние ячейки ----- 25 байт ------- стеки RS232 -------- всё остальное (- стек проги) Использование Ld/st -------- 200 раз (в основном константы времени) Использование Push/pop ----- 2 раз в голове уровень стека в прерывании - 8 максимальный уровень стека в п/п -------- 6 максимальный Очевидно, что СИ (Например IAR) Отводит две регистровых пары под указатели стека данных (-4регистра). Ну и уровень стека раза в три-четыре больше. Что я вижу при обращении к static памяти типа: NumbActiveKom++; // Ввод команды завершён В голове LDD R16, Z+53 DEC R16 STD Z+53, R16 в прерывании rcall ?Subroutine96 где ?Subroutine96: MOVW R31:R30, R27:R26 LDD R16, Z+53 DEC R16 STD Z+53, R16 RET И это при оптимизации по времени. Но при здравом анализе к компилятору нет претензий. Я чётко понимаю что требуется унификация для всех обращений. И смысл сгенерированного мне понятен. Причина в том, что нет в СИ оператора который донесёт до компилятора общий смысл всей программы и смысл конкретной переменной. Да и не надо это. Прелесть Си и заключается в абстрагировании от конкретной реализации твоей идеи. Ну а уж если где-то надо быстродействие ... тогда берёшь логически законченный кусок программы и пишешь его с нуля на асме. Но всё-таки мне кажется, что постепенно уровень компиляторов станет ещё выше, команды АСМа ещё заумнее, ресурсов и быстродействия у камней ещё больше, а АСМа - всё меньше. На моей памяти редактор текста для Радио86РК влазил в 2К. 4К - Бэйсик, Паскаль. 720К - прародитель Heroes - KB. А теперь Герои на DVD едва-едва.  Короче скоро будем Windows Robotics вставлять и из под неё на визуал Си светодиодами моргать! Всё сказанное - мой взгляд на вещи.
|
|
|
|
|
Jul 4 2006, 03:32
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  Хочу высказаться по обоим, но давайте сначала определюсь. Так сказать "заужу" рамки. Дело в том, что AVR разрабатывался как МП использующийся для задач управления. Т.е. датчики, моторы, протоколы передачи разные, регуляторы, предварительная обработка сигнала и т.п. Это было конкретно описано на сайте и видно из примеров. Основные конкуренты - PIC, MSP430, Ubicom, 51(варианты в том числе Sygnal), mitsubishi, ну и некоторые др. менее распространённые. Конечно мы хотели бы прибамбахать туда ОС MS Windows XP  , ну и брюзжим по тиху, типа что-то ресурсов маловато будет. Но давайте исходить из первоначального назначения. Итак что мы видим: 1) Большое колличество регистров практически избавляет от использования памяти в задачах управления. (Нет равных) Полноценных регистров 16. Нижняя половина не умеет работать с константами - ни грузиться, ни сравнивать. Итого 8 регистровых пар. У MSP430 12 регистров. Про 16-разрядность говорить не будем, тут все более, чем очевидно. Кроме того, задачи управления разные бывают, я бы воздержался от утверждений, что для этих задач хватит и регистров, сколько бы их не было. Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  2) Результат операции можно поместить в любой регистр. (сравнима msp430) На MSP430 результат операции можно сразу помещать в память, что очень удобно при кодировании на ассемблере. Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  4) Легко организуются буфера, т.к. три указательные пары регистров и автоинкр/декр, косвенная индексн. и т.д. Прост доступ к таблицам данных во флэш. (Нет равных) 3 аппаратных указателя, из которых полноценных только два. У MSP430 их 12. Все полноценные. Эффективная адресная арифметика (с указателями) на AVR ограничена прибавлением костанты максимальным размером в 63. Для большинства случаев в программах для AVR хватает, но иногда бывает этого мало. MSP430 этим не ограничен - полная 16-разрядная арифметика. При работе с флешью на MSP430 все прозрачно - хоть флешь, хоть ОЗУ. Адресуемся любым способом из любого регистра. AVR пролетает по обоим пунктам. Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  5) Очень малое время засыпания/просыпания и перехода по прерыванию. (Нет равных) MSP430 исходно строился как процессор с малым потреблением, причем рекордные показатели тут достигаются не столько технологией, сколько организацией подхода. Главная идея - как только работы нет - спать. Как только работа появилась, проснуться и делать ее, потом снова спать. Для этого в MSP430 внедрена специальная развитая система тактирования из 3 клоков, ядро процессора и периферийные устройства могут тактироваться от разных клоков. Некоторые периферийные устройства - в частности, UART, имеют специальные фичи для обеспечения работы при низких значениях клоков. Например, в упомянутом UART'е в Baud Rate генераторе используется специальная фича - modulator, которая позволяет, например, работать на скорости 4800 бод при тактировании UART'а от 32768 Гц. Само ядро процессора рекомендуют тактировать от DCO (встроенный RC генератор, так же имеющий ,modulator для коррекции скорости, если это необходимо), в этом случае проц может мгновенно засыпать и практически мгновенно просыпаться - 6 мкс время пробуждения. В то время, как ядро спит, UART может метать байты, тактируюясь от 32768 Гц. Сколь все это потребляет, сами понимаете. Т.ч. насчет "нет равных" это Вы погорячились - AVR (и другие) только только подходит к тому, что MSP430 умеет от рождения. Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  6) Хороший булевый процессор. (Сравнима 51) Не сравнимый. У 51-го можно адресовать отдельный бит. У AVR же, как и любого обычного процессора - маски. Собсно, плохого тут ничего нет, это у 51-го битовый процессор от бедности был - память экономили, а сейчас и с масками AVR, MSP430 или любой другой современный проц работает быстрее (по сравнению с оригинальным 51-м). Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  7) Высокое быстродействие (Сравнима Sygnal, Ubicom) Это уже обсуждалось бурно в этом же топике выше. Быстродействие обычное, не чемпионское. Чемпионским оно кажется только при сравнении с 12-тактовым MCS-51. Цитата(SasaVitebsk @ Jul 3 2006, 20:52)  Таким образом пинок на AVR, что мол инкремент ячейки памяти - три команды, - это пол правды. Допустим надо сложить r3:r4 и r5:r6. На 51 выглядит так mov a,r4 add a,r6 mov r4,a mov a,r3 addc a,r5 mov r5,a Для AVR add r4,r6 adc r3,r5 Нашли с чем сравнивать. Ну вот Вам MSP430: add r12,r14 Еще с АРМом сравните.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jul 4 2006, 05:06
|

старший лаборант
     
Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097

|
Цитата Нашли с чем сравнивать. Ну вот Вам MSP430: add r12,r14 Z80: ADD HL,DE А в общем-то он 8-разрядным считался
--------------------
Китайская комплектация - европейское качество! ;)
|
|
|
|
|
Jul 4 2006, 21:35
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
dxp ну не буду я с тобой спорить!  MSP мне тоже оччень понравился. И семейство мощное. И аппаратный умножитель со сложением есть куда применить. И ещё я насмотрел целую кучу вкусностей. Но вот такой пример. Конкретный. Захотел я его применить. Стал ваять и что вижу. В 70-80% приходится работать с байтом. Ну это не страшно. Он для этого приспособлен великолепно. Но у меня надо обработать сигнал (телефония) с частотой 32кГц. 0/1 отличается длительностью сигнала 2/4мкс. потом задержка 2мкс и ответный сигнал 2мкс. Итак надо отличить сигнал 2мкс от 4мкс. Т.е. для MSP430 16 тактов от 32 тактов. По прерыванию плавает, по моему больше чем у AVR. У AVR не более 2 тактов если умножение не использовать. Короче точность на пределе. И разрядность здесь не прилепишь. Разрядность как раз (как правило) в медленных участках нужна. И всё! Покрутил - покрутил ну и вот держу в руках изделие на mega8 на 14.7456! Ну и цена .... конечно. Mega8 берём 1.2$. А программа - она ведь один раз пишется.  По поводу регистров младших. Никогда от них не отказывался. Вполне приятно с ними работать. Во-первых не всё же время с константами работать. Иногда например использую под флаги. Думаете - неудобно? Нормально. Переходы sbrs/sbrc работают а установку делаю например так: set bld flag,bready Очень наглядно. Короче они абсолютно не пустуют. А раз не пустуют, то как же можно написать что их нет? Лукавишь dxp!
|
|
|
|
|
Jul 5 2006, 10:40
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(SasaVitebsk @ Jul 5 2006, 04:35)  dxp ну не буду я с тобой спорить!  MSP мне тоже оччень понравился. И семейство мощное. И аппаратный умножитель со сложением есть куда применить. И ещё я насмотрел целую кучу вкусностей. Но вот такой пример. Конкретный. Захотел я его применить. Стал ваять и что вижу. В 70-80% приходится работать с байтом. Ну это не страшно. Он для этого приспособлен великолепно. Но у меня надо обработать сигнал (телефония) с частотой 32кГц. 0/1 отличается длительностью сигнала 2/4мкс. потом задержка 2мкс и ответный сигнал 2мкс. Итак надо отличить сигнал 2мкс от 4мкс. Т.е. для MSP430 16 тактов от 32 тактов. По прерыванию плавает, по моему больше чем у AVR. У AVR не более 2 тактов если умножение не использовать. Короче точность на пределе. И разрядность здесь не прилепишь. Разрядность как раз (как правило) в медленных участках нужна. И всё! Покрутил - покрутил ну и вот держу в руках изделие на mega8 на 14.7456! Ну и цена .... конечно. Mega8 берём 1.2$. А программа - она ведь один раз пишется.  Я не спорил, а отвечал на вполне конкретные тезисы, в которых было заявлено, что, дескать, AVR вне конкуренции. Было показано, что это не так. Только и всего. С тем, что MSP430 не закрывает 100% ситуаций, что AVR имеет по совокупности требований кое-где (и не редко) преимущества, т.ч. его применение оказывается предпочтительным, я не спорил и сам на это указывал.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jul 5 2006, 23:49
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 12-09-05
Пользователь №: 8 464

|
C я так понял - арифметика. Но когда скорость (особенно прерывание)- только ASM - контролируешь каждое слово хоть это и грустно, но важно... Хоть как не грузи что все есть на ASMе - там с арифметикой трудновато, ну я ж искал, делал. Это вчерашний день. Кому допустим нада 32/8 - та нахер не нада - сам мути когда скорость, а и наче 32/32 но время то идет. Бывает такое что за 25 мкс нужно сделать все - АЦП (а может и d-s), двух-канальный датчик импульсов 20кГц (+-999999), ЦАП, UART, настройка шкалы и т.д. Всем огромное спасибо за высказывания.
|
|
|
|
|
Jul 6 2006, 06:52
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(OlegIvanov @ Jul 6 2006, 02:49)  C я так понял - арифметика. Но когда скорость (особенно прерывание)- только ASM - контролируешь каждое слово хоть это и грустно, но важно... Хоть как не грузи что все есть на ASMе - там с арифметикой трудновато, ну я ж искал, делал. Это вчерашний день. Кому допустим нада 32/8 - та нахер не нада - сам мути когда скорость, а и наче 32/32 но время то идет. Бывает такое что за 25 мкс нужно сделать все - АЦП (а может и d-s), двух-канальный датчик импульсов 20кГц (+-999999), ЦАП, UART, настройка шкалы и т.д. Всем огромное спасибо за высказывания. Насчет прерываний. Попробуйте соптимизировать код обработки прерываний, сгенерированный компилятором. Интересно, во сколько раз он станет после этого меньше и быстрее? Код 54 /* Interrupt handlers */ 55 56 #pragma vector = TIMER0_OVF_vect
\ In segment CODE, align 2, keep-with-next 57 __interrupt void Timer0_Int(void) \ Timer0_Int: 58 { \ 00000000 931A ST -Y, R17 \ 00000002 930A ST -Y, R16 \ 00000004 B71F IN R17, 0x3F \ 00000006 REQUIRE ?Register_R15_is_global_regvar 59 TCNT0 = 100; // Reload TIMER0 \ 00000006 E604 LDI R16, 100 \ 00000008 BF02 OUT 0x32, R16 60 IntFlags |= TIMER0_BIT; // Set the flag \ 0000000A 9468 SET \ 0000000C F8F0 BLD R15, 0 62 } \ 0000000E BF1F OUT 0x3F, R17 \ 00000010 9109 LD R16, Y+ \ 00000012 9119 LD R17, Y+ \ 00000014 9518 RETI 63 64 #pragma vector = TIMER1_COMPA_vect
\ In segment CODE, align 2, keep-with-next 65 __interrupt void Timer1_Int(void) \ Timer1_Int: 66 { \ 00000000 930A ST -Y, R16 \ 00000002 B70F IN R16, 0x3F \ 00000004 REQUIRE ?Register_R15_is_global_regvar 67 IntFlags |= TIMER1_BIT; // Set the flag \ 00000004 9468 SET \ 00000006 F8F1 BLD R15, 1 68 } \ 00000008 BF0F OUT 0x3F, R16 \ 0000000A 9109 LD R16, Y+ \ 0000000C 9518 RETI
\ In segment INTVEC, offset 0xc, root \ `??Timer1_Int??INTVEC 12`: \ 0000000C .... RJMP Timer1_Int
\ In segment INTVEC, offset 0x12, root \ `??Timer0_Int??INTVEC 18`: \ 00000012 .... RJMP Timer0_Int
|
|
|
|
|
Jul 6 2006, 06:57
|

Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 7-09-05
Из: Riga, LV
Пользователь №: 8 333

|
Цитата(white.wind @ Jun 21 2006, 16:43)  Не обязательно, пару лет назад мы с ребятами баловались над созданием расширения C#. По началу все (парсер, генерация) писалось на самом C#, а потом расширение парсило и генерировало само себя  Вроде даже есть название такому подходу. МетакомпиляцияЦитата(vet @ Jun 22 2006, 16:05)  IgorKossak, ну, Java-процессор выполняет всё-таки не исходник, а скомпилированный байт-код. В этом смысле он не отличается от обычных процессоров. Обычный процессор, запрограммированный на Assembler-е тоже выполняет скомпилированный код. Те кто программировал непосредственно в кодах, пускаем слезу умиления (ох, CD 10 00 DA 00 02 C9) Ни один процессор, насколько я знаю, не в состоянии непосредственно испольнять текст программы, введенный с клавиатуры Цитата(Kopa @ Jun 28 2006, 06:09)  Экзотичность языка, прежде всего, связана с его малой известностью( если не сказать почти 0-й) среди российских разработчиков аппаратуры и непониманием его идеалогии. Две страны где он был особенно долго популярен (не считая родины) - Корея и СССР. По вполне понятной причине - реализуемости "на коленке" - нежелании зависеть от западных разработчиков компиляторов. На западе закат Форта начался уже давнооооо. Только идеи, лежащие в его основе, заставляют снова и снова будить мертвеца Цитата(beer_warrior @ Jun 30 2006, 13:37)  Тут можно сделать лирическое отступление - да, корпоративному миру нужны дешевые кодировщики тривиальных задач, которыми можно легко помыкать, но мы то хотим быть хорошими спецами-универсалами, которые могут взяться за любую работу, да и денег не просить, а требовать  Имеется логическое противоречие "специалист-универсал"  . Вообще-то существут специалисты и дженералисты, и противоречия между ними, старые как мир
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|