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

 
 
12 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> ASM: приказали долго жить?, Сколько еще продержится
Alex_Pol
сообщение Jun 21 2006, 14:06
Сообщение #31


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

Группа: Свой
Сообщений: 192
Регистрация: 23-03-05
Из: Украина. Днепропетровск
Пользователь №: 3 626



2 OlegIvanov. Слухи о смерти асма сильно преувеличены. Почти 30 лет на нём пишу. Начинал с КР580 (до чего приятный ассемблер), потом Зилог, 286, пик (гадость редкая) MSP (напомнило 8080),
сейчас АВР. Если не страдаешь склерозом, можно спокойно на нём писать. И на коментарии не скупиться. Всё сказанное, ясное дело, ИМХО.
Go to the top of the page
 
+Quote Post
tag
сообщение Jun 21 2006, 14:26
Сообщение #32


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

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(IgorKossak @ Jun 20 2006, 10:38) *
Хм, надо же.
Опять подняли религиозную тему!
Накняпали уже 11 постов и не переругались wink.gif
Растём!
Теперь по теме.
Знать асм и писать на асме это далеко не одно и то же.
Здесь я где-то согласен с beer_warrior, что отлаживать тонкости, особенно связанные с железом, зная асм легче.
Другое дело - писать. Стараюсь в своих проектах избегать этого где только возможно.



Начинал писать на асм-е ещё под Z80, теперь в основном на Си и скажу вам что практически в любом проекте это незаменимая штука, асм то есть, всегда есть критические по времени участки кода... и ещё опыт писания на асм-е очень сильно помогает при отладке работы с железом.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 21 2006, 16:26
Сообщение #33


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(SasaVitebsk @ Jun 21 2006, 00:09) *
Простите, может я не понял вопроса, а что вариант
RJMP PC+$400
не катит?
Проверил. Действительно сработало (для IAR получилось RJMP $+800). Запомню. А я как только ни пробовал...

P.S. Для тех кто писал позже: Я знаю что в общем случае использовать вычисленную самостоятельно константу смещения - это грязный хак, и что транслятор с языка ассемблера предоставляет для решения этой проблемы очень удобное средство - метки, но в том конкретном случае расстояние между одноименными векторами в boot и application областях фиксировано и одинаковое, а программа писалась с расчетом чтобы можно безболезненно поделить ее на две - для application и для boot области. И чтобы при этом будучи залиты в один кристалл они дружили между собой пользуя куски кода друг друга. Ну в общем "так было надо!"

Сообщение отредактировал Сергей Борщ - Jun 21 2006, 16:28


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 21 2006, 19:45
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Сергей Борщ @ Jun 21 2006, 19:26) *
Цитата(SasaVitebsk @ Jun 21 2006, 00:09) *

Простите, может я не понял вопроса, а что вариант
RJMP PC+$400
не катит?
Проверил. Действительно сработало (для IAR получилось RJMP $+800). Запомню. А я как только ни пробовал...

P.S. Для тех кто писал позже: Я знаю что в общем случае использовать вычисленную самостоятельно константу смещения - это грязный хак, и что транслятор с языка ассемблера предоставляет для решения этой проблемы очень удобное средство - метки, но в том конкретном случае расстояние между одноименными векторами в boot и application областях фиксировано и одинаковое, а программа писалась с расчетом чтобы можно безболезненно поделить ее на две - для application и для boot области. И чтобы при этом будучи залиты в один кристалл они дружили между собой пользуя куски кода друг друга. Ну в общем "так было надо!"


1) Такой вариант написания часто используется при написании макросов. Ну например:
.MACRO LongBREQ
brne PC+2
rjmp @1
.ENDMACRO
Иногда для этих же целей используются локальные метки.

2) Применение значка $ для обозначения PC является "более стандартным". Практически во всех ASM я использовал такой вариант. Например нижеследующий вариант считается стандартной командой стоп. smile.gif
jmp $

3) Я действительно избегаю всех чисел. Если необходим косвенный переход, то использую разность меток. Типа
step1:
....
rjmp $+(step2-step1)
....
step2:

