Возможно ли без знакомства с ассемблером освоить Си самостоятельно
Читал статью на этом сайте http://easyelectronics.ru/category/avr- ... urs/page/3
но здесь сказано что это будет сложно и непонятно изучать си без знакомства с асамблером.
Хочу услышать ваше мнение по этому.
Прочел несколько тем о асамблер и мало что понял думаю сразу перейти к изучению си на этом сайте.
Если кто изучал си самостоятельно то посоветуйте ресурс если вы считаете что там лучше и более понятнее объяснено
Спасибо
ATtiny13 писал(а):Возможно ли без знакомства с ассемблером освоить Си самостоятельно
Думаю, что можно..
Каждый пишет на том языке, который считает более удобным для себя или для решаемой задачи..
Если просто сравнить два языка, то Си "абстрагирует" от низкоуровневых механизмов МК, а Асм наоборот - приближает к ним..
Мя на Асме пишу более 20 лет и за это время принимался освоить Си, но понял, что это "не моё"..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
ATtiny13 писал(а):Возможно ли без знакомства с ассемблером освоить Си самостоятельно
Конечно. Собсно, никакой прямой связи нету.
Но, для реально продвинутой отладки программ и анализа оптимизации знание ассемблера (тут не забываем, что это не язык как таковой, а мнемонический вид кода КАКОГО ЛИБО ОПРЕДЕЛЕННОГО процессора) обязательно.
Си учишь раз. А ассемблер для каждого ядра поновой.
Satyr писал(а):Мне и самому уже западло всякие модные C# и .Net'ы даже смотреть
А и не смАтри на них и зомбояЩЫк выкини..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Освоить Си - да, там, в общем, никакой связи нет. Но чтобы чувствовать архитектуру и писать оптимальные программы на том же Си, обязательно хотя бы иметь представление о целевом ассемблере.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Поддерживаю на 100% все выше сказанное уважаемыми котами, от себя добавлю:
для мелких камней, типа той же tiny13, писать на асме как-то кошернее, но это мнение заскорузлого асмо-кота
Пиши на Си и никого не слушай. Если не хватит памяти - возьми камень с памятью побольше.
И еще один момент - многие вещи на асме реализовать сложнее чем на си. К примеру работу с числами с плавающей запятой.
При создании программ для "настоящих" компьютеров (на тех же персоналках, например), где используются полноценные операционные системы, знание ассемблера, вообще говоря, не требуется: ОС не только скрывает от программиста все низкоуровневые элементы аппаратуры, но даже не подпускает к ним. Фактически единственные области, где ассемблер может пригодиться на ПК -- это оптимизация критических участков кода (хороший программист-ассемблерщик напишет более эффективный код, чем даже самый лучший компилятор) и решение некоторых очень уж специфических задач.
Микроконтроллеры -- иное дело. Здесь программист напрямую имеет дело с аппаратурой, ему доступны все возможности аппаратуры. Хотя в большинстве случаев можно обойтись языком высокого уровня (в данном случае неважно, каким именно), в некоторых случаях без знакомства с ассемблером не обойтись. Кроме того, бывают случаи, когда без его знания невозможно отладить программу, написанную на том же Си. Наконец, ресурсы микроконтроллера намного ограниченнее, чем ПК, и поэтому не всякую задачу можно решить средствами языка высокого уровня: полученный код может банально не помещаться в памяти.
ithappens.ru писал(а):Всё та же маленькая фирма по производству электроники. Чтобы на 100% загрузить производство и обеспечить пропитание сотрудниц, взялись за монтаж плат сторонней разработки. Утром начальник производства подходит к инженеру-электронщику с просьбой сделать приспособление для проверки готовой продукции. Задача тривиальная: организовать включение и выключение двух нагрузок по таймеру. Инженер занят другим делом, поэтому извлекает из стола какую-то пыльную плату с AVR ATmega32 на борту, два симистора, часовой кварц и вручает это новому технику со словами: «Если что — обращайся, но к концу дня чтоб работало».
Итак, к обеду всё собрано, написана примитивная прошивка в 20 строчек — только встроенные функции, без указателей, дефайнов и прочих ненужных технику сложностей. Нагрузки подключены. Что такое? Через десять минут минут теста в предельном режиме на испытуемом приборе начинает моргать питание. На бедного техника тут же накинулись:
Начальник производства: «У тебя весь монтаж соплями, сделай нормальную плату!»
Программер: «Ты прошивку делал в CodeVision, он явно криво компилирует. Поставь WinAVR + AVRStudio и Eclipse».
Главный инженер: «Этот С вообще какой-то непонятный. Перепиши на ассемблере, не ошибёшься!»
Пока парня не заставили делать кучу лишней работы, инженер-электронщик подходит к месту действия и видит «медленный» диод в импульсном блоке питания испытуемого изделия. Подносит палец, чувствуя тепло. Переворачивает испытуемую плату — отпаявшийся от перегрева диод выпадает, и в блоке питания происходят «необратимые разрушительные изменения с выделением тепла, света и углекислого газа». Инженер хвалит техника за хорошую работу, даёт начальнику производства указание заменить диод на более «быстрый» и выставить заказчику пятизначный счёт за решение многолетней проблемы непредсказуемых отказов блоков питания.
Пришёл поручик Satyr и в теме начал витать запаХХХ АРМ-оФФФ..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Насчет экзотических комманд, которые очень хочется вызывать...
За прочие компилеры не поручусь, а в IAR под все платформы есть такая чтука, как intrinsic операторы, через которые вся экзотика вытащена в С
Вообще какой-то некорректный вопрос. Многие, думаю, пишут под большие современные архитектуры ПК? Вы же не осваивали написание на ассемблере до изучения языков высокого уровня? Сомневаюсь, что вы знаете хотя бы половину "примочек", которые умеет ваш проц. Вам достаточно, что ваш компилятор "в теме". Зачем связывать в данном случае? Из-за того, что ассемблер для МК прост и МК достаточно мал и туп? Глупости.
Код на си - это листинг, написанный на языке программирования. В силу этого и при достаточно малой кривизне рук он читаем, расширяем, может быть весьма модульным и _включать_ в себя мнемоники ассемблера (превед, экзотические комманды) (многие, думаю, видели их в исходниках). Его легче поддерживать, с ним легче работать, его с можно портировать под другие архитектуры почти без глубокого запоя программиста и т.д.
Код на ассемблере - это код на ассемблере. Это удобоваримые человеком команды процессору. Со всеми вытекающими последствиями.
Многие не читают даташит на свой МК, о каком же Си и ассемблере может идти речь, если люди вообще не понимают, как работает МК и что нужно делать, чтобы заставлять его работать.
А чо?
На "настоящих ПК" я активно пользовал асм для отладки -)))
отлаживаем DLL, которая пользуется из сторонней программы, чей код недоступен и отладка, так сказать, затруднена.
В интересующем месте рисуем типа (зависит от компилера) __asm { int 3 } , компилем, подкладываем, запускаем без всякого отладчика.
Ждем пока всплывет сообщение, что все пропало и соглашаемся запустить отладчик по умолчанию. Дальше любуемся на свой исзодный код и все значения переменных -)))
Ну, символы, конечно, надо в правильные места разложить предварительно.