Какую хорошую встраиваемую платформу использовать для изучения ассемблера? - PullRequest
8 голосов
/ 10 января 2011

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

Теперь я хочу сделать еще один шаг вперед и выучить ассемблер, но в идеале я хотел бы учиться на встроенномплатформа, где я вижу некоторые из моих будущих проектов.Вопрос в том, что является наилучшей отправной точкой или «комплектом» для начинающего?

Я ищу что-то, что достаточно легко собрать, может сделать вещи «реального мира» и в целом обеспечить хорошую основуна котором можно построить.

Ответы [ 5 ]

2 голосов
/ 10 января 2011

AVR не лучший набор команд. Я бы сохранил его для второго или третьего набора инструкций. Но в конечном итоге вы можете оказаться там, потому что arduino невероятно популярен и пользуется хорошей поддержкой сообщества (хотя asm - исключение, а не правило в этом мире).

прямо сейчас вы можете получить плату msp430 за 4,30 доллара, в основном TI съедает плату за эти вещи. MSP430 хороший набор инструкций для изучения.

Armmite Pro не плохая доска размером с Arduino, но использует руку вместо avr. рука и большой палец - хорошие наборы инструкций.

Существуют эмуляторы практически для всего, написание эмулятора - хороший способ узнать, как все работает. Если ничего другого, я обычно рекомендую написать дизассемблер.

Кроме того, набор команд с компилятором C хорош тем, что вы можете написать некоторый код на C, поиграть с оптимизацией и посмотреть, какой тип ассемблера выводится, и узнать разные вещи о ассемблере. Сначала изучите некоторые приемы для повышения эффективности и производительности, позже вы сможете превзойти компилятор или, по крайней мере, быть на одном уровне. все упомянутые выше имеют своего рода компилятор C, avr и msp имеют способы заставить работать gcc, arm и thumb поддерживаются компиляторами mainline. Llvm автоматически является кросс-компилятором, поэтому вам не нужно компилировать компилятор для начала работы, бэкенд msp430 для llvm является экспериментальным, но должен работать или быть близким, бэкенды arm и thumb отлично работают (используйте -m32 в clang, чтобы избежать 64 бит целые числа на 64-битном хосте).

Микросхемы Stellaris, ранее Luminary Micro, теперь TI (Texas Instruments) хороши, только thumb / thumb2. Mbed на самом деле довольно хорош, кроме синих светодиодов (дайте мне мигрень), вам не нужно фиксировать в песочнице, подключить USB, он монтируется как файловая система, скопировать ваш .bin файл на флэш, нажать кнопку сброса и он запускает вашу программу.

sparkfun.com - ваш друг, разработчик инструментов, и у всех игроков есть длинный список плат на основе микроконтроллеров. плата msp430, о которой я упоминал, стоит около 5 долларов, armmite pro, много ардуинских ароматов, я рекомендую площадку lilly, она примерно той же цены, что и arduino pro, но уже имеет припаянный заголовок для использования с маленьким usb к серийным вещам, которые вы также захотите приобрести. Stellaris не представлен на sparkfun, но есть много плат за $ 50.

Платы msp430, armmite pro, arduino, stellaris, mbed и другие нуждаются в питании, которое обычно подается через кабель usb, или, в некоторых случаях, для передачи данных по USB на основе ftdi

Если вы идете по пути эмулятора, qemu поддерживает несколько наборов команд, arm / thumb. там есть геймбой и эмуляторы. эмулятор ideas nds в исходном виде поставляется с ядрами arm для arm9 и arm7, хотя я не пытался извлечь и использовать их самостоятельно. Если вы хотите пойти в старую школу, есть тонны эмуляторов 6502 и z80, и некоторые компиляторы верят этому или нет, конечно, ассемблер.

Последний ассемблер, который я узнаю, это x86, ужасный набор инструкций, и с вариациями и микрокодированием вы не собираетесь превзойти компилятор по всем направлениям, да, ваш компьютер на данный момент, но на всех компьютерах x86 это не стоит времени , Другие наборы инструкций важнее знать (arm, thumb, thumb2, avr).

