Перейти к содержанию
    

Выбор пути ... Assembler или C ?

Всем добрый день!

 

Недавно начал осваивать микроконтроллеры фирмы ATMEL. Первое с чем имел дело - AT90S2313, теперь перешёл на ATmega. Проэкты в основном небольшие (думаю это времено), пользуюсь AVR Studio. Язык, который использую - assembler. Часто посещаю форум, и особо часто попадаю на программы написанные на С.

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

 

1. почему люди переходят с assemblera на C?

2. какие плюсы и минусы языка С?

3. где без языка С нельзя обойтись?

4. лично ваше мнение относительно обоих? (ненормативная лексика принимается:-)

 

Всем, кто отзовется, заранее благодарен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала, дабы не раздувать в 999 раз флейм пройдитесь поиском по форуму.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрейшее время суток!!!

В свое время я тоже сильно раздумывал переходить или не переходить на Си, когда попробывал оценил :)

Представте Вы ехали на мерседеце, и Вам говорит содись на велосипед мол это класно свежий воздух, здоровье, а мерседец это же конфортнее. (Этой фразой можно объяснить разницу между ASM и Си).

 

А так просто надо попробывать, и Вы ивидите в чем разница.

 

А Вам удачи в Ваших начинаниях.

С Уважением, Владимир.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот чисто практические данные.

http://electronix.ru/forum/index.php?showtopic=43498 к примеру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очередная религиозная война назревает? :smile3009: :maniac:

 

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

В теории конечно можете написать для себя математику с точкой на асме, но лучше потратить это время на освоение С...

Моё мнение - надо знать оба языка. ИМХО!!!

 

 

-----------

:bb-offtopic: Уважаемый zltigo, в этой войне на меня не расчитывайте! :biggrin:

Изменено пользователем Omen_13

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очередная религиозная война назревает? :smile3009: :maniac:

Только попробуйте! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, см. выше!

 

Добавлю еще:

Асм как язык привязан к семействам - насколько я помню 51, АВР и ПИКи по командам отличаются довольно капитально, т.е. при смене практически всё придётся писать с 0. Зная только асм вы принудительно ограничиваете себе "область применения". При написании проги больше 4 кБ надо очень постараться не наклепать ошибок.

С другой стороны при использовании С вы вносите элемент неизвестности - кто знает как компилятор разложит команды в машинный код и какие при этом могут возникнуть ошибки по вине разработчика компилятора (шашкой махать не буду - об этом уже говорили/спорили).

Изучить аппаратные особенности применяемого процессора всё равно придётся в не зависимости от того какой язык С или асм

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, ассемблер - это база, которую ДОСКОНАЛЬНО должен знать любой программист-эмбеддер, считающий себя профессионалом. Если человек "плавает" в ассемблере, то (ИМХО конечно) он и на СИ не сможет написать хорошую программу для Target MCU. Потому что в отличии от писателей программ для компов, которые (если они не пишут низкоуровневые драйвера) больше решают задачи по обработке информации разработчики программ для микроконтроллеров рещают задачи управления железом и обработки сигналов в реальном времени

 

ИМХО, сначала нужно досконально изучить архитектуру и АСМ ( который является отражением архитектуры MCU ), а уж потом пиши на чём хочешь: хоть на СИ, хоть на Паскале, хоть на Басике...Хоть на Смаллталке наконец

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

насколько я помню 51, АВР и ПИКи по командам отличаются довольно капитально, т.е. при смене практически всё придётся писать с 0.

Из опыта. А если проект написан на СИ разве не придётся всё писать практически с нуля?

 

Если Вы не пишите конечно какую-нибудь универсальную RTOS на продажу в которой априори закладывается возможность портирования на несколько архитектур.

 

А так. По-большому счёту большинтсво программ для MCU - это программы уникального применения, предназначенные для конкретного MCU в конкретном девайсе.

 

А насчёт переписывания с нуля? Я за много лет работы выработал целый ряд принципов организации программы, которые определяют какой набор мудулей должен быть в программе и как организовать алгоритм. А зная их написать код на любом языке - это плёвое дело. Я, например, легко портировал свою RTOS на АСМ-е с 51-й архитектуры под AVR. Разработка RTOS под 51 -ю архитектуру у меня заняла более полгода. А переписывание её под AVR заняло чуть больше недели....

 

Так что не с нуля

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Си так и не смог выучить - не дано наверное

 

 

 