Ещё чаще использую другой приём.
Очень часто в голове крутятся несколько задач. Назовём их к примеру step1,2,3,... Я пишу их таким образом чтобы был один вход и один выход. Поэтому они получаются перемещаемыми. Делаю я это так...

// Шаг 1
step1:
...
// тело
...
step1_end:

// Шаг 2
step2:
...
// тело
...
step2_end:

.....

Нетрудно догадаться, что если мне необходимо завершить текущий шаг, то я перехожу на метку конца данного шага. Таким образом получаются законченные блоки которые можно вставлять или перемещать. Можно также управлять временем работы данного блока.


Теперь по теме. Мне кажется предсказывать, - дело не благодарное. Конечно производительность и ресурсы камней растут. С др. стороны написание на Си строки типа:
PORTE &= ~(1<<DIR_RS485)
Которое так "грамотно" компилится на IAR AVR, может оказаться не таким грамотным для другого МП. Всвязи с этим хочется сказать, что программирование на С не так уж и независимо, как этого бы хотелось. А знание ассемблера частенько помогает понять действия компилятора, и соответственно подход к написанию прог на языке высокого уровня. smile.gif С др. стороны, возможно иногда бывает сложно абстрагироваться, избавится от лишних знаний и подойти к написанию "чистым".
Как всегда - дуальность. smile.gif А выбирать только Вам!
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 22 2006, 10:56
Сообщение #35


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(dxp @ Jun 21 2006, 06:27) *
Цитата(defunct @ Jun 21 2006, 02:54) *

Он не просто не страшный совсем, я бы сказал AVR-ASM самый удачный и простой в использовании среди всех других ассемблеров MK.

Очень спорный тезис. Меня так после асма 51-го AVR'овский просто ломал. Немного лучше стало, когда слепил кучу макросов, чтобы уменьшить объем писанины. Когда перешел на С (а это оказалось оченно правильным, т.к. С код на AVR ложится очень неплохо), то началась просто другая жизнь. Хотя асм AVR'овский не забывал - частенько инспектировал кодогенерацию по листингам. На сегодня могу сказать, что и асм MSP430 куда как удобнее и приятнее, чем AVR'овский.

Я тоже мигрировал с 51-го на AVR, первую неделю плевался, а потом разобравшить понял насколько порядков AVR-Asm лучше. Слепил макросы в стиле x86 и стало вообще все просто.
чем меньше команд имеется в арсенале программиста, тем сложнее писать программу на ассемблере. У MSP всего 27 мнемоник, если не ошибаюсь, и операнды перевернуты (аргументы идут первыми параметром, рез-тат записывает во второй). Следовательно для программиста MSP-Asm просто не может быть куда удобнее и приятнее AVR-овского у которого 130+ мнемоник.


Цитата
Цитата(defunct @ Jun 21 2006, 02:54) *

Писать программы (без математики с плавающей точкой) на Avr-ASM не сложнее чем на C.

Опять не соглашусь - сложнее, дольше и получается громоздкий (по сравненю с С) и запутанный код, в котором через пару месяцев и автору с ходу не разобраться. Из всех асмов, которые приходилось видеть, самым похожим на С является ассемблер для Blackfin'а. AVR'у в этом смысле до Blackfin'а далеко. smile.gif

"Технически Вы не король" © Шрек smile.gif
Высмысле, технически Blackfin не МК.
По поводу сложнее и дольше - возможно.
По поводу запутанности кода, это смотря как писать, можно на C написать так, что через пару месяцев в коде не разберется даже автор. А можно написать на ассемблере так, что сходу будет все понятно.
Go to the top of the page
 
+Quote Post
CD_Eater
сообщение Jun 22 2006, 11:03
Сообщение #36


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

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Всегда писал для AVR-ок на АСМе и не собираюсь переходить на Си. Типичный размер программы - неск.тыс.строк. Поскольку всегда приходится что-то экономить (иногда флешь, а чаще всего ОЗУ), то доверить это компилятору не хочу. Да и в голове держать особенностей реализации нужно меньше, если используется АСМ - меньше сюрпиризов при компиляции.