0 голосов
/ 12 января 2011

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

Многие курсы по сборке используют MIPS.Набор инструкций MIPS прост, и высокопроизводительные микроконтроллеры PIC (от Microchip) используют его.Процессоры MIPS обычно встречаются в домашних маршрутизаторах. OpenWRT является заменой прошивки для многих таких домашних маршрутизаторов на основе Linux.OpenWRT-совместимый маршрутизатор стоит 50 $ и является дешевым и простым способом войти в мир встраиваемых систем.

Многие мобильные платформы, в частности мобильные телефоны, используют процессоры ARM (фактически, все смартфоны и планшеты используютARM, но я читал, что около 15% дешевых не-умных телефонов все еще используют что-то еще, обычно MIPS).Платформа ARM немного сложна;Существует несколько наборов команд (исходный 26-разрядный ARM, 32-разрядный ARM, Thumb, Thumb-2) и несколько соглашений о вызовах (ATPCS, AAPCS ...).Комплекты для разработки на основе ARM можно приобрести у нескольких поставщиков, например Gumstix .Существует несколько маршрутизаторов на основе ARM, на которых работает OpenWRT, но они встречаются гораздо реже, чем маршрутизаторы на основе MIPS.

Автомобильная и авиационная промышленность, похоже, довольно любят процессоры PowerPC для своих встроенных систем.Кроме того, все современные игровые приставки используют архитектуру PowerPC (PS3, Xbox 360, Wii).Для платформы разработки PowerPC я рекомендую купить старый Mac, например, на Ebay или у восстановленного компьютерного дилера.Есть указатели от Low End Mac ;ищите машину с G3 или G4.Я купил iBook «раскладушка» на основе G3 за 60 $ на Ebay;с NetBSD это идеальная платформа для разработки на базе PowerPC.

Процессор x86, как и любой другой ПК, также должен быть изучен, хотя бы потому, что он широко распространен.Компьютер, которым вы пользуетесь, будь то ПК или Mac, выпущенный после 2005 года, - это ваша платформа для разработки, так что это дешево (у вас уже есть оборудование).Набор инструкций "не элегантный".Не изучайте это как свою первую сборку, но посмотрите на это для своей второй или третьей.Каждый год или около того процессоры x86 разрабатывают новый набор дополнительных инструкций, так что теперь у них есть сотни таких инструкций, которые могут быть довольно сложными;Я рекомендую начать с инструкций для оригинала 80386 .

Некоторые другие архитектуры использовались и до сих пор используются для встроенных продуктов, например, 68000, но они встречаются реже.Обратите внимание, что я говорю здесь о «больших» встроенных продуктах.Существуют также небольшие системы с архитектурой, такие как AVR, PIC до MIPS, 80C51 ... Это зависит от того, когда вы говорите «встроенный», вы думаете «домашний маршрутизатор» или «программируемый тостер».В любом случае, я также рекомендую использовать QEMU .QEMU - это программный эмулятор.Он может запускать полнофункциональный виртуальный компьютер на базе ARM или MIPS в комплекте с операционной системой (например, Debian Linux ) на базовом ПК.Он не поможет вам в оптимизации, связанной с синхронизацией, но значительно упростит тестирование разработки и исправления.

0 голосов
/ 11 января 2011

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

Это действительно шаг вперед или шаг назад?Возможно, это путь к более глубокому пониманию, но вряд ли это путь к большей производительности.


Не существует единого «языка ассемблера», каждая архитектура процессора имеет свой собственный набор команд, поэтому обучение язык ассемблера позволит вам программировать только эту конкретную цель (хотя он также даст вам общие навыки программирования низкого уровня и понимания работы процессора).Код, который вы генерируете, также будет специфичен для одной архитектуры, поэтому все ваши усилия и инвестиции в код будут гораздо менее переносимыми, чем в языке высокого уровня.Если в конечном итоге выбранная вами архитектура устареет (а их много), ваши навыки сборки для этой архитектуры станут в значительной степени избыточными знаниями, помимо общих навыков, которые она может предоставить (быстрее освоится новый набор инструкций и архитектура).