но что точно что если проект в упор работает на ассемблере (было много случаев, когда считал команды пропробывал несколько вариантов

это было в системе некоторой обработки, где 256 раз в секунду приходили новые данные с 12 каналов и в соответствии с частотой уже стоявшего контроллера на обработку можно было потратить 1100 циклов - меньше чем 100 циклов на канал) а там надо было умножать делить искать экстреммумы сравнивать с порогом сортировать расчитывать порог по шуму складывать в буфер и передавать по последовательной линии

это уже экстримальное программирование но параллельно каждой ассемблерной команде стояла её длительность и количество циклов от начала

 

на си этого сделать нельзя, задачи подобного рода не решаемы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем, кто отзовется, заранее благодарен!

Си конечно лучше, но Ваша проблема, видимо, это отсутствие хорошего компилятора Си и еще, наверное, некому ввести в курс дела.

Рекомендую IAR (для AVR) и Keil (для 51), все это есть с лечениями. Что характерно, просматривая листинги асм-кода после компиляции, Вы еще лучше начнете писать программы на ассемблере. А также делать асм-вставки в Си-коды, в критичных местах. Но это уже высший класс, для этого надо много стараться и ковыряться в интернете, а также надо найти рядом помощника, чтобы подсказал.

Изменено пользователем 608

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на си этого сделать нельзя, задачи подобного рода не решаемы
Ну, это и на тираж предполагаемый смотреть надо...

Если ожидаемый тираж пусть 1000 штук, зарплата программиста пусть 1000 баксов, протолчётся на асме считая такты он пусть лишний месяц - итого можно спокойно брать процессор на 2 бакса дороже и спокойно писать на С. Это будет как минимум не убыточно (затраты на программиста больше получаемой им зарплаты, надо ещё о сопровождении подумать).

Числа можно двигать туда-сюда и думать, стоит ли оно того.

А также не мешает проштудировать "историю одного байта" и подумать о том, что время сейчас несколько другое, если вдруг плнадобится не 256, а 320 раз в секунду или не с 12 а с 16 каналов - разрабатывать всё заново?

 

Конечно, есть крайние случаи - типа такого: тираж предполагается 10000/месяц, среднерыночная цена изделия так мала, что каждый цент на счету, из соображений потребления и быстродействия приходится каждый такт экономить - и это всё одновремённо.

Но что-то мне говорит, что в большинстве случаев это не так, на асме пишется по привычке/из любвы к искусству и можно или всё написать на С, или только критические 5% написать на асме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас в корне неправильное понимание вопроса: "Выбор пути ... Assembler или C ?".

 

Это неправильно, потому что правильно: "Выбор пути: Assembler ==> Assembler и C ==> Assembler и C++ ==> То_Что_Дальше_Придумают" :biggrin:

 

То, что начали с ассма, хорошо. Без его знания правильно писать на Си будет трудно: в листинг на ассме частенько заглядывать приходится. А дальше - исходя из задачи по быстродействию: укладывается программа на Си по быстродействию в нужные рамки - тогда чистый C/C++. Не укладывается - критические секции на ассме. Вот и вся философия пути :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и вся философия пути :)

Да и философии тут нет никакой.

Один только момент - если вовремя не задуматься, как по другому можно сделать проект - значит потерять перспективу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, это и на тираж предполагаемый смотреть надо...

Если ожидаемый тираж пусть 1000 штук, зарплата программиста пусть 1000 баксов, протолчётся на асме считая такты он пусть лишний месяц - итого можно спокойно брать процессор на 2 бакса дороже и спокойно писать на С. Это будет как минимум не убыточно (затраты на программиста больше получаемой им зарплаты, надо ещё о сопровождении подумать).

Числа можно двигать туда-сюда и думать, стоит ли оно того.

А также не мешает проштудировать "историю одного байта" и подумать о том, что время сейчас несколько другое, если вдруг плнадобится не 256, а 320 раз в секунду или не с 12 а с 16 каналов - разрабатывать всё заново?

 

Конечно, есть крайние случаи - типа такого: тираж предполагается 10000/месяц, среднерыночная цена изделия так мала, что каждый цент на счету, из соображений потребления и быстродействия приходится каждый такт экономить - и это всё одновремённо.

Но что-то мне говорит, что в большинстве случаев это не так, на асме пишется по привычке/из любвы к искусству и можно или всё написать на С, или только критические 5% написать на асме.

 

тираж был единичный - 3 экземпляра - на самом деле это НИР

другой процессор поставить и изготовить новый образец никто бы не дал - ВПК блин - он наверное там до сих пор стоит)))

 

, да и стоимость его была не на 2 доллара больше речь о TMS2406 и TMS2812 5 лет назад они только появились.

 

скорость написания - согласен

знаковая арифметика не беспокоит

функций навалом

можно быстро написать работающий проект не беспокоясь о забытых переменных и LDP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...