Большой минус АСМа - плохая переносимость на другие МК. Но зачем переходить, если область применимости каждой программы ограничена одним проектом и соответствующим железом ? Пока не сталкивался с задачами, которые формулировались бы так: "написать программу, которую потом можно будет откомпилировать под любой МК". Обычно сначала выбирают железо+алгоритм, потом определяют оптимальный МК, и только после этого пишут программу.
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 22 2006, 11:40
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



CD_Eater
Поправьте, если я ошибаюсь, но, на мой взгляд, требования к ОЗУ одинаковы что у ассемблерной программы, что у сишной, и определяются исключительно потребностями алгоритма.
Память программ - да, расходуется экономнее, но совсем ненамного, да и критично это только на мелких контроллерах. К тому же, по отзывам, на больших проектах тот же IAR начинает создавать более плотный код, чем человек на ассемблере. Здесь это обсуждалось в одной из тем.
Что до переносимости - лично я занимаюсь переносом программ постоянно по мере появления новых МК и наращивания возможностей разрабатываемых устройств. Свежий пример - возникла необходимость добавить функций в устройство; заменили в приборе мегу128 на SAM7S, т.к. перестало хватать ОЗУ под алгоритм. Весь перенос софта в результате был сведён к освоению новой периферии. Сколько бы я переносил его, будь он написан на ассемблере - страшно и представить smile.gif


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
COMA
сообщение Jun 22 2006, 11:45
Сообщение #38


Знающий
****

Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559



Цитата(white.wind @ Jun 21 2006, 17:43) *
Не обязательно, пару лет назад мы с ребятами баловались над созданием расширения C#. По началу все (парсер, генерация) писалось на самом C#, а потом расширение парсило и генерировало само себя biggrin.gif Вроде даже есть название такому подходу.

bootstrap.
Или вытягивания себя за шнурки.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jun 22 2006, 11:59
Сообщение #39


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(white.wind @ Jun 21 2006, 16:43) *
Цитата(CDT @ Jun 21 2006, 17:19) *

..хотя бы по тому, что для создания компилятора С он тоже нужен.


Не обязательно, пару лет назад мы с ребятами баловались над созданием расширения C#. По началу все (парсер, генерация) писалось на самом C#, а потом расширение парсило и генерировало само себя biggrin.gif Вроде даже есть название такому подходу.

Вот и попробуйте сделать компилятор хотя бы для AVR. Лексический анализ, парсер, оптимизация на машинно-независимом уровне, все это можно без всякого ассемблера сделать. А вот дальше, кодогенератор (back-end часть) невозможно сделать без знания архитектуры целевого процессора. А архитектура процессора - это тот же самый ассемблер. Только не для программирования, а для описания. Да и отлаживать кодогенератор проще, если видеть какой он ассемблерный код генерирует.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 22 2006, 12:14
Сообщение #40


Adept
******

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



Цитата(defunct @ Jun 22 2006, 17:56) *
Я тоже мигрировал с 51-го на AVR, первую неделю плевался, а потом разобравшить понял насколько порядков AVR-Asm лучше. Слепил макросы в стиле x86 и стало вообще все просто.
чем меньше команд имеется в арсенале программиста, тем сложнее писать программу на ассемблере. У MSP всего 27 мнемоник, если не ошибаюсь, и операнды перевернуты (аргументы идут первыми параметром, рез-тат записывает во второй). Следовательно для программиста MSP-Asm просто не может быть куда удобнее и приятнее AVR-овского у которого 130+ мнемоник.

Дело не в количестве мнемоник, а в удобстве системы команд. На 51-м если мне надо проинкрементировать счетчик - inc var, и все, а на AVR - три команды. И при этом вся операция получается неатомарной - если этот счетчик является разделяемым ресурсом, то придется дополнительний защитный код городить. И об этом надо всегда помнить. Макрос, конечно, писанину уменьшит, но зато способствует сокрытию проблемы неатомарности операции. В общем, по любому появляется дополнительний геморрой.