Если вы не собираетесь много заниматься ассемблером и не станете очень опытным в конкретном наборе инструкций (и у вас есть веские основания для этого), изучение ассемблера вообще имеет ограниченную ценность.Это полезно, если вы реализуете код запуска для инициализации процессора и устанавливаете среду выполнения для своего кода C или C ++, но это может в значительной степени предоставляться поставщиком микросхемы или инструмента, и вам не нужно полное пониманиеarchitectire или набор команд для использования или адаптации такого кода.

Одним из часто предлагаемых аргументов для использования ассемблера является производительность, но в целом оптимизирующий компилятор будет генерировать код почти или почти так же эффективно, как опытный программист на ассемблере, ичаще всего более эффективный, чем менее опытный.Вы видите, что компилятор - это, по сути, экспертная система , что касается целевого набора команд и архитектуры.Как правило, он знает каждую доступную инструкцию и их время выполнения, каждый регистр, каждый режим адресации и понимает механизмы конвейерной обработки, кэширования, прогнозирования ветвлений и т. Д. На сложном процессоре среднего уровня опыт компиляторов превзойдет все, кромебольшинство специализированных программистов на ассемблере, и на простых процессорах гораздо меньше можно получить в любом случае.

Одна область, где ассемблер может быть полезен, заключается в использовании аспектов некоторых процессоров, которые компилятор или его библиотека не могуттрогают.Например, часто используется ассемблер на процессорах DSP, но даже там использование оптимизированных библиотек DSP (обычно сами написанных на ассемблере), или расширений компилятора или языковых идиом, которые компилятор распознает и может оптимизировать, делает это в значительной степени ненужным, и изучениеНабор инструкций DSP с возможностями SIMD и параллельного выполнения является значительным капиталовложением.

В последний раз, когда мне требовалось , использовался ассемблер, отличный от кода запуска C, во время переноса кода из одного ARMопределение нового с сопроцессором VFP;хотя перекомпилированная библиотека использовала VFP, функция sqrt () была реализована с использованием алгоритма сходимости, а не аппаратной инструкции sqrt.Одна функция, одна или две линии сборки;Мне, конечно, не нужно было изучать набор инструкций ARM, чтобы продвинуться так далеко.

Единственные языки ассемблера, которые я выучил подробно, это Z80 и 8051. Это было давно, иЯ все это забыл, и теперь знания в значительной степени устарели.Однако полученные общие навыки позволяют мне настраивать системы и проводить сборку платы, как уже было описано, но как человек, который набирает других разработчиков встраиваемых систем, я бы не стал уделять так много внимания кандидатам на сборку.

Я думаю, что с языком ассемблера вам нужно туристический / разговорник уровень знаний, чтобы просто обойтись, когда вам нужно, или говорить по-родному что ваши навыки имеют реальную ценность, все промежуточное имеет мало значения.

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

0 голосов
/ 11 января 2011

Я несколько неравнодушен к 14-битному набору команд PIC (микрочип) для нижнего уровня и к команде ARM для верхнего уровня. Оба относительно просты, но мощны для того, что они могут сделать. Серия PIC 18F имеет несколько более мощный набор инструкций, но эстетически мне это не очень нравится.

0 голосов
/ 10 января 2011

Для встроенной платформы AVR вы можете использовать бесплатную WinAVR , в которую встроен симулятор, поэтому освоить ASM будет легко даже без реальной платы.Вы можете найти учебник по ASM здесь .Краткое руководство по началу работы с AVR можно найти здесь .Например, все процессорные платы Arduino имеют AVR внутри, поэтому у вас очень широкий выбор.

...