И таких примеров можно привести кучу. Что касается MSP430, то разложите его 27 инструкций на способы адресации - там еще больше варинатов выйдет. У MSP430 система команд куда ортогональнее, чем на AVR, и именно это обстоятельство делает работу с его асмом значительно проще и приятнее. Порядок операндов - вообще мелочь и дело привычки. Скажите - Вы писали на асме для MSP430?

Цитата(defunct @ Jun 22 2006, 17:56) *
"Технически Вы не король" © Шрек smile.gif
Высмысле, технически Blackfin не МК.

Хе. А как называется микросхема, у которой процессорное ядро, несколько таймеров с возможностями Compare/Capture/PWM, UART[s], SPI, многофункциональные последовательные порты (в т.ч. способные работать и как SPI), ноги на ввод/вывод, есть варианты с CAN и другими периферийными устройствами? Сейчас уже анонсированы чипы с набортной флешью. Есть режимы с пониженным энергопотреблением, в т.ч. и 200 МГц при 50 мВт потребления по ядру - по удельному потреблению мелкий МК, который бы мог тут поспорить, еще поискать.

Если АРМы считаются МК, в том числе и АРМ9, то уж Blackfin тут ничем не хуже. Это однокристальная микроЭВМ ака микроконтроллер. Конечно, весовая категория у него не та же, что у AVR, MSP430, PIC и другая мелкая братия, но тем не менее.

Цитата(defunct @ Jun 22 2006, 17:56) *
По поводу запутанности кода, это смотря как писать, можно на C написать так, что через пару месяцев в коде не разберется даже автор. А можно написать на ассемблере так, что сходу будет все понятно.

Можно. Все можно. Но на С, в отличие от асма, можно написать практически самодокументирующися код. А на асме для хорошей понимаемости придется комментария наворотить больше самого исходного кода. Разница, как грицца, половая. smile.gif

Т.ч. каждому свое - основной объем на ЯВУ, критичные по скорости/размеру куски, а также сильно платформеннозависимые - асму.

Отвечая на вопрос темы, соглашусь с уже озвученным: асм будет жить до тех пор, пока будут жить процессоры, всегда были, есть и будут оставаться ситуации, когда никакой ЯВУ родного ассемблера не заменит.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jun 22 2006, 12:21
Сообщение #41


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(dxp @ Jun 22 2006, 15:14) *
Дело не в количестве мнемоник, а в удобстве системы команд. На 51-м если мне надо проинкрементировать счетчик - inc var, и все, а на AVR - три команды. И при этом вся операция получается неатомарной - если этот счетчик является разделяемым ресурсом, то придется дополнительний защитный код городить. И об этом надо всегда помнить.

Так а в AVR не сложнее.
Код
         inc       r15     ; Увеличить счетчик

Операция самая что ни на есть атомарная, и требуется всего лишь одна команда.
Go to the top of the page
 
+Quote Post
COMA
сообщение Jun 22 2006, 12:27
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559



чтение из ОЗУ
инкремент
запись в ОЗУ

3 команды smile.gif
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 22 2006, 12:28
Сообщение #43


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
Большой минус АСМа - плохая переносимость на другие МК. Но зачем переходить, если область применимости каждой программы ограничена одним проектом и соответствующим железом ? Пока не сталкивался с задачами, которые формулировались бы так: "написать программу, которую потом можно будет откомпилировать под любой МК". Обычно сначала выбирают железо+алгоритм, потом определяют оптимальный МК, и только после этого пишут программу.


Стеки протоколов, файловые системы, сложные математические алгоритмы (фурье, сжатие) не зависят от используемого железа.
Шедулеры операционных систем зависят от него незначительно.

Знаете ли быват очень приятно, общие константы и структуры расшарить между софтом МК и РС.
Одно изменение попадает сразу в оба проекта smile.gif


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jun 22 2006, 12:37
Сообщение #44


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(COMA @ Jun 22 2006, 15:27) *
чтение из ОЗУ
инкремент
запись в ОЗУ

3 команды smile.gif

Зачем, если можно хранить счетчик в регистре?
Go to the top of the page
 
+Quote Post
COMA
сообщение Jun 22 2006, 12:43
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559



Случаи они разные бывают. Регистров может и не хватить.
Go to the top of the page
 
+Quote Post

12 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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